Tiếp tục DD của toàn bộ đĩa


10

Tôi đang ghi đè ổ cứng của mình bằng dữ liệu ngẫu nhiên bằng cách sử dụng dữ liệu cũ dd:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

Đó là một mảng 2TB và MacBook của tôi (chạy Linux, ok?) Chỉ có thể ghi dữ liệu với tốc độ khoảng 3,7 MB / giây, điều này khá thảm hại khi tôi thấy máy tính để bàn của mình ở nhà có tốc độ 20 MB / giây. Khi tôi về nhà tối nay, tôi muốn dừng cuộc ddchạy ở đây, mang nó về nhà và xem loại tiến bộ nào có thể được thực hiện qua đêm với một cỗ máy mạnh hơn.

Tôi đã theo dõi tiến trình bằng một vòng lặp đơn giản:

while true; do kill -USR1 $PID ; sleep 10 ; done

Đầu ra trông như thế này:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

Nếu tôi tiếp tục ddvượt qua ở nhà, tôi sẽ khởi động lại như thế nào? Tôi biết về seektham số này, nhưng tôi chỉ ra nó là gì, số lượng bản ghi hoặc số byte?


1
Tôi có sử dụng số kỷ lục không? Điều đó có bằng số khối viết không?
Naftuli Kay

2
Số khối = tổng số byte / size khối, về mặt lý thuyết nó phải được 238048755782/512 = 464.938.976 nhưng bạn có một số hồ sơ một phần có vì vậy tôi sẽ trừ một vài dãy số chỉ để được an toàn, ví dụseek=464938960
don_crissti

Câu trả lời:


8

Như @don_crissti đã nhận xét, chỉ cần sử dụng seek=để tiếp tục.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU dd cũng hỗ trợ tìm kiếm theo byte, vì vậy bạn có thể tiếp tục chính xác, bất kể kích thước khối:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

Kích thước khối lớn hơn sẽ giúp tăng tốc ngay cả đối với một thiết bị chậm như thế nào /dev/urandom.

Nếu bạn đang tìm kiếm các lựa chọn thay thế nhanh hơn, bạn có thể cryptsetup plainOpenvới một khóa ngẫu nhiên và bằng 0, nó sẽ đánh bại /dev/urandomtheo một độ lớn (không có AES-NI) hoặc thậm chí chạy ở tốc độ tối đa (với AES-NI).

Bạn cũng có thể sử dụng shred -n 1nếu dữ liệu giả ngẫu nhiên đủ tốt cho trường hợp sử dụng của bạn. shrednên có thể sử dụng tốc độ đĩa đầy đủ, ngay cả trên một máy rất chậm.


Tôi đã không biết về plainOpencho đến bây giờ. Tuyệt quá! Tôi đã hoàn thành việc tranh giành ổ đĩa 2TB trong khoảng 4 giờ so với 256GB trong hơn 12 lần sử dụng /dev/urandom.
Naftuli Kay

3

Chỉ cần một lời nhắc nhở cho những người muốn sao chép chứ không phải là đĩa chỉ ngẫu nhiên (mà không phải là phổ biến): bạn có thể sử dụng skip=BLOCKSđể bắt đầu đọc tại vị trí thích hợp, và seek=BLOCKSđể bắt đầu viết vào đúng vị trí. Cả hai tùy chọn đều sử dụng các khối, không phải byte. Khi phá vỡ / khởi động lại, nên loại bỏ một loạt các khối chỉ trong trường hợp. Nó thường đáng để tăng bsgiá trị trên 512, vì bạn có thể đạt được hiệu suất tốt hơn nếu bạn đọc nhiều dữ liệu liên tiếp.

Trong trường hợp của bạn, nó thực sự là một giá trị khối mà bạn cần phải vượt qua seek. Có lẽ bạn nên thử điều chỉnh bsđể xem liệu bạn có thể tăng cường tốc độ hay không, /dev/randomnên đi nhanh (giả ngẫu nhiên và không chặn khi không có sẵn entropy)


0

ddvới kích thước khối nhỏ như 512 byte có thể chậm hơn rất nhiều so với thông lượng tối đa của đĩa của bạn. Sử dụng kích thước khối cao hơn (theo linh cảm tôi muốn nói là vài MB) để có hiệu suất tốt. Hoặc sử dụng cat- trên Linux, tôi thấy catnhanh như ddvới kích thước khối tối ưu khi có một đĩa đơn (Tôi không biết liệu điều đó có đúng với OSX không).

Để tìm khoảng cách catđã đạt được, hãy chạy lsof -p1234trong đó 1234 là ID tiến trình của catquy trình.

Để tiếp tục từ một vị trí, sử dụng

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

Trong đó 123456 là phần bù theo byte.


0

Nhân bản một đĩa:

Mở rộng câu trả lời này từ chủ đề này, đây là cách người ta có thể tiến hành sao chép toàn bộ đĩa và tiếp tục:

Ví dụ này được tối ưu hóa để sao chép từ ổ đĩa quay 5400 vòng / phút sang ổ SSD trên một hệ thống cụ thể. gddđại diện cho GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

Tôi có thể tiếp tục điều này theo một trong hai cách:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

Hoặc là:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

Trong ví dụ đầu tiên, lý do chúng tôi sử dụng 59011và không 59012, là bởi vì 59011có bao nhiêu bản ghi kích thước khối đã được sao chép hoàn toàn trước khi bị gián đoạn. (ghi lại).

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.