So sánh các thiết bị khối thô


12

Có một tiện ích (hoặc một số phép thuật vỏ) cho phép tôi so sánh hai thiết bị khối?

Chi tiết: Tôi có một thiết bị RAID lớn (0,5 TB) mà tôi đã sao lưu vào thiết bị SATA lớn hơn một chút bằng dd. Thiết bị có một số phân vùng trên đó, tuy nhiên tôi sao chép từ thiết bị 'cha mẹ' chứ không phải các nút thiết bị được phân vùng (ví dụ: tôi sao chép / dev / hda và không / dev / hda1 chẳng hạn).

Tôi muốn xác minh rằng sao lưu là tốt / chính xác.

Tôi đã nghĩ về việc chạy md5sum trên mỗi thiết bị, tuy nhiên điều đó sẽ không cho tôi kết quả chính xác vì thiết bị thứ hai lớn hơn một chút so với thiết bị thứ nhất và do đó các byte thừa sẽ thay đổi hàm băm.

Câu trả lời:


13

Tôi sẽ sử dụng lệnh

cmp /dev/hda /dev/hdb

nó sẽ dừng ở byte khác nhau đầu tiên, viết phần bù của nó hoặc trên EOF trên byte ngắn hơn.


Tôi không thấy trong trang web bất cứ điều gì về việc dừng lại ở EOF, điều đó có được ghi lại ở đâu không?
Kevin

Trong thực tế, trạng thái thoát cho biết: "1: Các tệp khác nhau, bao gồm cả trường hợp một tệp giống hệt với phần đầu tiên của tệp kia." Điều này dường như ngụ ý rằng nó không báo cáo chúng là giống hệt nhau nếu một cái ngắn hơn.
Kevin

@Kevin: từ info cmp: "Lệnh 'cmp' so sánh hai tệp và nếu chúng khác nhau, sẽ cho biết byte và số dòng đầu tiên nơi chúng khác nhau."
enzotib

1
Bạn có thể sử dụng --bytes=LIMITtùy chọn, đặt LIMITgiá trị thành byteize của thiết bị nhỏ hơn để dừng ở cuối ổ nhỏ hơn (hoặc ranh giới phân vùng) mà không cần cmpthoát với trạng thái khác không.
rozcietrzewiacz

nếu tôi có một bản sao / dev / loop0 của / dev / sda và tôi thay đổi thành / dev / loop0, làm cách nào tôi có thể thêm các thay đổi mới vào / dev / sda ?? Cảm ơn bạn
Milor123

2

Tùy thuộc vào mức độ đầy đủ của các ổ đĩa, có thể nhanh nhất để gắn các hệ thống tệp và làm

diff -qr /mnt/root1 /mnt/root2

Nếu không, tôi sẽ nói một cái gì đó như thế này:

diff -q <(dd bs=1M count=500K if=/dev/sda) <(dd bs=1M count=500K if=/dev/sdb)

Rõ ràng chỉ ra rằng bạn cần phải làm lớn đến mức nào bscountdừng lại ở đâu (hoặc ngay trước đó nếu nó thuận tiện hơn nhiều) ở cuối ổ nhỏ hơn.

Hoặc, nhờ nhận xét của enzotib, có vẻ như bạn có thể sử dụng cmp, nhưng bạn sẽ cần -ncờ để giới hạn số lượng byte ngắn hơn trong hai ổ đĩa.

cmp /dev/sda /dev/sdb -n 500GB

Thật không may, tôi không thể gắn thiết bị dưới dạng ổ đĩa NTFS và tôi có LiveCD mà không có trình điều khiển phù hợp trên thiết bị. Đối với lệnh thứ hai, các lớp con bạn sử dụng không cố gắng hút toàn bộ thiết bị vào bộ nhớ trước khi đưa nó vào diff?
alanxz

1
@alanxz Không, các mạng con diffsẽ không đọc toàn bộ thiết bị trước khi viết. ddghi bsbyte ngay lập tức sau khi đọc nó (hoặc xử lý nếu được chỉ định, không phải ở đây) và chúng ghi vào fifos, khối này cho đến khi chúng được đọc.
Kevin

Tôi đã suy nghĩ nhiều hơn ở cấp độ vỏ (hoặc bất cứ điều gì thực hiện FIFO). Nhưng điều đó trả lời câu hỏi của tôi!
alanxz

2

Bạn đang tìm kiếm phần mềm khác biệt nhị phân

rdiff
được thiết kế để sao lưu và truyền mạng, hãy nhìn vào sao lưu dự phòng và sao chép để sao lưu dự phòng

xdelta3
là một công cụ nén vi sai nhị phân nguồn mở, nén vi sai, nén delta VCDIFF (RFC 3284).

bsdiff
cũng vậy !! bộ nhớ đói, không phù hợp cho các thiết bị khối.


1

Có một tiện ích gọi là bsdiff , thực hiện chính xác loại điều này. Nó thực sự rất nhanh và có thể tạo ra một bản vá nhị phân, nếu bạn cần.

Xem bài đăng này cho một số giải thích xung quanh nó.


bsdiffCông việc của nó phức tạp hơn so với việc so sánh đơn giản hai tệp, vì vậy tôi nghi ngờ nó có thể nhanh hơn đơn giản hơn cmp.
enzotib

Liên kết bị hỏng.
Owen Pauling

1

Bạn có thể so sánh hai thiết bị khối có kích thước khác nhau bằng cách sử dụng md5sumnhư thế này:

(giả sử thiết bị nhỏ hơn là /dev/sda)

# md5sum /dev/sda && head -c $(blockdev --getsize64 /dev/sda) /dev/sdb | md5sum

0

Xem xét chạy fscktrên bản sao lưu. Bạn có thể cần thực hiện một số thủ thuật losetupđể có được các thiết bị loopback được đặt trên các phân vùng được nhúng trong bản sao lưu, nhưng nếu kiểm tra tệp cho biết cấu trúc tệp phù hợp thì dữ liệu có khả năng tốt.

Nếu bạn muốn kiểm tra toàn bộ, bạn có thể sử dụng các thiết bị loopback có offset để xem xét các 'phân vùng' bên trong của bản sao lưu và md5sum riêng biệt, nhưng một điều bắt buộc fsckcó thể cung cấp cho bạn một ý tưởng cơ bản nhanh hơn nhiều so với byte để so sánh byte hoặc tính toán tổng kiểm tra.

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.