Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI and Linux Enthusiast.

Playing with Filesystems using Virtual Disks

Published on

Updated on

2 minute reading time

Warning: This post has not been modified for over 2 years. For technical posts, make sure that it is still relevant.

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 occurred. 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


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

Reply via Email Buy me a Coffee
Was this useful? Feel free to share: Hacker News Reddit Twitter

Published a response to this? :