佐藤です。

Shigeki Yoshida <sh...@iamas.ac.jp> wrote
  in <CAOL1=qjgn_dfv9k6gsnhnxhnjar92d9zpy8jbmwx5nxpkpb...@mail.gmail.com>:

sh> 最近 12.4 から 13.2 にアップグレードしたのですが、2, 3 台目の HDD がマウントできなくなりました。
sh>
sh> root@shige1:/etc # mount /dev/ada1s1e /mnt
sh> mount: /dev/ada1s1e: Invalid fstype: Invalid argument
sh>
sh> この時 messages には以下のようなメッセージが10回くらい繰り返し書かれています。
sh>
sh> Feb 26 17:38:56 shige1 kernel: UFS1 superblock failed: fs->fs_old_cpg (89)
sh> != 1
sh> (1)
sh> Feb 26 17:38:56 shige1 kernel: UFS1 superblock failed: fs->fs_old_spc
sh> (4096) !=
sh> fs->fs_fpg * fs->fs_old_nspf (364544)
sh> Feb 26 17:38:56 shige1 kernel: UFS1 superblock failed: fs->fs_old_ncyl
sh> (38159) !
sh> = fs->fs_ncg (429)

上記のメッセージは、UFS のスーパーブロックに書かれている情報に
矛盾があることを示しています。13.2 以降では情報のチェックが厳しくなったため、
今までマウントできていたものがマウントできなくなることがあります。

表示されている fs_old_cpg や fs_old_spc 等でマウントできなくなる症状は、
次の PR でも報告されています。

 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264450#c21

FreeBSD の古いリリース(9 以前)で作成された UFS1 の一部に、
矛盾したパラメータが設定されているケースがあることが分かっています。

しかし、これらのパラメータは実際にはほぼ使われておらず、矛盾した値であっても
マウントして読み書きする使い方で支障が生じることはありません。
PR にも経過が書かれていますが、値を厳密にチェックしても害のほうが大きいため、
15-CURRENT では 2/20 でチェックを緩和する変更が入りました。
今後の 13, 14 系にも、同じ変更が入ります。

ファイルシステムパラメータの値の矛盾を修正すれば良いのですが、
手動で直接バイナリデータを変更するくらいしか手段がありません。
fsck 等のツールでパラメータを自動修正することはできませんし、
カーネルが行なっているエラーチェックを回避する方法も、残念ながら用意されていません。
13, 14 系にチェック緩和の変更が反映されても、現状で厳しいチェックを
行なっている 13.2R 等は、この問題に対応する Errata Notice が出るまで使えないままです。

パラメータに矛盾があるファイルシステムになってしまっていることは
確かですから、面倒でも新しくファイルシステムを作成し、
dump + restore 等で中身を移すのが将来的にも安心かと思います。

-- Hiroki

Attachment: pgp9BaLCA6VLs.pgp
Description: PGP signature

Reply via email to