You have heard of Apple Time Capsule, and zfs's snapshots which provide nice way to produce incremental backups which you can use to quickly recover a rm -Rf typo or compare changes... You can't really use LVM snapshots for that because they have fixed size of snapshot. ZFS has copy-on-write snapshots, but zfs-fuse isn't fastest solution on Linux.
I decided to give btrfs another try. On Debian 2.6.32-trunk kernels, it stills have problems with 686 kernel, but amd64 version (even with 32-bit users-pace) seems to work stable so far.
Let's take a look at example usage on /dev/vg/koha-btrfs logical volume.
- create filesystem
root@mlin:~# mkfs.btrfs /dev/vg/koha-btrfs
- create subvolume which we will use for data
root@mlin:~# btrfsctl -S koha-2010-01-25 /virtual.btrfs/
- populate it with some data
root@mlin:~# time cp -ra /virtual.clone/koha-2010-01-25 /virtual.btrfs/ real 15m32.507s user 0m1.288s sys 0m54.519s
- create base snapshot
root@mlin:~# btrfsctl -s /virtual.btrfs/koha-2010-01-25.mlin /virtual.btrfs/koha-2010-01-25There is convention here: since snapshot directories have to be on same btrfs volume, I decided to use base_name(dot)something as convention for my snapshots.
- make some changes on base directory
root@mlin:~# time rsync -ravH --numeric-ids --sparse --delete --exclude 'backup*' 10.60.0.90:/opl/clone/koha-2010-01-25/ /virtual.btrfs/koha-2010-01-25/ sent 1538957 bytes received 381670534 bytes 964049.03 bytes/sec total size is 18912566086 speedup is 49.35 real 6m37.539s user 0m59.524s sys 1m23.633s
- make another snapshot for this version
root@mlin:~# btrfsctl -s /virtual.btrfs/koha-2010-01-25.opr /virtual.btrfs/koha-2010-01-25
dpavlin@mlin:~$ ls -ald /virtual.btrfs/koha-2010-01-25* drwxr-xr-x 1 root root 256 Dec 29 19:38 /virtual.btrfs/koha-2010-01-25 drwxr-xr-x 1 root root 256 Dec 29 19:38 /virtual.btrfs/koha-2010-01-25.mlin drwxr-xr-x 1 root root 256 Dec 29 19:38 /virtual.btrfs/koha-2010-01-25.oprAfter a while, you will run out of disk space, but since we are on LVM, extending filesystem is really easy:
dpavlin@mlin:~$ mount -t btrfs /dev/mapper/vg-koha--btrfs on /virtual.btrfs type btrfs (rw,noatime) root@mlin:~# lvdisplay /dev/vg/koha-btrfs --- Logical volume --- LV Name /dev/vg/koha-btrfs VG Name vg LV UUID kl4QUc-IyK2-IM8m-0DKD-eI5k-H2T1-HySIwE LV Write Access read/write LV Status available # open 1 LV Size 40.00 GB Current LE 10240 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 root@mlin:~# lvextend -L +10G /dev/vg/koha-btrfs Extending logical volume koha-btrfs to 50.00 GB Logical volume koha-btrfs successfully resized root@mlin:~# btrfsctl -r max /virtual.btrfs/
Hopefully this will help you to get started with btrfs snapshots. I still don't consider it super stable (especially since i did saw few kernel oopses using 2.6.32-trunk-686) but for quick experiments with Linux containers (or anything stored on filesystem for that matter) it proved more than adequate.