Có dd làm bất kỳ loại xác minh?


16

Tôi đang sử dụng ddđể sao chép dữ liệu từ ổ cứng cũ sang ổ cứng mới. Tôi muốn chắc chắn rằng tính toàn vẹn của dữ liệu là an toàn.

Về câu trả lời này , Gilles nói

Nếu [dd] chấm dứt thành công, thì bản sao lưu là chính xác, loại bỏ lỗi phần cứng

điều đó chính xác có nghĩa là gì? Có ddmột số loại xây dựng trong xác minh?

Nếu tôi sử dụng rsync thay vào đó, tôi cũng sẽ chạy một lượt thứ hai --checksumđể xác minh. Là loại hoang tưởng hợp lý?


Xác định "tính toàn vẹn là an toàn".
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Ý tôi là bản sao giống hệt bản gốc.
Sparhawk

Nếu bạn chỉ có các tệp phẳng, cách truyền thống để sao chép tệp là sử dụng tar hoặc cpio. GNU tar có một cờ xác minh: gnu.org/software/tar/manual/html_section/tar_81.html . Những ngày rsyncnày có lẽ sẽ là đơn giản nhất.
Thorbjørn Ravn Andersen

1
"Chặn lỗi phần cứng" chỉ ra rằng nó không thực hiện bất kỳ xác minh nào. Nếu có, nó có thể phát hiện lỗi phần cứng.
Barmar

Câu trả lời:


20

ddhoặc bất kỳ ứng dụng nào khác không có một số loại xác minh được xây dựng trong ý nghĩa mà bạn có thể nghĩ đến: nó không đọc lại dữ liệu từ phương tiện lưu trữ để so sánh với những gì được viết. Đó là công việc của hệ điều hành.

Không thể thực hiện đọc xác minh xuống phần cứng từ một ứng dụng. Nó sẽ hoạt động trong một số tình huống, nhưng trong hầu hết các trường hợp, nó sẽ chẳng đạt được gì. Ứng dụng có thể đọc lại những gì nó vừa viết nếu nó ghi trực tiếp vào phương tiện lưu trữ , nhưng thông thường sẽ đọc lại từ bộ nhớ cache trong bộ nhớ, điều này sẽ không đảm bảo hữu ích. Trong ví dụ bạn trích dẫn , ddđang ghi vào một đường ống và trong trường hợp đó, nó không có quyền kiểm soát đối với những gì xảy ra với dữ liệu tiếp theo. Trong ví dụ rsync của bạn, vượt qua lần thứ hairsync --checksum là vô nghĩa: về mặt lý thuyết nó có thể bắt lỗi, nhưng trên thực tế, nếu xảy ra lỗi, thì lần thứ hai có thể sẽ không báo cáo bất cứ điều gì sai, vì vậy bạn đang lãng phí nỗ lực vào thứ gì đó không thực sự mang lại sự đảm bảo hữu ích.

Tuy nhiên, các ứng dụng làm xác minh những gì xảy ra với dữ liệu, theo nghĩa là họ xác nhận rằng hệ điều hành có trách nhiệm chấp nhận cho dữ liệu. Tất cả các cuộc gọi hệ thống trả về một trạng thái lỗi. Nếu một cuộc gọi hệ thống trả về trạng thái lỗi, ứng dụng sẽ truyền lỗi đó cho người dùng, nói chung bằng cách hiển thị thông báo lỗi và trả về trạng thái thoát khác.

Coi chừng đó ddlà một ngoại lệ: tùy thuộc vào các tham số dòng lệnh, ddcó thể bỏ qua một số lỗi . Điều này là vô cùng bất thường: ddlà lệnh phổ biến duy nhất với tài sản này. Sử dụng catthay vì dd, theo cách đó bạn không có nguy cơ tham nhũng và nó có thể nhanh hơn .

Trong một chuỗi sao chép dữ liệu, hai loại lỗi có thể phát sinh.

  • Tham nhũng: một chút được lật trong quá trình chuyển. Không có cách nào để xác minh điều này ở cấp ứng dụng, bởi vì nếu điều đó xảy ra, đó là do lỗi lập trình hoặc lỗi phần cứng rất có thể gây ra lỗi tương tự khi đọc lại. Cách hữu ích duy nhất để xác minh rằng không có sự cố tham nhũng nào xảy ra là ngắt kết nối vật lý với phương tiện truyền thông và thử lại, tốt nhất là trên một máy tính khác trong trường hợp xảy ra sự cố với RAM.
  • Cắt bớt: tất cả dữ liệu được sao chép đã được sao chép chính xác, nhưng một số dữ liệu hoàn toàn không được sao chép. Cái này giá trị kiểm tra đôi khi, tùy thuộc vào mức độ phức tạp của lệnh. Bạn không cần phải đọc dữ liệu để làm điều đó: chỉ cần kiểm tra kích thước.

Tôi tin rằng hầu hết các phương tiện lưu trữ sử dụng đủ FEC để phát hiện + sửa lỗi lật một bit.
vườn

2
Tất nhiên, nếu bạn sao chép toàn bộ đĩa cứng bằng dd và ngay lập tức so sánh đĩa cứng bạn biết nó hoạt động vì bộ đệm không đủ lớn.
Joshua

