・NILFS
たまたま授業用にファイルシステム回りの話を整理していたら,スラドで NTT が開発した NILFS という新しいファイルシステムの話が.
New Implementation of Log structured File System の略で,その名の通り, 概念的には昔からあったけどパフォーマンス的に問題があって使われなかった Log structured File System を Linux 用に改めて実装してみたそうな.
確かにジャーナリング FS の話を調べるとログ FS な話題も出てきて,常にス ナップショットを取っているようなものだから耐障害性が高いという特徴はあ るものの,HDD のフラグメンテーションが必至という問題点があって実用性は 低い,というのはよく耳にするのだけど,NILFS はそのあたり改善しているの かしらん?
HDD がすごく安くなって,そろそろ個人の PC でも TB が見えてきたことを考 えると,従来のようなパーティションやファイルシステムに縛られる時代でも 無さげだし,NAS みたいな環境でログ FS をやってみるのも面白いかも知れな いと思ってさっそくダウンロードして試してみたら,手元の 2.6.12.5 な環境だと
mnt/Srcs/nilfs/fs/segment.c:2459: 警告: 関数 `freezing' の暗黙の宣言 /mnt/Srcs/nilfs/fs/segment.c:2462: error: 関数 `refrigerator' への引数が少なすぎます
なんてエラーが..確かに「2.6.13 用」と明記してあるものの,このヘンも 変っているのかなぁ,,とソースコードを grep したら確かに refrigerator の取る引数は 2.6.12.5 と 2.6.13.2 で変っていた..
kojima@xeon[/mnt/Srcs/nilfs]% grep refrigerator /usr/src/linux/include/linux/* /usr/src/linux/include/linux/sched.h: * Checks whether we need to enter the refrigerator /usr/src/linux/include/linux/sched.h:extern void refrigerator(unsigned long); /usr/src/linux/include/linux/sched.h:static inline int try_to_freeze(unsigned long refrigerator_flags) /usr/src/linux/include/linux/sched.h: refrigerator(refrigerator_flags); /usr/src/linux/include/linux/sched.h:static inline void refrigerator(unsigned long flag) {} /usr/src/linux/include/linux/sched.h:static inline int try_to_freeze(unsigned long refrigerator_flags)
kojima@xeon[/mnt/Srcs/nilfs]% grep refrigerator /usr/src/linux-2.6.13/include/linux/* /usr/src/linux-2.6.13/include/linux/sched.h:extern void refrigerator(void); /usr/src/linux-2.6.13/include/linux/sched.h: refrigerator(); /usr/src/linux-2.6.13/include/linux/sched.h:static inline void refrigerator(void) {}
このレベルをコロコロ変えるのも Linux らしいと言えばその通りだけど,こ の手のカーネルの機能に密接に関連したソフトウェアを開発する人間には困ったもの なんだろうなぁ..