Just a quick post on creating sparse disks on Linux.
Currently I am working on deploying OpenStack Swift. I am using Vagrant and Virtualbox virtual machines to create an Ansible playbook to deploy and manage Swift. To do that I have been using sparse disks to mimic real disks without actually having all the disk space required.
$ cd /var/tmp
# Create a sparse file using the truncate command
$ truncate --size 500G sparse_disk1.img
$ ls -la sparse_disk1.img
-rw-rw-r-- 1 vagrant vagrant 536870912000 Nov 11 06:20 sparse_disk1.img
# Check if there is a loop0 already...
$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address
# Ok good lets setup the loop device with the sparse disk image
$ sudo losetup /dev/loop0 /var/tmp/sparse_disk1.img
# Make a file system on that loop device
$ sudo mkfs.xfs -i size=1024 /dev/loop0
meta-data=/dev/loop0 isize=1024 agcount=4, agsize=32768000 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=131072000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=64000, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# And mount it
$ sudo mkdir /mnt/sparse_disk1
$ sudo mount -o noatime,nodiratime,nobarrier /dev/loop0 /mnt/sparse_disk1
$ df -h /dev/loop0
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 500G 33M 500G 1% /mnt/sparse_disk1
To unmount/remove…just go in reverse. :)
$ sudo umount /mnt/sparse_disk1
$ sudo losetup -d /dev/loop0
$ rm -f /var/tmp/sparse_disk1.img
If you haven’t used Vagrant and configuration management systems such as Chef, Puppet, Ansible, Salt, etc, I highly suggest it. Putting up and tearing down servers and clusters of servers gets addicting.