Clonazione di un singolo disco su più unità contemporaneamente


12

Sto cercando un modo per clonare unità disco singolo su più di un'unità disco contemporaneamente.

Ho preparato immagini di sistema su dischi da 1 TB, e ci vogliono quasi 2 ore per clonare un disco su un altro, e poi sale esponenzialmente, per dire che sono stati clonati 30 dischi.

Se fosse possibile clonare un disco su più di un singolo target, ciò semplificherebbe molto l'intera procedura.

Inoltre, c'è qualcosa che impedisce questo tipo di operazione? Voglio dire, c'è qualche motivo speciale per cui ogni software di clonazione del disco che conosco supporta solo una singola unità di destinazione?

Grazie!

Risposte:


17

Puoi usare la "sostituzione del processo" di bash insieme al comando tee per fare questo:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

o per chiarezza (a scapito di un po 'di efficienza) puoi fare in modo che l'ultimo ddsia chiamato allo stesso modo degli altri e inviare lo stdout di tee a / dev / null:

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null

e se lo hai installato puoi usare il visualizzatore di pipe invece di catottenere un utile indicatore di avanzamento:

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

Questo legge l'immagine sorgente una sola volta, quindi l'unità sorgente subisce un colpo alla testa, che probabilmente sarà il motivo per cui vedrai un rallentamento esponenziale quando provi a copiare l'immagine più volte con altri metodi. Usando teecome sopra, i processi dovrebbero essere eseguiti alla velocità dell'unità di destinazione più lenta.

Se le unità di destinazione sono collegate tramite USB, tenere presente che potrebbero condividere tutte la larghezza di banda del bus, quindi scrivere molte in parallelo potrebbe non essere più veloce della loro scrittura sequenziale perché il bus USB diventa il collo di bottiglia non l'unità di origine o di destinazione.

Quanto sopra presuppone che tu stia utilizzando Linux o simili (dovrebbe funzionare anche su OSX anche se i nomi dei dispositivi potrebbero essere diversi), se stai utilizzando Windows o qualcos'altro, allora hai bisogno di una soluzione diversa.

modificare

L'imaging sulla rete presenta un problema simile all'imaging di molte unità tramite USB - il canale di trasporto diventa il collo di bottiglia anziché le unità - a meno che il software utilizzato non supporti una qualche forma di trasmissione o trasmissione multicast.

Per il ddmetodo che potresti probabilmente fare daisy chain netcat+ tee+ ddprocessi su ogni macchina in questo modo:

  1. Computer di origine cat/ pv/ dds i dati attraverso ncal computer di destinazione 1.
  2. La macchina di destinazione 1 ha in ncascolto i dati dalla macchina di origine e li ha convogliati attraverso i teequali a loro volta li invia a dd(e quindi al disco) e un altro ncprocesso che invia alla macchina di destinazione 2.
  3. La macchina di destinazione 2 ha in ncascolto i dati dalla macchina di destinazione 1 e li ha convogliati attraverso i teequali a loro volta li invia a dd(e quindi al disco) e un altro ncprocesso che invia alla macchina di destinazione 3.
  4. e così via fino all'ultima macchina che ha appena ncraccolto i dati dalla macchina precedente e li ha inviati al disco tramite dd.

In questo modo si utilizza potenzialmente tutta la larghezza di banda della rete, supponendo che lo switch e le schede di rete abbiano negoziato un collegamento full duplex. Invece della macchina di origine che invia 10 copie dei dati (presupponendo 10 macchine di destinazione), quindi ciascuna è limitata a 1/10 della larghezza di banda in uscita che sta inviando solo 1. Ogni macchina di destinazione sta prendendo una copia dei dati e li invia ancora. Potrebbe essere necessario modificare le impostazioni della dimensione del buffer di pv, nce ddper avvicinarsi al meglio le prestazioni pratico.

Se riesci a trovare un software che supporta solo il multicast, sarebbe molto più semplice (e probabilmente un po 'più veloce)! Ma quanto sopra è il tipo di soluzione confusa che potrei essere abbastanza sciocca da provare ...

Modifica ancora

Un altro pensiero. Se l'immagine dell'unità si comprime bene (cosa che farà se grossi pezzi sono pieni di zeri) la larghezza di banda in uscita della macchina di origine non deve essere un problema anche se si invia a molte destinazioni contemporaneamente. Basta comprimere prima l'immagine, trasmetterla ovunque usando tee+ nce decomprimere sulle destinazioni (rete-> nc-> decomprimere-> dd-> disco).


Grazie per la spiegazione approfondita del processo. È stato davvero utile Sto esplorando le opzioni di clonazione di rete in questo momento (usando il multicast) e, se fallisce, esplorerò ancora questo vettore DD.
Mr.B

Non hai detto che le unità erano collegate a computer diversi ... questo rende le cose completamente diverse!
marcusw,

Questo si avvicina più o meno alla duplicazione del disco locale sia alla rete locale sia alla rete di computer. Grazie per la spiegazione approfondita!
sig.

Per le opzioni di clonazione di rete basate su Linux, ti consigliamo di prendere in considerazione Clonezilla. Può clonare tramite multicast e diverse opzioni di clonazione locale tra cui DD.
user35060,

5

Prima risposta su google suggerita (su un sistema Linux) dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde):, dove / dev / sdb è il disco rigido che si desidera clonare e / dev / sdc, / dev / sdb e / dev / sde sono unità su cui clonare (è possibile aggiungi quanti più di questi vuoi, solo copypaste). Un LiveCD dovrebbe farlo e ricordati di stare attento con le tue lettere di unità!


1
Vero. Ho fatto alcune ricerche prima di porre questa domanda, ma ero interessato a sentire le esperienze di altre persone. DD è una piccola utilissima utilità, ma: 1) manca di conoscenza del contenuto effettivo dei dati (copierà anche spazio vuoto, settore per settore) e 2) qualcuno ha segnalato problemi di prestazioni quando si fa il clone su più di un'unità in questo modo. Altre idee?
sig.

