# Virtual Disks

## Brandon Rozek

January 6, 2020

Have you wanted to play with ZFS or any other filesystem without creating a dedicated partition or device? We can do this through virtual disks!

First, we need to create a sparse file called scratch.img with some max capacity. Let's say 2G.

truncate -s 2G $HOME/scratch.img  Now the file is only sparse, if your filesystem supports it. To see, run du -sh$HOME/scratch.img. If it says that the size is 0 then your filesystem supports sparse files. Otherwise it does not.

Then, we can format the file with any filesystem we will like. One popular tool is mkfs which depending on your operating system can support bfs, cramfs, ext2, ext3, ext4, fat, minix, msdos, ntfs, vfat, reiserfs, etc.

To format with ext4,

mkfs -t ext4 $HOME/scratch.img  Then we can create the mount-point /mnt/scratch and mount scratch.img to it. sudo mkdir /mnt/scratch sudo mount -t auto -o loop$HOME/scratch.img /mnt/scratch


With this, we now have a mounted ext4 filesystem on /mnt/scratch. cd into it and have a blast!

## Resizing the Virtual Disk

To resize the virtual disk, we will first need to unmount the virtual disk so we don't create inconsistencies.

sudo umount /mnt/scratch


Now we can extend or shrink the drive with truncate.

Extend by 1G: truncate -s +1G $HOME/scratch.img Shrink by 1G: truncate -s -1G$HOME/scratch.img

Check the filesystem to make sure that no inconsistencies occured. With ext(2/3/4) we can do this with the e2fsck command.

e2fsck $HOME/scratch.img  Then we need to tell the filesystem to resize itself. For ext(2/3/4) you can do this with the resize2fs command. resize2fs$HOME/scratch.img


Now the virtual disk is successfully resized! We can mount it back with the previous mount command.

sudo mount -t auto -o loop $HOME/scratch.img /mnt/scratch  ## Removing the Virtual Disk To remove the virtual disk, we first need to unmount the virtual drive sudo umount /mnt/scratch  Then we can remove the mount-point and file. sudo rm -r /mnt/scratch rm$HOME/scratch.img


## Conclusion

With virtual disks we can experiment with different types of filesystems and perhaps try out snapshotting in supported filesystems. If we create virtual disks on tmpfs , then we can have a super fast file system as well!