連続スナップショットとはなんですか?
ファイルシステムのある瞬間の状態を連続的かつ自動的に保存する機能です. まちがえてファイルを消してしまったり, 上書きしてしまったときも, 過去のファイルシステムの状態が保存されているので, そこから過去のファイルを取り出すことができるます. NILFS は通常のファイル操作の性能に影響を与えずに, 事実上無限個のスナップショットを保持することができます.
diff コマンドで, 読み込み専用でマウントしたスナップショットのファイルと現在のファイルを比較したのですが, あるはずの差分が報告されません.
diff コマンドは, 2つのファイル (またはディレクトリ) の所属するブロックデバイスとその inode 番号が一致すると, 実体が同じだとみなして, ファイルの中身を比較しない最適化がなされます.
NILFS で diff コマンドを提供する, といった対策が考えられますが, 解決にはしばらくの時間が必要です.cp コマンドも, スナップショット上のファイルと現在のファイルを同一ファイルとみなして, 過去のファイルを現在のファイルに上書きコピーさせてくれません. まず, 別の名前で現在のファイルシステムにコピーし, 目的の名前に mv してください.
SuSE Linux 10.0 (Kernel: 2.6.13-15-default) の NILFS のディスクで iozone を走らせたら, Segmentation fault でプログラムが止まってしまいました.
/var/log/messages ファイルに, "kernel BUG at fs/inode.c:252! ..." といったメッセージがありませんか?
SuSE Linux 10.0 の付属のカーネルは, バージョン 2.6.13 と名乗っていますが, 本家の 2.6.14 のファイルシステム部分の変更点を先取りして取り込んでいます.
NILFS は本家 vanilla カーネルで使用することをお勧めしますが, もし SuSE 10 のカーネルで使用したいなら, 次のパッチを試してみてください.diff -u fs/kern_feature.h.save fs/kern_feature.h --- fs/kern_feature.h.save +++ fs/kern_feature.h @@ -31,6 +31,9 @@ * Please define as 0/1 here if you want to override */ +/* for SuSE 10.0 2.6.13-15-default kernel */ +#define NEED_TRUNCATE_INODE_PAGES 1 + /* * defaults dependent to kernel versions */
FedoraCore 4 (Kernel: 2.6.11-1.1369_FC4smp) で NILFS を使うと, システムがハングします.
これも, 上とほぼ同じ原因です. FC4 の付属カーネルがより新しいカーネルの変更点を先取りしています. 次のパッチを試してみてください.
diff -u fs/kern_feature.h.save fs/kern_feature.h --- fs/kern_feature.h.save +++ fs/kern_feature.h @@ -33,7 +33,7 @@ /* * Please define as 0/1 here if you want to override */ +/* for FedoraCore 4 2.6.11-1.1369_FC4smp kernel */ +#define NEED_RWLOCK_FOR_PAGECACHE_LOCK 1 /* * defaults dependent to kernel versions */
Red Hat Enterprise Linux / CentOS 5.0 (Kernel: 2.6.18-8.el5) で NILFS がコンパイルできません.
これも, 上とほぼ同じ原因です. Red Hat Enterprise Linux 5.0 の付属カーネルがより新しいカーネルの変更点を先取りしています. 次のパッチを試してみてください.
diff -u fs/kern_feature.h.save fs/kern_feature.h --- fs/kern_feature.h.save 2007-07-24 09:33:11.000000000 +0900 +++ fs/kern_feature.h 2007-08-28 15:32:40.000000000 +0900 @@ -33,6 +33,13 @@ /* * Please define as 0/1 here if you want to override */ +#define PageChecked PageFsMisc +#define SetPageChecked SetPageFsMisc +#define ClearPageChecked ClearPageFsMisc +#define NEED_MOUNT_SEMAPHORE 1 +#define NEED_INODE_GENERIC_IP 0 +#define NEED_INODE_BLKSIZE 0 +#define HAVE_PAGE_MKWRITE 1 /* * defaults dependent to kernel versions
質問お待ちしています!
