Tôi nhận thấy bài đăng gốc khá cũ, tuy nhiên, tôi nghĩ thông tin này vẫn có thể có giá trị đối với những người đang tìm giải pháp để xác minh rằng các tệp được sao chép chính xác. Rsync có thể là phương pháp tốt nhất để sao chép dữ liệu và câu trả lời được đưa ra trong chuỗi này là tốt, tuy nhiên đối với những người không có kinh nghiệm với Linux, tôi sẽ cố gắng đưa ra lời giải thích chi tiết hơn.
Kịch bản: Bạn vừa sao chép dữ liệu từ đĩa sang đĩa khác, với rất nhiều thư mục con và tệp. Bạn muốn xác minh rằng tất cả các dữ liệu được sao chép chính xác.
Trước tiên hãy kiểm tra xem md5deep đã được cài đặt bằng cách ban hành lệnh md5deep -v
.
Nếu bạn nhận được một thông báo có nội dung như 'không tìm thấy lệnh', thì hãy cài đặt md5deep bằng cách apt-get install md5deep
.
Giả sử bạn chỉ muốn xử lý các tệp thông thường. Nếu bạn muốn xử lý các loại tệp khác, hãy tham khảo cờ -o trong hướng dẫn md5deep. ( man md5deep
)
Bây giờ bạn đã sẵn sàng và chúng tôi giả định rằng bạn đã sao chép các tệp từ /mnt/orginal
sang /mnt/backup
, thay thế các tệp này cho bất kỳ thư mục nào bạn đang sử dụng.
Đầu tiên thay đổi thư mục nguồn, đây là nguồn ban đầu cho các tệp bạn đã sao chép hoặc sao lưu:
cd /mnt/orginal
Sau đó thực hiện tổng kiểm tra của mỗi tệp:
md5deep -rel -o f . >> /tmp/checksums.md5
Lệnh này đã giải thích:
-r
cho phép chế độ đệ quy
-e
hiển thị chỉ báo tiến độ
-l
cho phép đường dẫn tập tin tương đối.
-o f
chỉ hoạt động trên các tệp thông thường (không phải thiết bị chặn, đường ống có tên, v.v.)
.
nói với md5deep để bắt đầu trong thư mục hiện tại.
>> /tmp/checksums.md5
nói với md5deep để chuyển hướng tất cả đầu ra /tmp/checksums.md5
.
Lưu ý, nếu bạn muốn ghi đè lên nội dung trong các phiên bản trước /tmp/checksums.md5
, hãy sử dụng >
và không>>
Lưu ý rằng lệnh này có thể mất nhiều thời gian, tùy thuộc vào tốc độ io và kích thước của dữ liệu. Bạn có thể thử nghiệm với tốt và / hoặc ionice để tăng hiệu suất của md5deep, nhưng điều đó nằm ngoài phạm vi của câu trả lời này.
Khi việc tạo tổng kiểm tra kết thúc, bây giờ bạn có một tệp có các mục tương tự như:
69c0a826b29c8fbbb /etc2/apm/scripts.d/alsa e9b9131660a8013983bc5e19d7d669eb ./oldconfig-11-09-2013/etc2/ld.so.cache
Cột đầu tiên là tổng kiểm tra md5 và cột thứ hai là đường dẫn tương đối đến tệp mà tổng kiểm tra thuộc về.
Nếu bạn muốn xem có bao nhiêu tệp tồn tại trong tệp tổng kiểm tra, hãy đưa ra lệnh:
wc /tmp/checksums.md5 -l
Bây giờ, bạn muốn kiểm tra xem dữ liệu đã sao chép có đúng không:
cd /mnt/backup
md5deep -o f -reX /tmp/checksums.md5 . >> /tmp/compare.result
Sự khác biệt duy nhất so với khi chúng tôi tạo tổng kiểm tra là -X hiển thị hàm băm hiện tại của một tệp nếu mục nhập trong tệp checksums.md5 không khớp. Vì vậy, vào cuối thử nghiệm, nếu /tmp/compare.result
trống, bạn có thể tin tưởng rằng tất cả các tệp được sao chép chính xác vì tổng kiểm tra khớp.
Lưu ý rằng chỉ các tệp được liệt kê trong /tmp/checksums.md5
tệp sẽ được kiểm tra để kiểm tra chính xác, nếu có bất kỳ tệp bổ sung nào trong /mnt/backup
thư mục, md5deep sẽ không thông báo cho bạn về những điều này.
Ghi chú:
Bạn không nhất thiết phải sử dụng chuyển hướng để lưu trữ các tệp đầu ra. Tham khảo hướng dẫn sử dụng md5deep để biết thêm thông tin.
Bạn có thể phải chạy các lệnh md5deep với quyền root, tùy thuộc vào quyền của các tệp bạn đang xử lý.
sudo apt-get install md5deep
md5deep -rel /path/to/your/directory/ > directory_hash.md5
md5deep -X directory_hash.md5 -r /path/to/your/second/direcotory
Thx rất nhiều.