Melanjutkan DD dari seluruh disk

10

Saya menimpa hard drive saya dengan data acak menggunakan yang lama dd:

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

Ini adalah array 2TB dan MacBook saya (menjalankan Linux, ok?) Hanya dapat menulis data sekitar 3.7MB / s, yang cukup menyedihkan karena saya melihat desktop saya di rumah melakukan 20MB / s. Ketika saya pulang malam ini, saya ingin menghentikan ddpelarian di sini, membawanya pulang, dan melihat kemajuan seperti apa yang bisa dicapai dalam semalam dengan mesin yang lebih kuat.

Saya telah memantau perkembangan menggunakan loop sederhana:

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

Outputnya terlihat seperti ini:

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

Jika saya harus melanjutkan ddpass di rumah, bagaimana saya me-restart itu? Saya mengetahui seekparameternya, tetapi apa yang harus saya tunjukkan, nomor rekaman atau jumlah byte?

Naftuli Kay
sumber
1
Apakah saya menggunakan nomor catatan? Apakah itu sama dengan jumlah blok tertulis?
Naftuli Kay
2
Jumlah blok = total byte / ukuran blok, secara teori seharusnya 238048755782/512 = 464938976 tetapi Anda memiliki beberapa catatan parsial di sana jadi saya akan mengurangi beberapa blok dari angka hanya untuk aman, misalnyaseek=464938960
don_crissti

Jawaban:

8

Karena @don_crissti sudah berkomentar, cukup gunakan seek=untuk melanjutkan.

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

GNU dd juga mendukung pencarian dalam byte, sehingga Anda dapat melanjutkan dengan tepat, terlepas dari ukuran blok:

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

Blocksize yang lebih besar akan membantu kecepatan bahkan untuk perangkat yang lambat sekalipun /dev/urandom.

Jika Anda mencari alternatif yang lebih cepat, Anda bisa cryptsetup plainOpendengan kunci acak dan nol itu, itu harus mengalahkan /dev/urandomdengan urutan besarnya (tanpa AES-NI) atau bahkan berjalan dengan kecepatan penuh (dengan AES-NI).

Anda juga dapat menggunakan shred -n 1jika data pseudorandom cukup baik untuk kasus penggunaan Anda. shredharus dapat memanfaatkan kecepatan disk penuh, bahkan pada mesin yang sangat lambat.

frostschutz
sumber
Saya tidak tahu tentang plainOpensampai sekarang. Bagus! Menyelesaikan pengacakan 2TB drive saya di sekitar 4 jam dibandingkan dengan 256GB di lebih dari 12 menggunakan /dev/urandom.
Naftuli Kay
3

Hanya pengingat bagi orang yang ingin menyalin bukan hanya mengacak disk (yang tidak yang umum): Anda dapat menggunakan skip=BLOCKSuntuk memulai membaca pada posisi yang tepat, dan seek=BLOCKSmulai menulis pada posisi yang benar. Kedua opsi menggunakan blok, bukan byte. Ketika memecahkan / memulai kembali, disarankan untuk menghapus banyak blok untuk berjaga-jaga. Biasanya perlu meningkatkan bsnilai di atas 512, karena Anda dapat mencapai kinerja yang lebih baik jika Anda membaca banyak data dalam satu baris.

Dalam kasus Anda, ini memang merupakan nilai blok yang harus Anda sampaikan seek. Mungkin Anda harus mencoba menyesuaikan bsuntuk melihat apakah Anda dapat meningkatkan kecepatan, seperti yang /dev/randomseharusnya berjalan cepat (pseudo-random dan non-blocking ketika tidak tersedia entropi)

Uriel
sumber
0

dddengan ukuran blok kecil seperti 512 byte cenderung jauh lebih lambat dari throughput maksimum disk Anda. Gunakan ukuran blok yang lebih tinggi (pada firasat saya akan mengatakan beberapa MB) untuk kinerja yang baik. Atau gunakan cat- di Linux saya menemukan catsecepat dddengan ukuran blok optimal ketika satu disk terlibat (saya tidak tahu apakah itu berlaku untuk OSX juga).

Untuk menemukan sejauh mana cattelah mencapai, jalankan di lsof -p1234mana 1234 adalah ID proses dari catproses tersebut.

Untuk melanjutkan dari suatu posisi, gunakan

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

di mana 123456 adalah offset dalam byte.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Kloning disk:

Memperluas jawaban ini dari utas ini, ini adalah bagaimana seseorang dapat mengkloning seluruh disk dan melanjutkan:

Contoh ini dioptimalkan untuk menyalin dari drive rotary 5400rpm ke SSD pada sistem tertentu. gddmewakili 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

Saya dapat melanjutkan ini dalam salah satu dari dua cara:

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

Atau:

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

Dalam contoh pertama, alasan kami menggunakan 59011dan tidak 59012, adalah karena 59011berapa banyak catatan berukuran blok sepenuhnya disalin sebelum diganggu. (catatan).

hmedia1
sumber