Làm cách nào để xác minh đĩa CD dựa trên hình ảnh ISO?


10

Tôi đã có một đĩa CD bị cháy vật lý và hình ảnh ISO gốc của nó. Không có tệp kiểm tra tham chiếu nào được cung cấp cho nội dung CD. Làm cách nào để kiểm tra CD thực tế là chính xác (tương ứng với ảnh gốc) và hoàn toàn có thể đọc được?


Bạn có nghĩa là kiểm tra dữ liệu trên CD ngay sau khi nó được ghi? Bởi vì hầu hết các công cụ phần mềm ghi đĩa đều có tùy chọn kiểm tra dữ liệu bằng văn bản (ví dụ Nero).
Silviu

Tôi biết nhưng tôi cần thực hiện kiểm tra không ngay sau quy trình ghi đĩa nhưng sau một thời gian (sau khi chương trình ghi đĩa đã đóng), thậm chí có thể trên một PC khác. Theo như tôi biết thì Nero không đề nghị bắt đầu một quy trình xác minh độc lập với quy trình ghi đĩa - đó là cơ sở xác minh chỉ là một tiện ích bổ sung để ghi và chỉ có thể xảy ra ngay sau khi ghi. Điều tôi muốn là chèn CD, chọn tệp ISO và nhấp để xác minh ... Một hạn chế khác là tôi sẽ không làm điều này trong Linux vì tôi nghi ngờ trình điều khiển CD / IDE Windows của tôi không ổn.
Ivan

Điều đó thực sự khó khăn, bạn đang ghi đĩa CD khởi động hoặc dữ liệu thuần túy?
cúc

Một đĩa CD có thể khởi động ..
Ivan

FYI, một số ISO Linux có tùy chọn khởi động tích hợp để xác minh nội dung của chúng. Bạn có thể sử dụng tùy chọn đó và nó sẽ kiểm tra tất cả các tệp của đĩa dựa vào tệp chứa tổng kiểm tra. Bạn cũng có thể md5sumtự chạy và so sánh, nếu bạn không muốn khởi động CD / DVD.
Skylar Ittner

Câu trả lời:


5

Đầu tiên, bạn trích xuất CD của mình thành một tệp tạm thời:

dd if=/dev/sr0 of=copy.iso

Sau đó, bạn kiểm tra nếu copy.isoorig.isocó cùng kích thước, ví dụ với:

stat -c '%s %n' orig.iso copy.iso

Nếu kích thước giống hệt nhau, thật dễ dàng:

sha1sum orig.iso copy.iso

Nhưng tôi nhận thấy rằng trong một số trường hợp, kích thước có thể hơi khác nhau vì có các số 0 ở cuối bản sao hoặc ảnh gốc. Ví dụ: nếu copy.isonhỏ hơn orig.iso:

sha1sum copy.iso
head -c $(stat -c %s copy.iso) orig.iso | sha1sum

Tất nhiên bạn cũng nên kiểm tra xem các byte theo sau chỉ là số không:

od -j $(stat -c %s copy.iso) orig.iso

Dòng đầu tiên, ngoại trừ phần bù, chỉ nên là số không. Dòng thứ hai nên là một dấu sao. Dấu hoa thị là để tránh hiển thị các dòng giống hệt nhau liên tiếp.


+1 cho tổng kiểm tra. Đây thường là tiêu chuẩn thực tế để so sánh các tệp (hoặc thư mục) và không quan tâm đến việc biết sự khác biệt (như trường hợp với diff): tối thiểu hơn.
nikitautiu

hoặc bạn có thể làm head -c $(stat -c %s /path/to/master.iso) /dev/sr0 | sha1sumđể tránh cần phải tạo một hình ảnh của đĩa CD bị cháy.
Hitechcomputergeek

4

Nếu tệp ISO là cùng một tệp được sử dụng để ghi CD, thì đây là hai mục ưa thích của tôi:

diff /dev/sr0 /tmp/file.iso

