Tüm diskin DD'sini sürdürme


10

Ben iyi eski kullanarak rastgele verilerle sabit diskimi üzerine yazıyorum dd:

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

Bu 2 TB'lık bir dizi ve MacBook'um (Linux çalışıyor, tamam mı?) Yalnızca 3.7MB / s civarında veri yazabiliyor, bu da masaüstümü 20MB / s'de yaptığım gibi oldukça acıklı. Bu gece eve gittiğimde, ddburada koşuyu durdurmak, eve götürmek ve daha güçlü bir makine ile bir gecede nasıl bir ilerleme kaydedilebileceğini görmek istiyorum.

Basit bir döngü kullanarak ilerlemeyi izliyorum:

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

Çıktı şöyle görünür:

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

ddEvde pasa devam edersem , nasıl tekrar başlatabilirim? seekParametrenin farkındayım , ancak kayıt numarasına veya bayt sayısına ne işaret ederim?


1
Kayıt numarasını kullanabilir miyim? Bu, yazılı blok sayısına eşit mi?
Naftuli Kay

2
Blok sayısı = toplam bayt / blok boyutu, teorik olarak 238048755782/512 = 464938976 olmalıdır, ancak orada bazı kısmi kayıtlarınız var, bu yüzden sayıdan sadece birkaç blok seek=464938960
çıkaracağım

Yanıtlar:


8

@Don_crissti'nin zaten yorumladığı gibi, seek=devam etmek için kullanın .

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

GNU dd ayrıca bayt aramayı da destekler, böylece blok boyutundan bağımsız olarak tam olarak devam edebilirsiniz:

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

Daha büyük bir blok boyutu, yavaş bir cihaz için bile hızlara yardımcı olmalıdır /dev/urandom.

Daha hızlı alternatifler arıyorsanız, cryptsetup plainOpenrastgele bir anahtar ve sıfırla /dev/urandom, büyüklük sırasına göre (AES-NI olmadan) veya hatta tam hızda (AES-NI ile) çalışmalıdır.

Ayrıca shred -n 1psödondom verileri kullanım durumunuz için yeterliyse de kullanabilirsiniz. shredçok yavaş bir makinede bile tam disk hızını kullanabilmelidir.


plainOpenŞimdiye kadar bilmiyordum . Harika! 12GB üzerinden 256GB yerine 2 TB'lık bir sürücüyü karıştırmamı yaklaşık 4 saatte bitirdim /dev/urandom.
Naftuli Kay

4

(Değil sadece randomizing diskler yerine kopyalamak isteyen insanlar için Sadece bir hatırlatma olduğunu kullanabilirsiniz: ortak) skip=BLOCKSbaşlatmak için okuma uygun pozisyonda ve seek=BLOCKSbaşlatmak için yazma doğru pozisyonda. Her iki seçenek de bayt değil blok kullanır. Kırma / yeniden başlatma sırasında, her ihtimale karşı bir grup bloğu kaldırmanız önerilir. bsArka arkaya çok fazla veri okursanız daha iyi performans elde edebileceğiniz için genellikle 512'nin üzerindeki değeri yükseltmeye değer.

Sizin durumunuzda, gerçekten geçmeniz gereken bir blok değerdir seek. Belki de hızlı gitmesi gerektiği bsgibi hızı artırabileceğinizi görmek için ayarlamaya çalışmalısınız /dev/random(mevcut entropi olmadığında sözde rasgele ve bloke olmayan)


0

dd512 bayt gibi küçük bir blok boyutuna sahip olması, diskinizin maksimum veriminden çok daha yavaş olacaktır. İyi performans için daha yüksek bir blok boyutu kullanın (bir yığınta birkaç MB diyorum). Veya catLinux'ta kullanın - tek bir disk dahil edildiğinde en uygun blok boyutu kadar hızlı buldumcatdd (OSX için de geçerli olup olmadığını bilmiyorum).

Ne kadar uzağa catulaştığını bulmak için , lsof -p12341234'ün işlemin süreç kimliği olduğu yerde çalıştırın cat.

Bir konumdan devam etmek için şunu kullanın:

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

burada 123456 byte cinsinden ofsettir.


0

Bir diski klonlama:

Bu iş parçacığındaki bu cevabı genişleterek, bir diskin tamamını klonlamak ve devam ettirmek şu şekilde olabilir:

Bu örnek, 5400rpm'lik bir döner sürücüden belirli bir sistemdeki bir SSD'ye kopyalamak için optimize edilmiştir. gddtemsil eder 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

Bunu iki yoldan biriyle devam ettirebilirim:

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

Veya:

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

İlk örnekte, kullanmamızın 59011değil kullanmamızın 59012nedeni 59011, kesintiye uğramadan önce kaç blok büyüklüğünde kaydın tamamen kopyalanmış olmasıdır. (kayıtlar).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.