This article is really just a quick documentation for something that I do almost each year, and each year I must google-search how I did the last time. So from now on I will have it in my own notes …. here!
Mu current problem was that I have VPS system from a small provider hpcloud.com 🙂 , but the base image is divided to 10 GB of system partition and another 20 GB of data partition. And as luck would have it, I needed 25 GB for data. One of the options was to buy more storage, but I have seen that my minimalistic debian hardly used more than 1,7 GB from the 10 GB system space and I wanted to make use of the remaining space.
Additionally, resizing the partition was not an option as this was the provider mandatory separation, so I decided to use a loopback file emulating a hard-drive.
What this means is that I will create a 5 GB file in the system partition, and mount it as a directory in the data partition, creating a directory structure illusion of 25GB system (more advanced users can try using RAID1 and combine the 5GB and 20GB filesystems, but this is out of scope now).
Step 1. First, lets find a free loop<index> device by checking the losetup /dev/loop<index> until we get no response
1 2 |
root@gserver1:/# losetup /dev/loop0 loop: can't get info on device /dev/loop0: No such device or address |
Step 2. Then create the file that is 5GB large (full of zeros)
1 |
root@gserver1:/# dd if=/dev/zero of=/HDloop0 bs=1024 count=5242880 |
Step 3. Then, mal the /dev/loop0 to the new file with losetup
1 |
root@gserver1:/# losetup /dev/loop0 /HDloop0 |
Lets have a look if it was successfull
1 2 |
root@gserver1:/# losetup /dev/loop0 /dev/loop0: [fe01]:10855 (/HDloop0) |
Step 4. Great, now lets create a filesystem there, I still prefer ext2 because this is not used for critical data, so we will save some IO calls by not using journal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@gserver1:/# mkfs.ext2 /dev/loop0 mke2fs 1.42.5 (29-Jul-2012) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done |
Step 5. And last by not least, we can mount it somewhere
1 2 |
root@gserver1:/# mkdir /mnt/test root@gserver1:/# mount -t ext2 /dev/loop0 /mnt/test |
And that is it, to check you have a new filesystem, you can for example check the “df -h” as below
1 2 3 4 5 |
root@gserver1:/mnt# df -h Filesystem Size Used Avail Use% Mounted on rootfs 9.9G 2.2G 7.2G 24% / /dev/vdb 20G 18G 1.4G 93% /mnt /dev/loop0 5.0G 10M 4.7G 1% /mnt/test |
Now I have additional 5 GB inside the main /mnt with 20GB. With RAID tools (mdadm) you should also be able to put together the two and create one 25 GB partition, but that is outiside of today scope.