阿部です。 fsck が Segmentation fault を起こしてしまい、 通常の手順でファイルシステムの復旧ができなくなりました。 このときの対処方法を備忘録として提供します。
現象としては、 # fsck -t ufs /dev/da2s1f ** /dev/da2s1f CANNOT READ BLK: 137744992 CONTINUE? [yn] y fsck: /dev/da2s1f: Segmentation fault: 11 # となり、通常の手動による fsck では復旧できません。 そこで、/usr/ports で % make search key="recover" を実行して、使えそうなツールを検索しました。 # 該当のファイルシステムは、システム領域ではないので # FreeBSD 自体は起動するので調査作業は可能です。 結果、/usr/ports/sysutils/ffs2recov を見つけました。 pkg-descr を読む限り、使えそうだったので早速インストールして実行。 % ffs2recov -s /dev/da2s1f superblock: 65536(byte), 128(block) superblock: 81920(byte), 160(block), cg: 98304(byte), 192(block), 0(nth), fs begin: 0(block), primary sb at: 128(block) readin: bread failed (blk 18446743884730992096 len 4096) : Input/output error superblock: 6160384(byte), 12032(block) % ffs2recov の結果を見ると、fsck が Segmentation fault を起こすのは、 blk 18446743884730992096 というおかしな値が設定されているからだと推測できます。 そこで、alternate superblock を利用して fsck を実行すると 復旧できるかなと思い、次のコマンドを実行しました。 # fsck_ufs -b 160 /dev/da2s1f Alternate super block location: 160 ** /dev/da2s1f ** Last Mounted on ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups SUMMARY BLK COUNT(S) WRONG IN SUPERBLK SALVAGE? [yn] y 17034 files, 16174610 used, 17215823 free (2551 frags, 2151659 blocks, 0.0% fragmentation) UPDATE STANDARD SUPERBLOCK? [yn] y ***** FILE SYSTEM WAS MODIFIED ***** どうやら無事、ファイルシステムを復旧できました。 # alternate superblock を使った復旧は、 # alternate superblock の値を知らないとできないんですね。 # newfs 実行時に表示されるのですが、メモしてなかったので…。 念のため、もう一度、fsck を -p 付きで実行。 # fsck -p /dev/da2s1f /dev/da2s1f: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/da2s1f: clean, 17215823 free (2551 frags, 2151659 blocks, 0.0% fragmentation) 問題なさそうなので、マウントをして内容を確認。 # mount -o ro /dev/da2s1f /mnt なお、disklabel の復旧には、/usr/ports/sysutils/scan_ffs が使えそうでした。 以上、fsck が使えない場合の復旧方法の一例でした。 めったに遭遇しないと思いますが、参考までに。 # ちなみに、googleearth でドラッグして動かしていたらフリーズしたのでした。 ではでは。 -- 阿部康一/Kouichi ABE (WALL) [メールアドレス保護] http://www.MysticWALL.COM/ 4196 185C B814 8F96 D170 B492 71A8 1B2B B9D5 5CF5