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 が見当たらない….

Nilfs users (Log-Structured Snapshotting Filesystem)

未だサポートが行き届いていない状態のよう.普通に/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