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

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

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

答え1

特定の時点でファイルが良好であることがわかっている場合は、そのファイルをチェックサムして後で比較して、まだ破損していないことを確認できます。これは、メディア間またはネットワークを介してファイルを転送する前に便利です。

ファイルの状態が良好でない場合に破損しているかどうかを確認するための一般的な方法はありません。各ケースの特定のファイル形式のみが、どのデータが破損しているかを判断できます。

答え2

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

あなたができることは、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

ただし、ケースステートメントを作成するには多くの作業を行う必要があります。

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

答え3

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

編集 合理的なコメントを出した後、私の答えの説明は次のとおりです。

ZFSは自動データ破損を保護および検出できます。たとえば、http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 もちろん、ファイルが最初に作成されたときに破損した場合、ファイルシステムができることはあまりありません。

ファイル転送中の破損を防ぐために一般的に使用される技術は、md5sumまたは同様のハッシュです。

答え4

私の考えでは、ここへの答えはほとんど次のとおりです。「海辺を覆う」しかし、OPは次のよ​​うに尋ねました。

「たとえば、動画ファイルが破損しているか、圧縮ファイルが破損しています、等。 」

このunzipユーティリティには、-t次のことができるオプションがあります。

テストアーカイブファイル。このオプションは、メモリに指定された各ファイルを抽出し、拡張ファイルの巡回冗長チェック、拡張チェックサム(CRC)を元のファイルに格納されているCRC値と比較します。

ファイルが「良い」とテストされている場合はunzip -t /path/to/file便利に0(0または)を返し、true問題が見つかった場合は0以外の数値を返します。

関連情報