So sánh hình ảnh được ghi lại với tập tin hình ảnh. Nếu bạn cảm thấy khổ dâm hơn một chút, bạn có thể thử một cái gì đó như thế này:

sha1sum /dev/sr0 /tmp/file.iso

và so sánh các chữ ký. Điều này hữu ích hơn nếu bạn đã có tổng SHA1 ở đâu đó. Cả hai lệnh sẽ đọc phương tiện đến cuối.

Nếu bạn muốn thực hiện theo cách @ Marki555 gợi ý, trước tiên bạn sẽ muốn gắn cả ổ đĩa quang và hình ảnh. Đây là một kịch bản hoàn chỉnh: (tất nhiên, bạn có thể phân phối với sudonếu bạn là root - nói chung là một ý tưởng tồi)

sudo mkdir /tmp/{a,b}
sudo mount /dev/sr0 /tmp/a -o ro # or whatever
sudo mount /tmp/file.iso /tmp/b -o loop,ro
diff -dur /tmp/{a,b}
sudo umount /tmp/a
sudo umount /tmp/b
sudo rmdir /tmp/{a,b}

3
cmp [-l]là phù hợp hơn cho các tập tin nhị phân. Diff hoạt động tốt nhất trên văn bản.
derobert

3

Nếu bạn vẫn có ISO, bạn có thể so sánh chúng theo từng byte bằng cách sử dụng cmp. Đó là một lệnh đủ đơn giản và nó thoát khỏi sự khác biệt đầu tiên mà nó tìm thấy, vì vậy nó nhanh hơn đáng kể so với việc kiểm tra nếu thực sự có lỗi sớm.

cmp /dev/cdrom /path/cdrom.iso

Kết quả có thể thành công:

  • không có đầu ra: nó giống hệt nhau và tất cả đều ổn. Bạn có thể nối thêm && echo OKlệnh nếu thiếu đầu ra làm bạn bối rối.
  • cmp: EOF on cdrom.iso: nó giống hệt nhau nhưng cdrom có ​​nhiều byte hơn tệp iso của bạn. Điều này thường là do phần đệm bằng không ở cuối cdrom. Vì điều đó không quan trọng trong thực tế, nó vẫn thành công.

Kết quả có thể xảy ra khi thất bại:

  • cmp: EOF on /dev/cdrom: vì một số lý do, dữ liệu trên CDROM của bạn không đầy đủ. Có thể ISO của bạn quá lớn để phù hợp với một đĩa CD thực sự.
  • /dev/cdrom cdrom.iso differ: byte 18296321, line 71780: có một số khác biệt bất ngờ giữa CDROM và hình ảnh ISO của bạn.

trong khi các báo cáo khác nhau 'khác nhau', phương pháp cmp của bạn là tuyệt vời!
qrtLs

2

Bạn có thể kiểm tra xem CD có thể đọc được hoàn toàn hay không bằng cách sử dụng dd(ví dụ dd if=/dev/cdrom of=/dev/null). Nhưng bạn không thể so sánh nó trực tiếp với hình ảnh ISO. Mỗi phần mềm sẽ tạo tệp ISO hơi khác nhau (có thể một số tiêu đề hoặc phần đệm khác nhau), mặc dù các hình ảnh ISO khác nhau này sẽ cung cấp cùng một nội dung CD (cấu trúc thư mục, thuộc tính tệp và nội dung tệp).

Vì vậy, bạn chỉ có thể gắn CD, gắn hình ảnh ISO và so sánh nó ở cấp hệ thống tập tin bằng cách sử dụng một số loại công cụ so sánh thư mục (xin lỗi, tôi chưa sử dụng bất kỳ ứng dụng nào trên linux).


diff -rsẽ so sánh các nội dung thư mục đệ quy.
Kevin

5
Vì cd đã được ghi từ hình ảnh iso đã được chuẩn bị, nên không có gì được tạo khác khi ghi, vì vậy bạn có thể so sánh trực tiếp cd với hình ảnh iso.
psusi

-1

Brasero có thể làm điều đó: Công cụ -> Kiểm tra tính toàn vẹn ...

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.