ファイルが破損しているかどうかを確認する方法は?


13

ファイルが破損しているかどうかを確認する一般的な解決策はありますか?たとえば、ビデオファイルが不良であるか、圧縮ファイルが破損しているかなどです。


1
ディスクに物理的なエラーがあるかどうか、またはファイル内の情報が間違っているかどうかを尋ねますか?
トールビョーンラヴンアンデルセン

2
任意のファイル内の情報が正しいかどうかを確認するのは非常に難しいです。echo "P = NP" >is-this-corrupt.txt:)
トムアンダーソン

回答:


10

いいえ、一般的な解決策はありません。ファイルが破損しているかどうかを確認する唯一の方法は、ファイルを試して読み取ることです。その特定の形式の読み方を知っているソフトウェアだけがそれを行うことができます。

できることはfile、ファイルの種類を特定するために使用し、その種類を使用してファイルをチェックする適切なプログラムを選択することです。次のようなスクリプトを作成できます。

# /bin/bash -eu

FILENAME=$1

FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
    "gzip compressed data") CHECKER="gunzip -t" ;;
    # many, many more lines here
    *) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac

$CHECKER $FILENAME

しかし、caseステートメントを記入するために多くの作業が必要になります。

誰かが既にそのようなスクリプト(またはプログラム)を書いている可能性はありますが、私はそれを知りません。


1
「特定の形式の読み方を知っているソフトウェアだけがそれを行うことができる」というのは間違った仮定です。あなたが与えたファイルの種類を気にしないプログラムはたくさんあります。(例えば考えてgrepcattar...)。したがって、ソリューションは非常に肥大化しています。
rozcietrzewiacz

4
「読む」とは、「解釈する」ことを意味します-もっと明確にすべきでした。cat、またはファイルを純粋に構造化されていないバイトストリームとして扱う他のプログラムを使用して、破損をチェックすることはできません。私のソリューションが肥大化しているとは思わない。
トムアンダーソン

Calebが提案したように、各ファイルをバイナリデータとして扱い、後で検証するためにチェックサムを保存できます。これは普遍的で、シンプルで、比較的高速です。
rozcietrzewiacz

1
しかし、あなたのアプローチには、以前に見たりアクセスしたことがないファイルでも検証を実行できるという利点があることがわかりました。これは間違いなくプラスです-あなたの答えでそれを指摘するかもしれません。
rozcietrzewiacz

14

ある時点でファイルが正常であることがわかっている場合は、ファイルのチェックサムを作成し、それを使用して後で比較して、ファイル全体がまだであることを確認できます。これは、メディア間またはネットワークを介してファイルを転送する前に役立ちます。

ファイルの状態がよくわからない場合、普遍的な方法や破損のチェックはありません。破損したデータまたは破損していないデータは、それぞれ特定のファイル形式によってのみ決まります。


3

たまたまZFSを使用している場合は、ファイルを読み取ることができ、ファイルが破損していないか、読み取りエラーが発生したことが保証されます。

編集賢明なコメントの後、ここに私の答えの説明があります:

ZFSは、サイレントデータ破損から保護および検出できます。例:http: //www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191もちろん、ファイルが最初に書き込まれたときにすでに破損している場合は、何もありませんファイルシステムができます。

ファイルの送信中に発生する破損から保護するために、通常の汎用技術はmd5sumまたは同様のハッシュです。


うわー、どのような機能:O
ランスベインズ

1
破損したWebからビデオをダウンロードした場合はどうでしょうか?ZFSはそこで何の助けにもなりません-破損したファイルが変更されないことを確認するだけです。ZFSは素晴らしいですが、破損したファイルをチェックするソリューションではありません。
トムアンダーソン

残念ながら、これは単なるファイルシステムの整合性チェックであり、ファイルの実際の理解や破損しているかどうかの確認ではありません。@Lanceが疑われる最も一般的な使用法は、ダウンロードまたは転送される着信ファイルが有効かどうかを判断できることです。ZFSは、ファイルが良いかどうかを魔法のように決定することはできません。ファイルを指定したものはすべてローカルに保存して返すことを約束するだけです。
カレブ

質問には/ data-recoveryと/ filesystemsのタグが付けられているため、最初の段階で既に壊れているファイルではなく、サイレントデータ破損に関するものであると想定しました。その点を明確にするために回答を編集しました。
jlliagre

@jiliagre:私はあなたの答えの約1時間後にこのタグにタグを付け直しました(おそらく間違っている)。あなたがそれに答えたとき、それは単に「linux」とタグ付けされました。
カレブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.