Khi nào dd thích hợp để sao chép dữ liệu? (hoặc, khi được đọc () và ghi () một phần) chỉ ra một cảnh báo quan trọng khi sử dụng count
: dd
có thể sao chép các khối một phần, do đó, khi được cung cấp, count
nó sẽ dừng sau số khối đã cho, ngay cả khi một số khối chưa hoàn thành. Do đó, bạn có thể kết thúc với ít hơn bs * count
byte được sao chép, trừ khi bạn chỉ định iflag=fullblock
.
Kích thước khối mặc định cho dd là 512 byte. count
là một giới hạn; như câu hỏi của bạn gợi ý không cần thiết khi sao chép một thiết bị có kích thước hữu hạn và thực sự chỉ nhằm sao chép một phần của thiết bị.
Tôi nghĩ có hai khía cạnh để xem xét ở đây: hiệu suất và phục hồi dữ liệu.
Liên quan đến hiệu suất, lý tưởng nhất là bạn muốn kích thước khối ít nhất bằng và bội số của kích thước khối vật lý cơ bản (do đó là 2048 byte khi đọc CD-ROM). Trong thực tế hiện nay bạn cũng có thể chỉ định kích thước khối lớn hơn để cung cấp cho các hệ thống bộ đệm ẩn bên dưới cơ hội để đệm mọi thứ cho bạn. Nhưng việc tăng kích thước khối có nghĩa là dd
phải sử dụng nhiều bộ nhớ hơn và nó có thể phản tác dụng nếu bạn sao chép qua mạng vì phân mảnh gói.
Theo như phục hồi dữ liệu, bạn có thể lấy thêm dữ liệu từ một đĩa cứng bị lỗi nếu bạn sử dụng kích thước khối nhỏ hơn; đây là những gì các chương trình như dd-rescue
tự động thực hiện: ban đầu chúng đọc các khối lớn, nhưng nếu một khối bị lỗi, chúng sẽ đọc lại nó với kích thước khối nhỏ hơn. dd
Sẽ không làm điều này, nó sẽ thất bại toàn bộ khối.
dd bs=4m iflag=fullblock
vsdd bs=1111
và chú ý tốc độ dữ liệu cao hơn đáng kể mà trước đây sẽ cung cấp cho bạn. Điều này là do cái trước phù hợp với kích thước khối tự nhiên trên thẻ SD, trong khi cái sau đòi hỏi bộ điều khiển SD phải đọc, sao chép và phản xạ nhiều để viết các khối vật lý một phần. Tuy nhiên, tầm quan trọng củafullblock
không nên được đánh giá thấp, vì nếu không có nó,bs
chỉ có một lần đọc tối đa và một phần có thể dẫn đến những sai lệch kéo dài sau đó.