Midas hat Hasenohren!

Even though I like ZFS, I am using Linux which has not yet good ZFS-Support, and LUKS. Using LUKS with an encrypted swap I want to be able to use for suspending, still the easiest possibility to achieve this is using an LVM [yes, this sentence is gramatically correct ...].

However, so far I only used this on one partition, which is already very flexible. Today I tried to use LVM on three USB-Sticks that I found occasionally. As they have different sizes, there is no point in creating a Raid, so I just used them directly.

So, I have three USB-Sticks, of different size, /dev/sdb, /dev/sdc, /dev/sdd. Firstly, I create the physical volumes on them:

root@thinkpad:/# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created
root@thinkpad:/# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created
root@thinkpad:/# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created


Then I create the volume group:

root@thinkpad:/# vgcreate vgusb1 /dev/sdb /dev/sdc /dev/sdd
  Volume group "vgusb1" successfully created


(Actually, a lot of rw-errors are emitted, but they are pointless, and I left them out, and I will leave them out in the further commands.)

Then I create a logical volume, with 40% of the size of the whole volume group:

# lvcreate -l 40%FREE -n test vgusb1
  Logical volume "test" created


Let us make an ext4 filesystem on it:

root@thinkpad:/# mkfs.ext4 /dev/vgusb1/test
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
64512 inodes, 258048 blocks
12902 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=264241152
8 block groups
32768 blocks per group, 32768 fragments per group
8064 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376

Writing inode tables: done                           
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

root@thinkpad:/# mount /dev/vgusb1/test /mnt

So, now I have the filesystem. Lets create a file with random content:

# dd if=/dev/urandom of=/mnt/rand bs=4K

Let us check the md5sum quickly

root@thinkpad:/# md5sum /mnt/rand
251e865156f990e10711f5ac3e10d0bd  /mnt/rand


Verilyyyyyyyyyyy... So now we will create a snapshot and assure ourselves that it has the same content:

root@thinkpad:/# lvcreate --snapshot /dev/vgusb1/test -n snap -l 40%VG
  Logical volume "snap" created
root@thinkpad:/# mount /dev/vgusb1/snap /mnt2/
root@thinkpad:/# md5sum /mnt2/rand
251e865156f990e10711f5ac3e10d0bd  /mnt2/rand


Ok. Now we have a snapshot. Let us unmount the original and extend it to the maximum size, and resize the ext4 filesystem.

root@thinkpad:/# umount /mnt
root@thinkpad:/# umount /mnt2
root@thinkpad:/# lvchange -a n /dev/vgusb1/test       
root@thinkpad:/# lvextend -l +100%FREE /dev/vgusb1/test
  Extending logical volume test to 1.48 GiB
  Logical volume test successfully resized
root@thinkpad:/# e2fsck -f /dev/vgusb1/test
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgusb1/test: 12/64512 files (0.0% non-contiguous), 258045/258048 blocks
root@thinkpad:/# resize2fs /dev/vgusb1/test
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vgusb1/test to 387072 (4k) blocks.
The filesystem on /dev/vgusb1/test is now 387072 blocks long.
root@thinkpad:/# mount /dev/vgusb1/test /mnt
root@thinkpad:/# mount /dev/vgusb1/snap /mnt2


And now, let us fill /mnt/rand with new random information

# dd if=/dev/urandom of=/mnt/rand bs=4k

And check the checksums again

root@thinkpad:/# md5sum /mnt2/rand
251e865156f990e10711f5ac3e10d0bd  /mnt2/rand
root@thinkpad:/# md5sum /mnt/rand
55ee3477277947183c60d7190536f5c5  /mnt/rand


Snapshotting apparently worked. Apparently, it still works, when I unplug the sticks and plug them in again in a different order, and they get different devicenames.

LVM is nice.