In a previous posting I started with BtrFS and as mentioned BtrFS supports snapshotting. With this you can create a point in time copy of a subvolume and even create a clone that can be used as a new working subvolume. To start we first need the BtrFS volume which can and must always be identified as subvolid 0. This as the default volume to be mounted can be altered to a subvolume instead of the real root of a BtrFS volume. We start with updating /etc/fstab so we can mount the BtrFS volume.
LABEL=datavol /home btrfs defaults,subvol=home 0 0 LABEL=datavol /media/btrfs-datavol btrfs defaults,noauto,subvolid=0 0 0
As /media is a temporary file system, meaning it is being recreated with every reboot, we need to create a mountpoint for the BtrFS volume before mounting. After that we create two read-only snapshots with a small delay in between. As there is currently no naming guide for how to call snapshots, I adopted the ZFS naming schema with the @-sign as separator between the subvolume name and timestamp.
$ sudo mkdir -m 0755 /media/btrfs-datavol $ sudo mount /media/btrfs-datavol $ cd /media/btrfs-datavol $ sudo btrfs subvolume snapshot -r home home\@`date "+%Y%M%d-%H%m%S-%Z"` Create a readonly snapshot of 'home' in './home@20124721-080109-CET ... $ sudo btrfs subvolume snapshot -r home home\@`date "+%Y%M%d-%H%m%S-%Z"` Create a readonly snapshot of 'home' in './home@20124721-080131-CET' $ ls -l total 0 drwxr-xr-x 1 root root 52 nov 21 2010 home drwxr-xr-x 1 root root 52 nov 21 2010 home@20124721-080109-CET drwxr-xr-x 1 root root 52 nov 21 2010 home@20124721-080131-CET
We now have two read-only snapshots and lets test to see if they are real read-only subvolumes. The creation a new file shouldn’t be possible.
$ sudo touch home@20124721-080109-CET/test.txt touch: cannot touch `home@20124721-080109-CET/test.txt': Read-only file system
Creating snapshots is fun and handy for migrations or as on disk backup solution, but they do consume space as the delta’s between snapshots is being kept on disk. Meaning that changes between the snapshots are being keept on disk even when you remove them. Freeing diskspace will not only be removing them from the current snapshot, but also removing previous snapshots that include the removed data.
$ sudo btrfs subvolume delete home@20124721-080109-CET Delete subvolume '/media/btrfs-datavol/home@20124721-080109-CET' $ ls -l total 0 drwxr-xr-x 1 root root 52 nov 21 2010 home drwxr-xr-x 1 root root 52 nov 21 2010 home@20124721-080131-CET
As last step we unmount the BtrFS volume again. This is where ZFS and BtrFS differ too much for my taste. To create and access snapshots on ZFS the zpool doesn’t needs to be mounted, but then again with the first few release of ZFS the zpool needed to mounted as well. So there is still hope as BtrFS is still under development.
$ sudo umount /media/btrfs-datavol
Seeing what is possible with BtrFS, Sun’s TimeSlider becomes an option. Also the option of Live Upgrades with rollbacks as is possible with Solaris 11, but for that BtrFS with read-write snapshots needs to be tested in the near future.