質問: FATが壊れているメモリカード内のファイル一覧を取得する方法



linuxで FATテーブルの壊れたメモリカードをマウントし、findコマンドでカー
ド内のファイル一覧を取得しようとすると以下のようなエラーをsyslogに吐き
続けてfind が終了しない状況が起きています。

> ...
> FAT: Filesystem panic (dev sdb1)
> fat_get_cluster: invalid cluster chain (i_pos 0)
> attempt to access beyond end of device
> sdb: rw=0, want=3926688, limit=3915072
> ...

/dev/sdb1はCentOS5.3で以下のように自動マウントされています。
/dev/sdb1 on /media/NO NAME type vfat (rw,noexec,nosuid,nodev,shortname=winnt,uid=500)


質問したいのは「FATが壊れているメモリカード内のファイル一覧を取得する
方法」についてです。FAT修復後の完全なリストは得られなくても構わないの
で、永遠に返ってこない状態が回避できれば良いと考えています。

自分で試した方法としては以下のようなものです。これ以外のアイディアを募
集します。 mountや findのオプションで何とか対処できるのが良いと考えて
います。

* FATテーブルを修復してから使う
* 一定時間経過後に強制中断する

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/04/27 11:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント27pt

原理的には

Manpage of DD

dd if=/dev/sdb1 of=~/fd.img

と dd を使ってイメージファイルを抜き出して、抜き出したイメージファイルをバイナリエディタで開いて、FAT の構造を考えながら見つけ出す。

FAT ファイル・システムの覚え書き

....とすれば可能だと思うのですが、さすがにイメージファイルをそのままバイナリエディタで、というのがあまりにも原始的なので、何か良いツールがあると良いのですが、今のところちょっと見つけられません。

id:ttakao No.2

回答回数276ベストアンサー獲得回数31

ポイント27pt

linux上での修復に固執していては、なかなか直るものも直らないと思います。(たしかに頑丈に作られていて、少々ならばコケないんですが)

メッセージはファイルシステムとしてクラスターのチェーンが壊れているという内容ですから、通常のファイルリストを取るルーチンをもっているものはコケると思います。

Windowsはやはり、豊富にユーティリティがあり、CHKDSKというOSコマンドでクラスタ破壊を修復するものや、

SCANDISK(http://www.shareedge.com/modules/shareware/view.php?lid=20090327...)といったものを試用することで、なんとかなることもあります。

さらにMSサイトからダウンロードできる、DiskProbeを使えばFATを直接読むことで、ファイルリストだけを取ることも可能です。

http://itaya.corso-b.net/TIPS/DiskProbe/DiskProbe.html

Linuxでの修復はむつかしいか、と思います。こういうのは代替がないので、一回やりそこなうと永遠にデータが消えたりしますものね。

id:hijk05 No.3

回答回数1307ベストアンサー獲得回数23

ポイント26pt

FATテーブルを修復してから使う

http://www.asahi-net.or.jp/~DI5T-MTD/down2.htm

  • id:Nunocky
    個別に回答しようと思ってたら自動的に締め切れらてしまいました。

    ただ、ちょっと自分の文章力のなさを反省しております。皆様「linuxもしくは上で修復する」ことに対してアドバイスを下さったのですが、自分の要望としては「linux上で完全な形なくても良いからファイルリストを得る方法」だったのです。修復してから読み込ませるのはもっとも正しい方法だとは理解しているのですが、その前に「壊れてるメモリカードを入れると処理がストールする」という問題を解決したかったのです。

    FATの修復方法はWindows標準のコマンドしか知らなかったので、紹介頂いたようなツールを知ることができて大変参考になりました。色々試してみたいと思います。

    当初の問題であったリストの一覧取得については、どうもmountやfindのオプション指定でどうにかなる問題ではなさそうだという感じで、エラーチェックを細かく入れたfindっぽいコマンドを自作するしかないかなと考えています。

    どうもありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません