จะตรวจสอบว่าไฟล์เสียหายหรือไม่?


13

มีวิธีแก้ไขปัญหาทั่วไปเพื่อตรวจสอบว่าไฟล์เสียหายหรือไม่? ตัวอย่างเช่นไฟล์วิดีโอไม่ดีหรือไฟล์บีบอัดเสียหายเป็นต้น


1
คุณถามว่ามีข้อผิดพลาดทางกายภาพในดิสก์หรือไม่หรือข้อมูลในไฟล์ไม่ถูกต้อง?
Thorbjørn Ravn Andersen

2
การตรวจสอบว่าข้อมูลในไฟล์ที่กำหนดเองนั้นถูกต้องหรือไม่นั้นค่อนข้างยุ่งยาก echo "P = NP" >is-this-corrupt.txt:)
Tom Anderson

คำตอบ:


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

แต่คุณมีงานต้องทำมากมายในการกรอกคำสั่งกรณีและปัญหา

อาจเป็นไปได้ว่ามีใครบางคนได้เขียนสคริปต์ (หรือโปรแกรม) เช่นนั้น แต่ฉันไม่รู้อะไรเลย


1
"เฉพาะซอฟต์แวร์ที่รู้วิธีการอ่านรูปแบบเฉพาะนั้นสามารถทำได้"เป็นข้อสันนิษฐานที่ผิด มีโปรแกรมมากมายที่ไม่สนใจประเภทไฟล์ที่คุณให้ (คิดว่าตัวอย่างเช่นgrep, cat, tar... ) วิธีการแก้ปัญหาของคุณจึงป่องมาก
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
LanceBaynes

1
ดังนั้นหากคุณดาวน์โหลดวิดีโอจากเว็บที่เสียหาย ZFS ไม่ช่วยอะไรคุณ - เพียงแค่ตรวจสอบว่าไฟล์ที่เสียหายไม่ได้รับการเปลี่ยนแปลง ZFS นั้นยอดเยี่ยม แต่ก็ไม่ใช่วิธีการตรวจสอบไฟล์ที่เสียหาย
Tom Anderson

น่าเสียดายที่นี่เป็นเพียงการตรวจสอบความสมบูรณ์ของระบบไฟล์ไม่ใช่ความเข้าใจที่แท้จริงของไฟล์และไม่ว่าไฟล์นั้นจะเสียหายหรือไม่ การใช้งานทั่วไปที่ฉันสงสัยว่า @Lance คือหลังจากนั้นจะสามารถตัดสินใจได้ว่าไฟล์ขาเข้าที่ดาวน์โหลดมาหรือการถ่ายโอนนั้นถูกต้องหรือไม่ ZFS ไม่สามารถตัดสินใจได้อย่างน่าอัศจรรย์ว่าไฟล์จะดีหรือไม่เพียงแค่สัญญาว่าสิ่งที่คุณให้ไว้จะถูกบันทึกและส่งคืนในชิ้นเดียว
คาเลบ

เนื่องจากคำถามถูกติดแท็ก / การกู้คืนข้อมูลและ / filesystems ฉันคิดว่ามันเกี่ยวกับความเสียหายของข้อมูลที่เงียบไม่เกี่ยวกับไฟล์ที่เสียหายในตอนแรก ตอบแก้ไขเพื่อชี้แจงจุดนั้น
jlliagre

@ jiliagre: ฉันได้ติดตั้งแท็กนั้นอีกครั้ง (อาจผิด) ประมาณหนึ่งชั่วโมงหลังจากคำตอบของคุณ เมื่อคุณตอบมันมันถูกติดแท็ก "linux"
Caleb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.