nilfs2 を試してみる
前から興味はあったけど実際運用したことのないnilfs2 をバックアップのバックアップだけど設定してみました.
環境はDebianSqueeze です.
導入
$ sudo apt-get install nilfs2-tools
ディスク初期化
$ sudo mkfs.nilfs2 /dev/vdb1 mkfs.nilfs2 ver 2.0 Start writing file system initial data to the device Blocksize:4096 Device:/dev/vdb1 Device Size:10736328704 File system initialization succeeded !!
マウント
$ sudo mount -t nilfs2 /dev/vdb1 /export/ mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time. mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.
怖いメッセージが出ますね
恒久的なマウントの為にUUID 確認
$ sudo blkid /dev/vdb $ ls -l /dev/disk/by-uuid/ 合計 0 lrwxrwxrwx 1 root root 10 2011-06-16 03:26 a4ad2750-5207-4d1a-abdd-9680b5469780 -> ../../vda1
UUID が見当たらない….
未だサポートが行き届いていない状態のよう.普通に/dev/hoge なデバイス名で設定する.
/etc/fstab に以下を追記.
/dev/vdb1 /export nilfs2 noauto 0 0
念のため再起動して動作確認.
$ mount|grep /dev/vdb1 /dev/vdb1 on /export type nilfs2 (rw,gcpid=654)
チェックポイントの確認
$ lscp CNO DATE TIME MODE FLG NBLKINC ICNT 1 2011-06-10 01:52:47 cp - 11 3 2 2011-06-10 01:54:41 cp - 11 4 3 2011-06-10 02:00:11 cp - 1324 143 4 2011-06-10 02:00:17 cp - 4674 184
自動的にcp が作られている.
スナップショットを作成する
$ sudo mkcp -s
した後にlscp してみると,実行時のss が出来ている.
$ lscp|grep ss 42 2011-06-10 02:02:59 ss - 2878 816
cp はGC が自動的に削除します.削除タイミングは/etc/nilfs_cleanerd.conf のprotection_period の秒数の間は保護されます.
ss はGC では削除されません.
さて,スナップショットからの復元も試してみます.
まずはテストファイルを作成してスナップショットの作成.
$ mkdir test $ echo test > test/testdata $ cat test/testdata test $ sudo mkcp -s $ lscp | tail -2 9519 2011-06-17 00:59:57 ss - 25 585668 9520 2011-06-17 01:00:23 cp i 20 585668
削除してスナップショットをマウントして復元してみます.
$ rm test/testdata $ sudo mkdir /media/nilfs-ss $ sudo mount -t nilfs2 -o ro,cp=9519 /dev/sdc1 /media/nilfs-ss $ ls -l /media/nilfs-ss/test/testdata -rw-r--r-- 1 mk mk 5 2011-06-17 00:59 /media/nilfs-ss/test/testdata $ cat /media/nilfs-ss/test/testdata test $ cp -p /media/nilfs-ss/test/testdata test/ $ cat test/testdata test $ sudo umount /media/nilfs-ss
うまく行きました!
スナップショットは自動的に消えないので,ある程度のところで削除しないとディスクがいっぱいになってしまうので,古いものを削除してみます.
スナップショットの確認,
$ lscp|grep ss 42 2011-06-10 02:02:59 ss - 2878 816 9519 2011-06-17 00:59:57 ss - 25 585668 $ sudo rmcp 42 rmcp: 42: cannot remove snapshot To delete snapshot(s), change them into checkpoints with chcp command before removal.
スナップショットのままでは削除できないようです.一旦cp に変更して削除してみます.
$ sudo chcp cp 42 $ lscp |grep ss 9519 2011-06-17 00:59:57 ss - 25 585668 $ lscp |grep '42 2011-06-10 02:02:59' 42 2011-06-10 02:02:59 cp - 2878 816
cp になりました.頬っておいてもGC されると思いますが明示的に削除してみます.
$ sudo rmcp 42 $ lscp |grep '42 2011-06-10 02:02:59'
消えたようです.
最古のss をcp にするのは以下のような感じで行けそうな気がします.
# lscp | grep ss | head -1 | awk '{print $1}' | xargs chcp cp
先ずは,1日一回crontab でmkcp -s してみようと思います.
消すのは1月後くらいでいいかな…
追記)
そうそう,リサイズも来た様なのでこれも試してみたいとこです.
[PATCH 0/4] nilfs2 resize support -- Linux NILFS Development
http://www.spinics.net/lists/linux-nilfs/msg00869.html
NILFS|技
http://www.waza.jp/nilfs/
NILFS - Continuous Snapshotting Filesystem for Linux
http://www.nilfs.org/ja/index.html
[NILFS] What is NILFS?
http://www.nilfs.org/ja/about_nilfs.html
第 70 回 東京エリア Debian 勉強会 2010 年 11 月 -特集 : 俺のファイルシステムは熱いぜ!-
http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume201011.pdf