Làm thế nào để kiểm tra xem một tập tin có bị hỏng hay không?


13

Có bất kỳ giải pháp chung nào để kiểm tra xem một tập tin có bị hỏng hay không? Ví dụ: cho dù một tệp video là xấu, hoặc một tệp nén bị hỏng, v.v.


1
Bạn có hỏi nếu có lỗi vật lý trên đĩa hoặc nếu thông tin trong tệp không chính xác?
Thorbjørn Ravn Andersen

2
Kiểm tra xem thông tin trong một tệp tùy ý có chính xác hay không là khá khó khăn. echo "P = NP" >is-this-corrupt.txt:)
Tom Anderson

Câu trả lời:


10

Không, không có bất kỳ giải pháp chung nào. Cách duy nhất để kiểm tra xem một tập tin có bị hỏng hay không là thử và đọc nó; chỉ phần mềm biết cách đọc định dạng cụ thể đó mới có thể làm điều đó.

Những gì bạn có thể làm là sử dụng fileđể xác định loại tệp và sau đó sử dụng loại để chọn một chương trình thích hợp để kiểm tra tệp. Bạn có thể viết một kịch bản như thế này:

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

Nhưng bạn có rất nhiều việc phải làm để điền vào tuyên bố trường hợp.

Có thể ai đó đã viết một kịch bản (hoặc chương trình) như vậy, nhưng tôi không biết gì về nó.


1
"Chỉ phần mềm biết cách đọc định dạng cụ thể đó mới có thể làm được điều đó" là một giả định sai. Có rất nhiều chương trình không quan tâm đến loại tệp bạn cung cấp cho họ. (Nghĩ ví dụ grep, cat, tar...). Do đó, giải pháp của bạn là rất lớn.
rozcietrzewiacz

4
Bằng cách "đọc", tôi có nghĩa là "diễn giải" - tôi nên đã rõ ràng hơn. Bạn không thể sử dụng cathoặc bất kỳ chương trình nào khác xử lý tệp hoàn toàn dưới dạng luồng byte không cấu trúc để kiểm tra tham nhũng. Tôi không tin rằng giải pháp của tôi là cồng kềnh.
Tom Anderson

Bạn có thể, như Caleb đề xuất coi mỗi tệp là dữ liệu nhị phân và lưu trữ tổng kiểm tra để xác minh sau. Đây là phổ quát, đơn giản và tương đối nhanh chóng.
rozcietrzewiacz

1
Nhưng tôi thấy rằng cách tiếp cận của bạn có một lợi ích là bạn có thể thực hiện xác minh ngay cả trên các tệp mà bạn chưa thấy hoặc truy cập trước đó. Đây chắc chắn là một điểm cộng - bạn có thể chỉ ra nó trong câu trả lời của bạn.
rozcietrzewiacz

14

Nếu bạn biết rằng tại thời điểm nào đó tệp tốt, bạn có thể kiểm tra lại và sử dụng nó để so sánh sau để đảm bảo rằng nó vẫn còn nguyên. Điều này rất hữu ích trước khi truyền tệp giữa các phương tiện hoặc trên các mạng.

Nếu bạn không biết về trạng thái tốt của tệp, thì không có cách phổ biến hay kiểm tra tham nhũng. Chỉ định dạng tệp cụ thể trong từng trường hợp xác định dữ liệu bị hỏng hoặc không bị hỏng.


3

Nếu bạn tình cờ sử dụng ZFS, bạn có thể đọc tệp và nó được đảm bảo không bị hỏng hoặc bạn gặp lỗi đọc và đó là lỗi.

Chỉnh sửa Sau khi nhận xét khôn ngoan, đây là một câu trả lời rõ ràng của tôi:

ZFS có thể bảo vệ và phát hiện chống tham nhũng dữ liệu im lặng. ví dụ: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 Tất nhiên nếu các tập tin đã được hỏng lúc nó ban đầu được viết, không có gì là hệ thống tập tin có thể làm.

Để bảo vệ chống tham nhũng sẽ xảy ra trong quá trình truyền tệp, các kỹ thuật mục đích chung thông thường là md5sum hoặc băm tương tự.


wow, thật là một tính năng: O
LanceBaynes

1
Vì vậy, nếu bạn tải xuống một video từ web bị hỏng? ZFS không có gì để giúp bạn ở đó - nó chỉ xác minh rằng tệp bị hỏng không bị thay đổi. ZFS là tuyệt vời, nhưng nó không phải là một giải pháp để kiểm tra các tệp bị hỏng.
Tom Anderson

Thật không may, đây chỉ là một kiểm tra tính toàn vẹn của hệ thống tệp, không phải là sự hiểu biết thực sự về các tệp và liệu chúng có bị hỏng hay không. Cách sử dụng phổ biến nhất mà tôi nghi ngờ @Lance là sau khi có thể quyết định xem một tệp đến được tải xuống hoặc chuyển đi có hợp lệ hay không. ZFS không thể quyết định một cách kỳ diệu xem một tệp có tốt hay không, chỉ hứa rằng bất cứ thứ gì bạn cho đều được lưu và trả lại trong một mảnh cục bộ.
Caleb

Vì câu hỏi được gắn thẻ / phục hồi dữ liệu và / hệ thống tập tin, tôi cho rằng đó là về tham nhũng dữ liệu im lặng, không phải về các tệp đã bị hỏng ngay từ đầu. Trả lời chỉnh sửa để làm rõ điểm đó.
jlliagre

@jiliagre: Tôi đã trả lời câu hỏi này với thẻ đó (có thể sai) khoảng một giờ sau câu trả lời của bạn. Khi bạn trả lời nó chỉ đơn giản là được gắn thẻ "linux".
Caleb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.