Bagaimana cara memeriksa apakah suatu file rusak atau tidak?

13

Apakah ada solusi umum untuk memeriksa apakah suatu file rusak atau tidak? Misalnya, apakah file video buruk, atau file terkompresi rusak, dll.

LanceBaynes
sumber
1
Apakah Anda bertanya apakah ada kesalahan fisik pada disk atau jika informasi dalam file tidak benar?
Thorbjørn Ravn Andersen
2
Memeriksa apakah informasi dalam file sewenang-wenang sudah benar cukup rumit. echo "P = NP" >is-this-corrupt.txt:)
Tom Anderson

Jawaban:

10

Tidak, tidak ada solusi umum. Satu-satunya cara untuk memeriksa apakah suatu file rusak adalah dengan mencoba dan membacanya; hanya perangkat lunak yang tahu cara membaca format tertentu yang dapat melakukannya.

Apa yang dapat Anda lakukan adalah menggunakan fileuntuk mengidentifikasi jenis file, dan kemudian menggunakan tipe tersebut untuk memilih program yang sesuai untuk memeriksa file. Anda dapat menulis skrip seperti ini:

# /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

Tetapi Anda akan memiliki banyak pekerjaan yang harus dilakukan untuk mengisi pernyataan kasus.

Mungkin saja seseorang telah menulis skrip (atau program) seperti itu, tetapi saya tidak tahu.

Tom Anderson
sumber
1
"hanya perangkat lunak yang tahu cara membaca format tertentu yang bisa melakukan itu" adalah asumsi yang salah. Ada banyak program yang tidak peduli dengan jenis file yang Anda berikan. (Pikirkan misalnya grep, cat, tar...). Solusi Anda karenanya sangat membengkak.
rozcietrzewiacz
4
Dengan "membaca", maksud saya "menafsirkan" - saya seharusnya lebih jelas. Anda tidak dapat menggunakan cat, atau program lain yang memperlakukan file murni sebagai aliran byte yang tidak terstruktur, untuk memeriksa korupsi. Saya tidak percaya solusi saya membengkak.
Tom Anderson
Anda bisa, seperti yang disarankan Caleb memperlakukan setiap file sebagai data biner dan menyimpan checksum untuk verifikasi nanti. Ini bersifat universal, sederhana dan relatif cepat.
rozcietrzewiacz
1
Tetapi saya melihat sekarang bahwa pendekatan Anda memiliki manfaat bahwa Anda dapat melakukan verifikasi bahkan pada file yang belum Anda lihat atau akses sebelumnya. Ini jelas merupakan nilai tambah - Anda mungkin menunjukkannya dalam jawaban Anda.
rozcietrzewiacz
14

Jika Anda tahu suatu saat file tersebut bagus, Anda dapat membuatnya sebagai checksum dan menggunakannya untuk membandingkan nanti untuk memastikan itu masih utuh. Ini berguna sebelum mentransfer file antara media atau lintas jaringan.

Jika Anda tidak tahu tentang keadaan file yang baik, tidak ada cara universal atau memeriksa korupsi. Hanya format file tertentu dalam setiap kasus yang menentukan data yang rusak atau tidak.

Caleb
sumber
3

Jika Anda kebetulan menggunakan ZFS, Anda dapat membaca file dan dijamin tidak rusak atau Anda mendapat kesalahan baca dan itu.

Sunting Setelah komentar bijak, inilah klarifikasi jawaban saya:

ZFS dapat melindungi dan mendeteksi terhadap kerusakan data diam. misalnya: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Tentu saja jika file tersebut sudah rusak pada saat awalnya ditulis, tidak ada apa-apa sistem file dapat dilakukan.

Untuk melindungi dari korupsi yang akan terjadi selama transmisi file, teknik tujuan umum yang umum adalah md5sum atau hash serupa.

Jlliagre
sumber
wow, sungguh fitur: O
LanceBaynes
1
Jadi jika Anda mengunduh video dari web yang rusak? ZFS tidak melakukan apa pun untuk membantu Anda di sana - hanya memverifikasi bahwa file yang rusak tidak dapat diubah. ZFS luar biasa, tetapi ini bukan solusi untuk memeriksa file yang rusak.
Tom Anderson
Sayangnya ini hanya pemeriksaan integritas sistem file, bukan pemahaman aktual file dan apakah mereka rusak. Penggunaan paling umum yang saya duga @ Lance adalah setelah dapat memutuskan apakah file yang masuk diunduh atau ditransfer atau tidak sah. ZFS tidak dapat secara ajaib memutuskan apakah suatu file baik atau tidak, hanya berjanji bahwa apa pun yang Anda berikan disimpan dan dikembalikan dalam keadaan utuh secara lokal.
Caleb
Karena pertanyaan ini ditandai / data-recovery dan / filesystems, saya berasumsi itu tentang korupsi data diam, bukan tentang file yang sudah rusak di tempat pertama. Jawaban diedit untuk memperjelas hal itu.
jlliagre
@ jiliagre: Saya retaged pertanyaan ini dengan tag itu (mungkin salah) sekitar satu jam setelah jawaban Anda. Ketika Anda menjawabnya itu hanya ditandai "linux".
Caleb