Running out of disk space
Well, my good ‘friend’ with their inappropriately provisioned Linux VPS that runs UML (User Mode Linux) inside of it, ran into an issue where he needed to add a second virtual disk device.
Creating the disk file is no big issue, adding a whopping 1GB is pretty simple!
Using the ‘dd’ command it is trivial to make a 1GB file like this:
dd if=/dev/zero of=node1_swap.ubda bs=1M count=1024
And then just append it to the script that they are using to run the UML:
/virtual/kernel ubda=/virtual/node1.ubda mem=384M eth0=slirp,,/virtual/sl1.sh
to this:
/virtual/kernel ubda=/virtual/node1.ubda ubdb=/virtual/node1_swap.ubda mem=384M eth0=slirp,,/virtual/sl1.sh
Of course the real fun comes from trying to find the devices. Having to dig around I found that the device major is 98 for the UBD’s and that they increment by 16, so that the first 3 devices are as follows:
mknod /dev/ubda b 98 0 mknod /dev/ubdb b 98 16 mknod /dev/ubdc b 98 32
Adding to that, you can partition them, and then they break out like this:
mknod /dev/ubda1 b 98 1 mknod /dev/ubda2 b 98 2 mknod /dev/ubda3 b 98 3 mknod /dev/ubdb1 b 98 17 mknod /dev/ubdb2 b 98 18
You get the idea.
With the disk added you can partition the ubd like a normal disk
node1:~# fdisk /dev/ubdb Command (m for help): p Disk /dev/ubdb: 1073 MB, 1073741824 bytes 128 heads, 32 sectors/track, 512 cylinders Units = cylinders of 4096 * 512 = 2097152 bytes Device Boot Start End Blocks Id System /dev/ubdb1 1 245 501744 83 Linux /dev/ubdb2 246 512 546816 82 Linux swap / Solaris
etc etc. And yes, you can then format, mount and all that.
First let’s setup the swap:
mkswap /dev/ubdb2 swapon /dev/ubdb2
Now let’s format the additional /tmp partition
node1:~# mke2fs /dev/ubdb1 mke2fs 1.40-WIP (14-Nov-2006) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 125488 inodes, 501744 blocks 25087 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 62 block groups 8192 blocks per group, 8192 fragments per group 2024 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 24 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Now adding the following to the /etc/fstab so it’ll automatically mount the /tmp directory and add the swap:
/dev/ubdb1 /tmp ext2 defaults 0 0 /dev/ubdb2 none swap defaults 0 0
Now he’s got a dedicated swap partition, and a separate /tmp filesystem.