Ripresa di un DD di un intero disco


10

Sto sovrascrivendo il mio disco rigido con dati casuali usando il buon vecchio dd:

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

È un array da 2 TB e il mio MacBook (con Linux, ok?) Può solo scrivere dati a circa 3,7 MB / s, il che è piuttosto patetico come ho visto il mio desktop a casa fare 20 MB / s. Quando torno a casa stasera, vorrei fermare la ddcorsa qui, portarmelo a casa e vedere che tipo di progressi possono essere fatti dall'oggi al domani con una macchina più potente.

Ho monitorato i progressi usando un semplice ciclo:

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

L'output è simile al seguente:

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

Se dovessi riprendere il ddpass a casa, come lo riavvierei? Sono a conoscenza del seekparametro, ma a cosa devo puntare, il numero di record o il conteggio dei byte?


1
Uso il numero di registrazione? Ciò equivale al conteggio scritto a blocchi?
Naftuli Kay,

2
Il numero di blocchi = byte totali / dimensione del blocco, in teoria dovrebbe essere 238048755782/512 = 464938976 ma ci sono dei record parziali lì quindi sottraggerei alcuni blocchi dal numero solo per sicurezza, es.seek=464938960
don_crissti

Risposte:


8

Come già commentato @don_crissti, basta usare seek=per riprendere.

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

GNU dd supporta anche la ricerca in byte, quindi puoi riprendere esattamente, indipendentemente dalla dimensione del blocco:

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

Una dimensione di blocco più grande dovrebbe aiutare con le velocità anche per un dispositivo lento come /dev/urandom.

Se stai cercando alternative più veloci, potresti cryptsetup plainOpencon una chiave casuale e zero quella, dovrebbe battere /dev/urandomdi un ordine di grandezza (senza AES-NI) o anche correre a piena velocità (con AES-NI).

Puoi anche usare shred -n 1se i dati pseudocasuali sono abbastanza buoni per il tuo caso d'uso. shreddovrebbe essere in grado di utilizzare l'intera velocità del disco, anche su una macchina molto lenta.


Non sapevo plainOpenfino ad ora. Grande! Ho terminato il mio rimescolamento di un disco da 2 TB in circa 4 ore rispetto a 256 GB in oltre 12 utilizzando /dev/urandom.
Naftuli Kay,

3

Solo un promemoria per le persone che vorrebbero copiare piuttosto che randomizzare i dischi (che non è così comune): puoi usare skip=BLOCKSper iniziare a leggere nella posizione corretta e seek=BLOCKSper iniziare a scrivere nella posizione corretta. Entrambe le opzioni usano blocchi, non byte. Quando si rompe / riavvia, è consigliabile rimuovere un gruppo di blocchi per ogni evenienza. In genere vale la pena aumentare il bsvalore sopra 512, poiché è possibile ottenere prestazioni migliori leggendo molti dati di seguito.

Nel tuo caso, è davvero un valore di blocco che devi passare seek. Forse dovresti provare a regolare bsper vedere se puoi migliorare la velocità, come /dev/randomdovrebbe andare veloce (pseudo-casuale e non bloccante quando non ha entropia disponibile)


0

ddcon una dimensione di blocco minuscola come 512 byte è probabilmente molto più lento del throughput massimo del disco. Usa una dimensione del blocco più alta (con un sospetto direi qualche MB) per buone prestazioni. Oppure usa cat- su Linux ho scoperto catdi essere veloce quanto ddla dimensione del blocco ottimale quando era coinvolto un singolo disco (non so se ciò vale anche per OSX).

Per trovare la distanza catraggiunta, eseguire lsof -p1234dove 1234 è l'ID del catprocesso.

Per riprendere da una posizione, utilizzare

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

dove 123456 è l'offset in byte.


0

Clonazione di un disco:

Espandendo questa risposta da questo thread, ecco come si potrebbe fare per clonare un intero disco e riprendere:

Questo esempio è ottimizzato per la copia da un'unità rotante a 5400 giri / min a un SSD su un sistema specifico. gddrappresenta 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

Posso riprenderlo in due modi:

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

O:

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

Nel primo esempio, il motivo per cui usiamo 59011e non 59012è perché 59011è quanti record di dimensioni di blocco sono stati copiati completamente prima di essere interrotti. (registra).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.