"[...] dove / dev / sdb è il disco rigido che si desidera clonare e / dev / sdc, / dev / sdb e / dev / sde sono unità da clonare su [...]" ---> "[...] e ricorda di stare attento con le tue lettere di unità!" : DI Accetto !!!
dag729,

1
@ mr.b: 1) Nella mia mente, una copia bit per bit è meglio che prendere scorciatoie potenzialmente pericolose. 2) Meh, il modo migliore che mi viene in mente è quello di pasticciare con la fonte di dd per farla copiare in più di una posizione contemporaneamente, ma sarebbe più veloce semplicemente copiare la via lenta.
marcusw,

Sei sicuro di of=-? -Per me, crea semplicemente un file di output anziché inviarlo a stdout. Questo può essere risolto semplicemente tralasciando l' ofopzione.
da

L'uso di "tee" in questo modo non funzionerà. Si prega di consultare: joshhead.wordpress.com/2011/08/04/…
user35060,

2

Tutto quello che so è che ci sono alcune cose chiamate duplicatori del disco rigido. Si tratta di dispositivi speciali per clonare (duplicare) HD su più unità contemporaneamente. Forse questo articolo ti aiuta.


Sì, sono a conoscenza dell'esistenza di questi dispositivi; tuttavia, sono tutt'altro che economici, soprattutto nel mio caso a budget zero :( Grazie per averli menzionati, però.
Mr

1
Sebbene non sia completamente a costo zero, se hai una macchina di riserva (con un alimentatore decente) che potresti comandare e puoi permetterti un paio di controller SATA economici (ce n'è uno a due porte nella mia macchina domestica che costa un tenner) potresti creare la tua semplice macchina per la duplicazione e utilizzare il metodo dd + tee o altri software se ne trovi alcuni che supportano "leggere da una singola fonte, scrivere a molti" in modo efficiente.
David Spillett,

(Questo è quello che pensavo stavi cercando di fare nella mia risposta iniziale.)
David Spillett,

1

Poiché nessuno lo ha ancora menzionato, menzionerò Clonezilla e la loro Server Edition. (sfortunatamente, non sembra esserci un collegamento diretto ad esso, ma puoi trovare "Server Edition" nel menu di navigazione a sinistra del sito ...)

Ho avuto molta fortuna con Clonezilla Live Edition ma non ho ancora provato Server Edition. Sembra piuttosto lucido però.


In secondo luogo Clonezilla come quella che sembra essere una buona soluzione per te in base al feedback che hai fornito.
user35060,


1

Ho trovato 2 link utili sul web relativi a questo. Uno ha usato dd senza gatto per fare il diskdupe:

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

Questo viene ulteriormente ampliato con un altro collegamento per mostrare un indicatore di progresso:

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


0

Volevo espandere la risposta di David

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

L' drive.imagepuò effettivamente essere un altro dispositivo, ad esempio/dev/sde

In secondo luogo, il ddcomando funzionerà più velocemente con un'impostazione adeguata bs. Ho usato bs=64ke visto un aumento della velocità di 6 volte per la copia di una partizione da 40 Gig, da 1 ora a 10 minuti.

Quindi il comando finale sarà simile al seguente:

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

Se l'origine è un'unità anziché un file, sarà simile al seguente:

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd


0

La duplicazione parallela del disco rigido è un'attività comune nella medicina legale. dc3dd( man page ) è uno strumento dedicato che consente la copia parallela di una singola sorgente verso più destinazioni e funziona come UNIX dd, con più of=opzioni consentite.

È anche possibile abilitare l'hash del volume di origine e delle copie per verificarne l'integrità.

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.