Làm thế nào để kiểm tra tính toàn vẹn của một bản sao lưu dd?


11

Tôi vừa tạo một bản sao lưu toàn bộ ổ cứng (50 GB) sshqua:

dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Bây giờ cách tốt nhất để kiểm tra tính toàn vẹn của tệp image.img, nghĩa là làm thế nào để xác minh rằng mọi thứ được sao chép chính xác?


Thông thường khi bạn dd, nó luôn luôn hoàn hảo. Tuy nhiên, bạn luôn có thể chạy sha1sum để kiểm tra băm sha1 của bản gốc và bản sao lưu.
darnir

2
" Thông thường,luôn luôn hoàn hảo." Điều đó làm tôi nhớ đến câu nói đó của The Naked Gun: "Các bác sĩ nói rằng Nordberg có cơ hội sống 50/50, mặc dù chỉ có 10% cơ hội đó".
Sparhawk

Câu trả lời:


9

Nếu lệnh kết thúc thành công, thì bản sao lưu là chính xác, loại bỏ lỗi phần cứng (có thể ảnh hưởng như nhau đến bất kỳ xác minh nào bạn có thể thực hiện). Nó sau này có thể trở nên không chính xác nếu phần cứng bị lỗi, nhưng hầu hết phần cứng lưu trữ phát hiện tham nhũng.

Có một cảnh báo ở đây: trong một đường ống, vỏ không báo cáo lỗi từ phía bên trái. (Điều này là vì một kịch bản khá phổ biến nơi phía bên phải không cần phải đọc tất cả các dữ liệu, ví dụ some_command | head, và phía chết trái tay vì sản lượng của nó không còn muốn.) Vì vậy, đây là một lỗi đọc từ ddWould được bỏ qua. Trong bash, đặt pipefailtùy chọn để báo cáo lỗi từ tất cả các phần của đường ống.

Ngoài ra, hãy cẩn thận mà dd bs=…bỏ qua một số lỗiddthường chậm hơn so với các lựa chọn thay thế . Tôi khuyên bạn không nên sử dụng ddtất cả: không có lợi ích gì khi chỉ sao chép toàn bộ tệp. Trái ngược với những gì bạn có thể đã đọc ở đâu đó, ddkhông phải là lệnh truy cập đĩa cấp thấp với thuộc tính đặc biệt, hoàn toàn không có phép thuật nào dd, phép thuật nằm trong /dev/hda.

shopt -s pipefail
set -e
</dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"

Tuy nhiên, nếu bạn muốn kiểm tra bản sao lưu, cách tốt nhất là lấy một tổng kiểm tra mật mã ở mỗi bên và so sánh chúng. Ví dụ:

ssh myuser@myhost "sha1sum image.img" &
sudo sha1sum /dev/hda

Kiểm tra xem hai tổng kiểm tra có giống nhau không.

Lưu ý rằng điều này kiểm tra xem bản sao lưu và bản gốc có giống nhau tại thời điểm kiểm tra hay không. Bất cứ điều gì bạn thay đổi /dev/hda, bao gồm cả việc gắn và ngắt kết nối hệ thống tệp ngay cả khi không thực hiện bất kỳ thay đổi nào (sẽ cập nhật ngày gắn kết cuối cùng trên nhiều hệ thống tệp), sẽ thay đổi tổng kiểm tra. Nếu bạn muốn xác minh tính toàn vẹn sau này, hãy ghi lại tổng kiểm tra của đĩa tại thời điểm sao lưu ở đâu đó.


3
Lưu ý rằng nếu bất cứ điều gì trên /dev/hdađã thay đổi kể từ khi sao lưu được thực hiện thì băm sẽ không khớp.
bahamat

Lợi ích của kiểm tra băm là các âm bản giả (lỗi được tạo ra trong quá trình ghi hình ảnh, do tình cờ, được lặp lại trong quá trình băm, do đó, một lỗi không được chú ý) là rất nhỏ về mặt thiên văn. Nếu có bất kỳ lỗi phần cứng nào, nó sẽ dẫn đến việc kiểm tra băm không thành công. Sẽ nhận được kiểm tra thất bại dương tính nếu đĩa đã được thay đổi, như đã được lưu ý.
Steven Lu

@StevenLu Không, cơ hội tương quan là khá cao, vì lỗi phần cứng không đồng nhất ngẫu nhiên. Cụ thể, lỗi RAM (là lỗi phần cứng phổ biến nhất có thể quan sát được trong các PC thông thường) xảy ra ở các bit cụ thể.
Gilles 'SO- ngừng trở nên xấu xa'

Được rồi, có lẽ ... băm như thế này với một hạt muối lớn, chắc chắn, nhưng OP đã chuyển qua mạng. Nó chỉ là không đáng tin cậy, mặc dù TCP. Ngoài ra, rất có thể chúng ta sẽ không nhìn thấy cùng một kiểu truy cập chính xác (trong bộ nhớ vật lý).
Steven Lu

Câu hỏi mới liên quan tìm kiếm làm rõ về câu đầu tiên @Gilles.
Sparhawk

5

Như darnir & Giles đã đề cập, điều tốt nhất cần làm là chạy băm mật mã ngay sau khi sao lưu trước khi mọi thứ bị thay đổi trên đĩa nguồn của bạn. Tuy nhiên, nếu bạn đã sử dụng đĩa kể từ đó thì băm rất có thể sẽ không khớp. Thậm chí thay đổi một byte trên đĩa sẽ dẫn đến một hàm băm hoàn toàn khác.

Mặc dù nó ít hơn nhiều so với lý tưởng nhưng bạn có thể phát hiện ra việc kiểm tra hình ảnh bằng cách gắn nó. Trên hệ thống có hình ảnh đĩa, hãy chạy như sau (tạo /mnt/disknếu nó không tồn tại hoặc cho chúng tôi một vị trí thay thế):

mount -o loop image.img /mnt/disk

Sau đó, bạn có thể duyệt xung quanh /mnt/diskvà xem tất cả các tệp. Kiểm tra băm sha1 của các tệp quan trọng bên trong ảnh so với bản gốc để xác minh tính toàn vẹn của chúng.


-1

Sử dụng lệnh qemu-img

qemu-img check image.img
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.