たかつです。

鏡さん:
> badsect コマンドで該当セクターをファイル化した後、fsck を実行すれば
> 特定可能です。おおざっぱな手順は
>   http://evariste.jp/kagami/diary/0000/200407.html#20040718-1

なるほど。そのものずばりのコマンドですね。
・badsect で、指定したセクタ番号を使用するファイルを無理矢理作る
・fsck は、異なるファイルが同じセクタを使用していることを検出する
という流れで、バッドセクタだけを含むファイルの作成もできるし、エラー
セクタを含むファイルがどれなのかわかると。

問題は、シングルユーザで立ち上げ直さないといけないことでしょうか。単に
「エラーの発生するファイルがどれなのか知りたい」だけの場合は、ちょっと
手間がかかりすぎます。

今は問題の環境が手元に無く、シングルユーザモードに落とすことが出来ない
ので、あとで試してみたいと思います。



仲村さん:
>  以前、[FreeBSD-users-jp 84800]で、鈴木さんが
> 「『tar cf /dev/null ディレクトリ』で、読めないファイル名が表示されます」
> って事を言われてました。

以前にも同じ質問をされた方がいたのですね。ここの過去記事を検索はしたの
ですが見落としてました。

「tar を使えばわかる」というのは目から鱗です。ていうか、「ファイルを全部
読めばわかる」という所までは考えたのですが、

% find ほげほげ -type f -print0 | xargs -0 -I % dd if=% of=/dev/null bs=1024k

といった回りくどい方法しか思いつきませんでした。しかも、この方法だと
通常のコマンド実行結果も標準エラー出力に出るので、どこで問題が出てるのか
すごく分かりにくいんですよね…

で、ちょっと試してみたのですが、

% tar cf /dev/null ほげほげ
もしくは
% tar cf - ほげほげ > /dev/null 

とやっても、一瞬でコマンドが終了します。エラーの出るファイルを指定したのですが
何も報告されません。

% tar cf - ほげほげ | tar tvf -
% tar cf - ほげほげ | cat > /dev/null

ならいけました。出力が /dev/null だと、何か特別なことをやってるのでしょうか?
とりあえずこれでパーティション全体をスキャンさせてみたいと思います。



えぐち@エスアンドイーさん:
> ストレートな答えではありませんが、とりあえず
>  ports/sysutils/ufs_copy
> を使ってダンプしておいてはどうでしょうか?

これは、dd と同じように file system まるごとのイメージを出力するけど
ufs として未使用な部分は飛ばした sparse なファイルにしてくれるんですね。

ちょっと今回の目的とは違いますが、これはこれで面白そうです。問題は、今の
環境では、disk image を丸ごと書き込むだけの空いたディスクが無いってこと
ですね。普段のバックアップはネットワーク越しに rsync してるだけなので…

> それから、これ以上書き込みをしないようにするのは言うまでもありません。

それが正論なのは確かですが、「書き込みをしない」=「システムを停止させる」
なので、それはやってません。システムは稼働させっぱなしです。ここ数日の
様子を見たかぎりでは、エラーが増える様子は無いので、とりあえず問題の
セクタだけ使わないようにしておけば、お茶を濁せるかと思ってます。



で、そんなことを書いているうちに、 tar の結果が出ました。

tar: /usr/local/squid/cache/05/42: Cannot stat: Input/output error

squid のキャッシュディレクトリです。まあ、重要じゃない所だったので一安心。



PROJECT TEAM DoGA 高津正道                            [EMAIL PROTECTED]
                                                   [EMAIL PROTECTED]
                     PROJECT TEAM DoGAのホームページ → http://doga.jp/
6月5日(月) 今日のマーフィーの法則     [ナガスの両替の公理]
海外旅行に行くと、外国通貨に交換した翌日に、その外国通貨の価値が下がる。

メールによる返信