Copia DD completa da HDD a HDD


34

DOMANDA ORIGINALE:

Se ho 2 dischi rigidi identici con le seguenti caratteristiche:

  • SATA 6.0 Gb / s
  • 5400 giri / min
  • 3TB

Quanto tempo deve essere completata per completare una copia completa?

Finora funziona da 5 ore e continua ...

Sto usando Linux Ubuntu 12.04 a 64 bit e il comando che sto usando è:

dd if=/dev/sdb of=/dev/sdc

AGGIORNAMENTO: 1

Ora posso vedere i progressi, ed è stato 6+ ore per la copia di 430 GB. L'HDD è di 3 TB ...

Non esiste un modo più veloce per farlo?


AGGIORNAMENTO: 2

Questo sembra molto meglio di prima (grazie a Groxxda per i suggerimenti):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

L'ETA è di circa 9 ore per 3 TB, mentre prima ha raggiunto 430 GB dopo 6 ore, quindi suppongo che ci sarebbero volute circa 36 ore usando il comando precedente.


Prova a catturare le statistiche del processo: l'invio di un segnale USR1 a un processo 'dd' in esecuzione lo fa stampare le statistiche I / O sull'errore standard e quindi riprendere a copiare. $ dd if = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid Controlla la tua pagina man per il segnale effettivo in quanto differisce per le diverse implementazioni dd.
groxxda,

@Groxxda, non ho idea di come farlo.
oshirowanen,

1
GNU dd usa SIGUSR1e BSD dd usaSIGINFO
groxxda

Inoltre cosa intendi con "collegato allo stesso cavo SATA"? Stai usando una sorta di moltiplicatore di porte? (Se raggiungi una velocità di trasferimento di 150 MB / s, ci vorranno 5-6 ore, ma penso che metà di ciò sia più realistico.)
groxxda

1
Potresti essere in grado di accelerare il processo specificando una dimensione di blocco (più grande) diversa ( bs=argomento su dd). Considera anche di collegare ogni HDD alla sua porta sata.
groxxda,

Risposte:


58

ddera utile ai vecchi tempi quando le persone usavano i nastri (quando contavano le dimensioni dei blocchi) e quando strumenti più semplici come quelli catnon potevano essere sicuri per i binari.

Oggi dd if=/dev/sdb of=/dev/sdcè un modo di scrivere lento , complicato, soggetto a errori cat /dev/sdb >/dev/sdc. Sebbene sia ddancora utile per alcune attività relativamente rare , è molto meno utile del numero di tutorial che menzionano che ti farebbe credere. Non c'è magia dd, la magia è tutto dentro /dev/sdb.

Il tuo nuovo comando sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kè di nuovo inutilmente lento e complicato. I dati vengono letti 128kB alla volta (che è meglio del ddvalore predefinito di 512B, ma non buono come valori anche più grandi). Quindi passa attraverso due pipe prima di essere scritto.

Usa il catcomando più semplice e veloce . (In alcuni benchmark che ho fatto un paio di anni fa con Linux, catera più veloce di cpuna copia tra dischi diversi ed cpera più veloce che ddcon qualsiasi dimensione di blocco; ddcon una dimensione di blocco grande era leggermente più veloce quando si copiava sullo stesso disco.)

cat /dev/sdb >/dev/sdc

Se si desidera eseguire questo comando sudo, è necessario eseguire il reindirizzamento come root:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

Se si desidera un rapporto sullo stato di avanzamento, poiché si utilizza Linux, è possibile ottenerlo facilmente rilevando il PID del catprocesso (diciamo 1234) e osservando la posizione del relativo descrittore di file di input (o output).

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

Se si desidera un rapporto sullo stato di avanzamento e la variante unix non fornisce un modo semplice per accedere alle posizioni di un descrittore di file, è possibile installare e utilizzare pvinvece di cat.


Ciò che è strano con blocchi di grandi dimensioni è che il collo di bottiglia è il disco, quindi cosa rende catpiù veloce di dd? Potrebbe essere che catutilizza la cache?
Emmanuel,

1
@Gilles, grazie per la risposta. Ho altre cinque unità da 3 TB da clonare e proverò successivamente l'opzione cat. Per quanto ne so, il completamento del nuovo comando dd richiederà altre 3 ore, per un totale di circa 11 ore. Se l'approccio cat è più veloce di 11 ore per il secondo HDD da 3 TB, userò quel metodo per le unità rimanenti.
oshirowanen,

