btrfsでsnapshot作成

btrfsはまだtechnical preview だけど、lvmのsnapshotを使うとI/Oが遅いので代替案としてやってみた。

OS: CentOS 6.3 64bit

# yum install -y btrfs-progs
# mkfs.btrfs /dev/mapper/vg_hoge-lv_home

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on /dev/mapper/vg_svxxx-lv_data
      nodesize 4096 leafsize 4096 sectorsize 4096 size 300.00GB
Btrfs Btrfs v0.19

# mkfs.btrfs /dev/mapper/vg_hoge-lv_home
# mount /dev/mapper/vg_hoge-lv_home /home
# btrfs subvolume create /home/active
# touch /home/active/{1..5}
# ls /home/active
1  2  3  4  5
# btrfs subvolume create /home/.snapshot
# btrfs subvolume list /home
ID 258 top level 5 path active
ID 259 top level 5 path .snapshot
# btrfs subvolume snapshot /home/active /home/.snapshot/20120712
# ls /home/.snapshot/20120712/
1  2  3  4  5
# btrfs subvolume list /home
ID 258 top level 5 path active
ID 259 top level 5 path snapshot
ID 263 top level 5 path snapshot/20120712

追記

作ったsnapshot以下のファイルに変更を加えたあと、そのsnapshotを削除するとOSがハングアップする??しかも削除したはずのsnapshotのvolumeが再起動後にはなぜか復活している。*1 *2

# btrfs subvolume list /data
ID 257 top level 5 path active
ID 258 top level 5 path .snapshot
ID 259 top level 5 path .snapshot/snap1
ID 260 top level 5 path .snapshot/snap2
ID 261 top level 5 path .snapshot/snap3
# rm -f /data/.snapshot/snap3/*

# btrfs subvolume delete /data/.snapshot/snap3
Delete subvolume '/data/.snapshot/snap3'
# btrfs subvolume list /data
ID 257 top level 5 path active
ID 258 top level 5 path .snapshot
ID 259 top level 5 path .snapshot/snap1
ID 260 top level 5 path .snapshot/snap2
#### ここでハングアップ

#### 再起動後にもう一度list実行
# btrfs subvolume list /data
ID 257 top level 5 path active
ID 259 top level 5 path .snapshot/snap1
ID 260 top level 5 path .snapshot/snap2
ID 261 top level 5 path .snapshot/snap3
#### snap3 が復活している

*1:snapshotのファイルを消すなんて普通はしないけど、オペミスの絡みとかもあるのでやってみた

*2:ちなみにlvmもsnapshot中のファイルに変更かけれるはず