In part 1 and part 5 of this series I created some giant disks with a virtual size of 263-1 bytes (8 exabytes). However these were stored in memory using nbdkit-memory-plugin so you could never allocate more space in these disks than available RAM plus swap.
This is a problem when testing some filesystems because the filesystem overhead (the space used to store superblocks, inode tables, block free maps and so on) can be 1% or more.
The solution to this is to back the virtual disks using a sparse file instead. XFS lets you create sparse files up to 263-1 bytes and you can serve them using nbdkit-file-plugin instead:
$ rm -f temp $ truncate -s $(( 2**63 - 1 )) temp $ stat -c %s temp 9223372036854775807 $ nbdkit file file=temp
nbdkit-file-plugin recently got a lot of updates to ensure it always maintains sparseness where possible and supports efficient zeroing, so make sure you’re using at least nbdkit ≥ 1.6.
Now you can serve this in the ordinary way and you should be able to allocate as much space as is available on the host filesystem:
# nbd-client -b 512 localhost /dev/nbd0 Negotiation: ..size = 8796093022207MB Connected /dev/nbd0 # blockdev --getsize64 /dev/nbd0 9223372036854774784 # sgdisk -n 1 /dev/nbd0 # gdisk -l /dev/nbd0 Number Start (sector) End (sector) Size Code Name 1 2048 18014398509481948 8.0 EiB 8300
This command will still probably fail unless you have a lot of patience and a huge amount of space on your host:
# mkfs.xfs -K /dev/nbd0p1