2
@Gilles, quindi per ottenere un rapporto sui progressi, devo usare sudo sh -c 'pv /dev/sdb >/dev/sdc'invece di sudo sh -c 'cat /dev/sdb >/dev/sdc'?
oshirowanen,

1
@oshirowanen Sì, usa pvdove useresti cat.
Gilles 'SO- smetti di essere malvagio' il

1
@unhammer No! Copieresti ogni dispositivo uno per uno, ad es cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. Concatenare le due parti non ha senso. Se vuoi cambiare la struttura del volume btrfs, per cambiarlo dall'avere due sottovolumi in uno, devi usare gli strumenti btrfs per cambiare la struttura, o come hai fatto per creare un nuovo filesystem con la struttura desiderata e copiare i file .
Gilles 'SO- smetti di essere malvagio' il

7

ddusa di default una dimensione di blocco molto piccola (512 byte). Ciò comporta un sacco di overhead (uno read()e write()syscall per ogni 512 byte).

Va molto più veloce quando usi una dimensione di blocco più grande. Le velocità ottimali iniziano a bs=64kcirca. La maggior parte delle persone usa un formato ancora più grande in bs=1Mmodo che diventi leggibile dall'uomo (quando lo dddice copiato 1234 blocks, sai che è 1234 MiBsenza fare matematica). È improbabile che l'utilizzo di blocchi di dimensioni ancora maggiori comporti miglioramenti della velocità, solo un maggiore consumo di memoria.

Quindi il comando dovrebbe essere:

dd bs=1M if=/dev/sdb of=/dev/sdc

Se hai già una ddcorsa lenta , puoi interromperla e riprenderla con ddun'istanza più veloce . Per questo è importante sapere fino a che punto è già progredita la copia. dddi solito stampa l'avanzamento quando lo si annulla, oppure è possibile inviare il USR1segnale mentre è in esecuzione per farlo stampare.

kill -USR1 $(pidof dd)

Ad esempio, se è stato copiato più di 1234MiB, è possibile riprendere in posizione 1234MiButilizzando:

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

Se è stato copiato meno di 1234MiB, la tua copia sarà incompleta. Se ha copiato più di 1234MiB, copierà nuovamente alcune parti già copiate, che normalmente non fa alcun danno. Quindi, in caso di dubbio, dovresti scegliere un valore leggermente inferiore a quello che ritieni sia già stato copiato.


5

Ottenere statistiche sul processo dd in corso

È possibile utilizzare il killcomando con il segnale appropriato per eseguire ddstatistiche di output su errori standard.
Dalla pagina man dd GNU:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

Assicurati di controllare prima la tua pagina man per il segnale corretto in quanto potrebbe differire su diverse implementazioni dd: (BSD dd usa SIGINFO).

Accelerare il processo

  1. Collega ciascun HDD alla propria porta SATA in modo che i dati possano essere letti da un dispositivo e scritti contemporaneamente nell'altro.
  2. Usa una dimensione del blocco appropriata usando l' bs=argomento. Dai un'occhiata a questa discussione su superutente e prova alcuni valori per te stesso.
  3. Usa ddinvocazioni separate per leggere e scrivere e usa una pipe per collegarle ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    Se lo fai e specifichi una dimensione a blocchi, assicurati di usare la stessa dimensione a blocchi su ogni invocazione.
  4. Puoi provare altre ottimizzazioni come l' directargomento.
  5. Accertarsi che i dischi rigidi non siano montati o che possano risultare in una copia danneggiata.

0

Hai provato 'gparted'? Puoi letteralmente copiare e incollare una partizione da un'unità a un'altra e ridimensionarla di conseguenza secondo necessità. Ottieni la velocità di trasferimento e il tempo rimanente. Usa 'e2image' sotto per le partizioni Linux.


0

Esiste un software commerciale chiamato HDClone . È concesso in licenza sia come freeware che commerciale. Entrambe le versioni possono creare un pendrive o un DVD avviabile, nonché copiare i dischi. Collegare i dischi rigidi sorgente e destinazione e seguire le istruzioni basate sulla GUI.

Quello gratuito verrà trasferito a una velocità di circa 80 MB / sec, mentre le versioni a pagamento possono andare molto più velocemente. Per i filesystem NTFS e FAT, le versioni a pagamento possono essere configurate per clonare solo i bit occupati dell'HD, il che aumenta notevolmente la velocità di ciascun clone.


(1) Sei affiliato con questo prodotto? (2) Dove possiamo trovarlo?
Scott,

1
Oppure potresti semplicemente usare "cat / dev / sdx> / dev / sdy" gratis ...
HörmannHH,
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.