こんなコマンド使う機会は滅多にないな、今時だと。だいたいHDDの調子が 悪くなったら買っちゃうもんな。
ノートPCのHDDの調子が悪くなって、NetBSDが固まった。こんなログを吐いた。
May 1 02:33:15 jog /netbsd: wd0e: uncorrectable data error reading fsbn 6199888 of 6199888-6199891 (wd0 bn 7031488; cn 7440 tn 10 sn 58), retrying
でたとえば、最初のエラーは 6199888-6199891 のブロックで起きている。 で、このブロックを全部badsect登録すべきなのかな−。不明。だけど、 どうせ隣接しているところは全部だめだろうからこの範囲を全てbadsectに いれよう。その他たくさんのブロックがエラーを吐いているので、こういうとき はzshの力を借りよう。
zsh# echo {6199888..6199891} > /root/bad
などとしてブロック番号を全部 /root/bad ファイルに落としておく。
次、取り敢えずエラーの出たパーティション(今回の場合 /usr)を mountできるように fsck する。で、mountして、トップディレクトリに BADディレクトリを作成する。
# fsck -y /usr # mount /usr # cd /usr # mkdir BAD
続いて badsect を起動。さっき保存した /root/bad をいじって
badsect BAD 6199888 6199889 6199890 6199891
てな感じにする。そして
# sh /root/bad
みたいな感じ。すると、/usr/BAD/ に指定したブロックを含むファイルが わらわらとできる。そしたら、fsckする。
# cd / # umount /usr # fsck /usr
"HOLD BAD BLOCK" という問いには y と答えるのだが、 /BAD/ブロック番号 というファイルを「消すか?」と聞かれたときには y を押してはイカン。それ消したら不良ブロックを含んだファイルが抹消されちゃ うから。
てなわけで不良ブロックを badsect で避けるとそこそこ使えるようになるが、 fsck -y ができなくなるのでやっぱ不便だな。