1
Cảm ơn câu trả lời (+1). Tôi có lẽ nên đề cập đến việc tôi đang sử dụng một cách khá cơ bản dd if=/dev/sdc of=/dev/sdb bs=4M, vì vậy tôi hiểu rằng các vấn đề bỏ qua lỗi và tốc độ (nhiều hơn hoặc ít hơn, so với cat) là vấn đề. Bạn đang nói chỉ cần kiểm tra kích thước bằng cách gắn sau đó df?
Sparhawk

4

Không, ddkhông làm một xác minh rõ ràng. Nếu bạn muốn / cần một bản sao được xác minh pháp y của đĩa của bạn hoặc bất kỳ phần nào của nó, hãy sử dụng dcflddđó là phiên bản nâng cao ddđược phát triển bởi Phòng thí nghiệm pháp y máy tính của Bộ Quốc phòng Hoa Kỳ.


4

Cách duy nhất để "chắc chắn" là thực hiện một lượt đọc và so sánh bổ sung (sau khi bỏ bộ đệm).

Ngoài ra, ddphát hiện lỗi đọc và ghi giống như tất cả các chương trình khác làm ... nó hoạt động nếu các ổ đĩa (và các thành phần khác có liên quan) báo cáo lỗi; đối với các ổ đĩa chấp nhận dữ liệu âm thầm với việc thực sự ghi chúng, bạn sẽ không gặp may.

Là loại hoang tưởng hợp lý?

Nếu bạn không thể tin tưởng vào phần cứng của mình là đáng tin cậy, mọi thứ sẽ trở nên phức tạp ...


Nó phức tạp hơn thế này , cả về đọc và so sánh và ddphát hiện lỗi.
Gilles 'SO- ngừng trở nên xấu xa'

Chà, nếu bạn đi xa đến thế, ddvấn đề tham nhũng dữ liệu nghiêm trọng nhưng những trường hợp đặc biệt như đây không phải là một phần của câu hỏi.
frostschutz

Những vấn đề tham nhũng có thể biện minh cho việc xác minh dữ liệu được tạo ra bằng cách sử dụng dd. Giải pháp thực sự là sử dụng bất cứ thứ gì nhưng ddvì tham nhũng dữ liệu im lặng là một đặc sản của dd.
Gilles 'SO- ngừng trở nên xấu xa'

2
@Gilles, hoặc chỉ không nói ddđể bỏ qua lỗi. Bạn không thể đổ lỗi chính xác cho một chương trình để làm chính xác những gì bạn yêu cầu.
Đánh dấu

@Mark Và làm thế nào, cầu nguyện, để bạn nói ddkhông bỏ qua lỗi? Và không, conv=noerrorkhông phải là một câu trả lời đúng. Xem câu trả lời của frostschutz cho một ví dụ. Tôi làm đổ lỗi cho việc thiết kế ddđể làm lỗi bỏ qua một chế độ mặc định, và một trong đó không thể tắt mà không biết cơ nội bộ của mình rất chính xác.
Gilles 'SO- ngừng trở nên xấu xa'

2

Có, phần cứng bị lỗi có thể chèn các bit lỗi ngẫu nhiên vào dữ liệu với tốc độ như một bit trên mỗi megabyte, điều này là có thể và đôi khi xảy ra trong thực tế.

Thông thường, tôi sử dụng băm md5 hoặc sha1 để xác minh dữ liệu còn nguyên vẹn, bằng cách đọc lại cả nguồn và đích, ví dụ:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

Điều này giả định rằng dữ liệu lớn hơn nhiều so với bộ đệm của hệ thống tập tin, nếu không, bạn có thể cần phải khởi động lại hệ thống để xác minh dữ liệu thực tế trên phương tiện chứ không phải nội dung bộ đệm hoặc sử dụng hệ thống khác cho nó.


Chỉ cần ngắt kết nối / gắn hệ thống tệp để buộc HĐH ghi bộ đệm hệ thống tệp vào thiết bị.
phép lạ173

miracle173, nhưng ngay cả sau khi đồng bộ hóa, hệ điều hành vẫn không lưu trong bộ nhớ cache những gì nó đã viết? Vì vậy, tôi không chắc chắn việc ngắt kết nối sẽ xóa tất cả bộ nhớ cache khỏi RAM.
Matt

1

Từ man dd:

Khi kết thúc, dd hiển thị số khối đầu vào và đầu ra hoàn chỉnh và một phần, các bản ghi đầu vào bị cắt ngắn và các khối hoán đổi byte có độ dài lẻ cho đầu ra lỗi tiêu chuẩn.

Khối đầu vào một phần là một khối nhỏ hơn kích thước khối đầu vào được đọc. Khối đầu ra một phần là một khối nhỏ hơn kích thước khối đầu ra được ghi. Khối đầu ra một phần cho các thiết bị băng được coi là lỗi nghiêm trọng. Nếu không, phần còn lại của khối sẽ được viết. Các khối đầu ra một phần cho các thiết bị ký tự sẽ tạo ra một thông báo cảnh báo.

ddkiểm tra kích thước khối đầu vào / đầu ra khớp với mỗi lần sao chép một khối. Nếu họ không, nó sẽ xử lý lỗi bằng một cảnh báo hoặc lỗi nghiêm trọng (bị quá tải noerror). Đó là lý do tại sao ddhoạt động hầu như mọi lúc.

Tuy nhiên, nó không thay thế thủ công xác minh tính toàn vẹn của đĩa của bạn. Nếu thông tin có giá trị với bạn, thì có, chứng hoang tưởng của bạn là hợp lý . Chạy xác minh thủ công một khi ddkết thúc.


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.