>>E2fsprogs 1.33 (April 21, 2003) >> >> Mke2fs no longer creates filesystems with the dir_index flag set by >> default; the user has to specifically request it. > > > デフォルトで dir_index を作らないようにしたのは、幾つかの問題点が有る > からと見るのはうがった見方でしょうか? [vine-users:063817] で紹介されているスレッドにあったと思いますが, 「仕様上は問題ないはずで,ちょっとしたテストでは問題なかったので default on にしてみたら問題が発生してしまった」という感じでは ないかと思います. > 私が Htree やファイルシステムに関して詳しくない上、この問題に遭遇して > から色々見てきた感じだけで申し上げるので大変恐縮ですが、そもそも Htree > は、単に e2fsprogs だけではなく kernel や mount cp mv mkdir 等、様々な > ものを巻き込んでの技術なのだろうと判断しております。 私は htree については全然調べていませんが,単にファイルシステムと e2fsprogs の問題なのだろうと感じています. > 例えば、/usr/doc/kernel-doc-2.4.22/filesystems/ext2.txt 内の > > Hashed Directories http://kernelnewbies.org/~phillips/htree/ > > より、そのサイト内の READ-ME を見ると、 > > To create an indexed directory: > > mount /dev/hdxxx /test -o index > mkdir /test/foo > > とあったりします。これを vine 2.6r3 上で行った時、どのような結果になる > かの検証も必要に感じます。(壊すの覚悟でやってみようか迷い中です) kernel が対応していれば index というオプション付で,という話で, 今の問題とは違うのではないでしょうか. # cat /etc/vine-release Vine Linux 2.6r3 (La Fleur de Bouard) # uname -a Linux *****.**.***.**.** 2.4.20-0vl29.1 #1 Sat Apr 12 03:35:55 EDT 2003 i686 unknown # mount -o index /dev/hda3 /mnt/ mount: 間違ったファイルシステムタイプ、不正なオプション、 /dev/hda3 のスーパーブロックが不正、或いはファイルシステムのマウント が多すぎます # ちょっと前の kernel ですが,index には対応してないようです. # kernel が対応していないと,index は単に使われないだけで,害は無い # はずだったのに,出てしまったということでしょう. ## cp, mv, mkdir が直接ファイルシステムをさわることは無いでしょう. ## 全部 kernel 経由だと思っています. >>dir_index ありでも大丈夫な e2fsck にしてもらうのが一番でしょう. > > > はい、それが一番良いですね。ただ色々と大変な事だろうと思いますので、 たとえば e2fsprogs を最新版にして直るとして,他の問題が無ければ それにしてしまうのは簡単だと思いますが... 1.29 のまま bug fix を backport だとちょっと面倒かもしれません. # 「新たに問題が発生しないことの確認」と「backport」のどちらが面倒 # でしょうか. >>workaround として,dir_index ありなら tune2fs -O ^dir_index を促すように >>する(fsck は実行しない)だけでもかなり違うと思います. > > > これが、一番簡単で確実な方法と認識しております。 こっちは,ソース改変が必要でしょう. 500M ぐらいのパーティションを作って試してみましたが,壊れるという事態 にはなりませんでした. mke2fs -j /dev/hda3 で作成して,mount してディレクトリとファイルをいくつ か作り,unmount して e2fsck しました. # e2fsck -f /dev/hda3 e2fsck 1.29 (24-Sep-2002) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 3A: Optimizing directories Optimizing directories: 12241 Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/hda3: ***** FILE SYSTEM WAS MODIFIED ***** /dev/hda3: 163/130560 files (0.6% non-contiguous), 32064/522112 blocks # # e2fsck -f -D /dev/hda3 e2fsck 1.29 (24-Sep-2002) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 3A: Optimizing directories Optimizing directories: 2 4081 8161 12241 16321 20401 22441 Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/hda3: ***** FILE SYSTEM WAS MODIFIED ***** /dev/hda3: 252/130560 files (1.6% non-contiguous), 45197/522112 blocks # ***** FILE SYSTEM WAS MODIFIED ***** は出ますが,別にファイルは失われていません. e2fsck -f -D /dev/hda3 を2回続けると,2回とも MODIFIED になりました. これはたしかにちょっと納得しにくいですが,そういうものなのかも しれません. mount したまま e2fsck すると,read only の時も e2fsck 1.29 (24-Sep-2002) /dev/hda3 is mounted. WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage. Do you really want to continue (y/n)? こういうメッセージが出ますが,(read only であれば) y と答えてもファイルは壊れてないようです. # ファイルの数が少ないと大丈夫なのかな?