Creating a Dynamically Expanding 'virtual disk'

Because of ext4 file system performance limitations inode limit and alternatives you might want to create virtual disks for file storage:)

Here’s how you create a 64GiB raw image disk.img that initially takes up almost no space:

truncate -s 64G andrei_disk.img

#dd if=/dev/null bs=1 seek=1024000000000 of=testdummy

mkfs -t ext4 andrei_disk.img
e2label andrei_disk.img AmazingAndrei
udisksctl loop-setup --file andrei_disk.img
udiskctl mount -b $(findfs LABEL=AmazingAndrei)

Truncate creates the file. Then make a filesystem, assign it a label. udisksctl loop-setup assigns a loop device Normally on a GUI linux it should be automatically mounted, however in case it doesn’t happen or you’re on a server you can use udiskctl mount

This approach is amazing because since kernels 3.1 you can have near unlimited loop devices as needed [1]

Alternative using losetup

` losetup --partscan --find --show disk.img `

 udisksctl loop-setup -f andrei_disk.img
# Returning /dev/loop
mkfs.ext4 /dev/loop0
mount -o discard /dev/loop0 /mnt/experiment
du -k testdummy
1063940 testdummy
/tmp# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      938G   77M  890G   1% /mnt

/tmp# cp /boot/initrd.img /mnt /tmp# du -k testdummy 1093732 testdummy


 du -k testdummy
1063944 testdummy
'''

udisksctl mount -b $(findfs LABEL=AmazingAndrei) Error mounting /dev/loop1: GDBus.Error:org.freedesktop.UDisks2.Error.AlreadyMounted: Device /dev/loop1 is already mounted at `/media/lostone/AmazingAndrei'.

As non root using udisks2 and e2tools

sudo apt install udisks2 sudo apt install e2tools

e2ls e2cp e2mkdir e2rm …​ etc mke2fs

Extend Maximum number of loopback devices ====

|Note |No longer needed in kernels 3.1+ because it’s dynamically allocated.. Should be somewhere in the range of 2^20. So one million should be more than enough:) # vi /etc/grub.conf …​ kernel /vmlinuz-2.6.32-131.0.15.el6.x86_64 ro root=/dev/mapper/root rhgb quiet max_loop=64| |-----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |Note |No longer needed in kernels 3.1+ because it’s dynamically allocated.. Should be somewhere in the range of 2^20. So one million should be more than enough:) # vi /etc/grub.conf …​ kernel /vmlinuz-2.6.32-131.0.15.el6.x86_64 ro root=/dev/mapper/root rhgb quiet max_loop=64|

elixir Efuse

mix deps {:userfs, "~> 1.0"} sudo apt install libfuse-dev

[[zkn:91d58df7-35fa-42a3-82ce-ba6f36a02226|You might be interested n backing up with rsync]]

Subscribe to my Newsletter

Receive emails about Linux, Programming, Automation, Life tips & Tricks and information about projects I'm working on