vine-users ML アーカイブ



[vine-users:063953] Re: 起動時の fsck にてファイル破損及び起動不良

  • From: "F.M." <makoto@xxxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:063953] Re: 起動時の fsck にてファイル破損及び起動不良
  • Date: Thu, 15 Jan 2004 00:31:30 +0900
>>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 と答えてもファイルは壊れてないようです.

# ファイルの数が少ないと大丈夫なのかな?