Klonen eines einzelnen Laufwerks auf mehrere Laufwerke gleichzeitig


11

Ich suche nach einer Möglichkeit, ein einzelnes Laufwerk auf mehrere Laufwerke gleichzeitig zu klonen.

Ich habe System-Images auf 1-TB-Datenträgern vorbereitet, und es dauert fast 2 Stunden, um einen Datenträger auf einen anderen zu klonen, und dann steigt der Wert exponentiell an, um beispielsweise 30 Datenträger zu klonen.

Wenn es möglich wäre, eine Festplatte auf mehr als ein Ziel zu klonen, würde dies den gesamten Vorgang erheblich vereinfachen.

Gibt es auch etwas, das diese Art von Operation verhindert? Ich meine, gibt es einen besonderen Grund, warum jede mir bekannte Disk-Cloning-Software nur ein einziges Ziellaufwerk unterstützt?

Vielen Dank!

Antworten:


18

Sie können bashs "process substitution" zusammen mit dem tee-Befehl verwenden, um dies zu tun:

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

oder aus Gründen der Übersichtlichkeit (auf Kosten einer geringen Effizienz) können Sie die letzte machen dd benenne dich genauso wie die anderen und sende die stdout von tee nach / dev / null:

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

und wenn Sie es installiert haben, können Sie verwenden Pipe Viewer anstatt cat um eine nützliche Fortschrittsanzeige zu erhalten:

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

Dadurch wird das Quellimage nur einmal gelesen, sodass das Quelllaufwerk einem starken Druck ausgesetzt ist. Dies ist wahrscheinlich der Grund, warum Sie eine exponentielle Verlangsamung feststellen, wenn Sie versuchen, das Image mehrmals mit anderen Methoden zu kopieren. Verwenden tee Wie oben sollten die Prozesse mit der Geschwindigkeit des langsamsten Ziellaufwerks ausgeführt werden.

Wenn die Ziellaufwerke über USB verbunden sind, beachten Sie, dass sie möglicherweise alle die Busbandbreite gemeinsam nutzen, sodass das Schreiben vieler paralleler Laufwerke möglicherweise nicht schneller ist als das sequentielle Schreiben, da der USB-Bus zum Engpass und nicht zum Quell- oder Ziellaufwerk wird.

In den obigen Ausführungen wird davon ausgegangen, dass Sie Linux oder ein ähnliches Produkt verwenden (es sollte auch unter OSX funktionieren, obwohl die Gerätenamen möglicherweise unterschiedlich sind). Wenn Sie Windows oder etwas anderes verwenden, benötigen Sie eine andere Lösung.

Bearbeiten

Imaging über das Netzwerk hat ein ähnliches Problem wie das Imaging vieler Laufwerke über USB - der Transportkanal wird zum Engpass anstelle der Laufwerke - es sei denn, die von Ihnen verwendete Software unterstützt irgendeine Form von Broadcast- oder Multicast-Übertragung.

Für die dd Methode könnten Sie wahrscheinlich verketten netcat + tee + dd Prozesse auf jeder Maschine wie folgt:

  1. Quellmaschine cat / pv / dd s die Daten durch nc zum Zielrechner 1.
  2. Zielmaschine 1 hat nc Hören Sie auf die Daten von der Quellmaschine und leiten Sie sie weiter tee was wiederum sendet es an dd (und so auf die Festplatte) und eine andere nc Prozess, der zum Zielcomputer 2 sendet.
  3. Zielmaschine 2 hat nc Abhören der Daten von der Zielmaschine 1 und Weiterleiten derselben tee was wiederum sendet es an dd (und so auf die Festplatte) und eine andere nc Prozess, der an den Zielcomputer 3 sendet.
  4. und so weiter bis zur letzten Maschine, die gerade hat nc die Daten von der vorherigen Maschine aufnehmen und über auf die Festplatte senden dd.

Auf diese Weise nutzen Sie möglicherweise Ihre gesamte Netzwerkbandbreite, vorausgesetzt, Sie haben mit Ihrem Switch und Ihren Netzwerkkarten eine Vollduplex-Verbindung ausgehandelt. Anstatt dass der Quellcomputer 10 Kopien der Daten sendet (unter der Annahme von 10 Zielcomputern), wird jeder auf 1/10 der ausgehenden Bandbreite begrenzt, die er nur sendet. 1. Jeder Zielcomputer nimmt eine Kopie der Daten und sendet sie nochmal. Möglicherweise müssen Sie die Einstellungen für die Puffergröße von anpassen pv, nc und dd um der besten praktischen Leistung näher zu kommen.

Wenn Sie eine Software finden können, die nur Multicast unterstützt, wäre dies der Fall viel einfacher (und wahrscheinlich etwas schneller)! Aber das Obige ist die Art von Hacky-Lösung, für die ich vielleicht dumm genug bin, es zu versuchen ...

Erneut bearbeiten

Ein anderer Gedanke. Wenn das Abbild des Laufwerks gut komprimiert wird (was der Fall ist, wenn große Teile mit Nullen gefüllt sind), muss die ausgehende Bandbreite des Quellcomputers kein Problem darstellen, auch wenn an viele Ziele gleichzeitig gesendet wird. Komprimieren Sie einfach zuerst das Bild und übertragen Sie es mit an jeden Ort tee + ncund dekomprimieren Sie die Ziele (Netzwerk- & gt; nc - & gt; Dekomprimierer- & gt; dd - & gt; Festplatte).


Vielen Dank für die ausführliche Erklärung des Vorgangs. Es war sehr hilfreich. Ich untersuche gerade die Optionen für das Klonen von Netzwerken (mithilfe von Multicast). Wenn dies fehlschlägt, werde ich diesen DD-Vektor weiter untersuchen.
mr.b

Sie haben nicht gesagt, dass die Laufwerke an verschiedene Computer angeschlossen sind ... das macht die Dinge völlig anders!
marcusw

Dies kommt sowohl dem lokalen Computer als auch dem Netzwerk von Computern am nächsten, bei denen eine bis mehrere Datenträger gleichzeitig dupliziert werden. Vielen Dank für die ausführliche Erklärung!
mr.b

Für Netzwerk-Klonoptionen, die auf Linux basieren, sollten Sie Clonezilla in Betracht ziehen. Es kann sowohl über Multicast als auch über verschiedene lokale Klonoptionen, einschließlich DD, geklont werden.
user35060

5

Erste Antwort auf Google vorgeschlagen (auf einem Linux-System): dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde), wobei / dev / sdb die Festplatte ist, auf die Sie klonen möchten, und / dev / sdc, / dev / sdb und / dev / sde Laufwerke sind, auf die Sie klonen möchten (Sie können so viele davon hinzufügen, wie Sie möchten, nur copypaste ). Eine Live-CD sollte es tun, und denken Sie daran, mit Ihren Laufwerksbuchstaben vorsichtig zu sein!


1
Wahr. Bevor ich diese Frage stellte, habe ich einige Nachforschungen angestellt, aber ich war daran interessiert, die Erfahrungen anderer zu hören. DD ist ein sehr kleines Hilfsprogramm, aber: 1) es ist der tatsächliche Dateninhalt nicht bekannt (es kopiert auch den leeren Speicherplatz Sektor für Sektor), und 2) jemand hat Leistungsprobleme gemeldet, wenn auf mehr als einem Laufwerk geklont wird auf diese Weise. Noch mehr Ideen?
mr.b

"[...] wobei / dev / sdb die zu klonende Festplatte ist und / dev / sdc, / dev / sdb und / dev / sde die zu klonenden Laufwerke sind" --- & gt ; "[...] und denken Sie daran, vorsichtig mit Ihren Laufwerksbuchstaben umzugehen!" : D Ich stimme zu !!!
dag729

1
@ mr.b: 1) In meinen Augen ist eine Bit-für-Bit-Kopie besser als potenziell gefährliche Verknüpfungen. 2) Meh, der beste Weg, den ich mir vorstellen kann, ist, mit der Quelle von dd herumzuspielen, um es gleichzeitig an mehr als einen Ort kopieren zu lassen, aber es wäre schneller, nur den langsamen Weg zu kopieren.
marcusw

Sind Sie sicher über die of=-? Das schafft eben eine - Ausgabedatei, anstatt für mich auf stdout auszugeben. Dies kann gelöst werden, indem einfach das weggelassen wird of Möglichkeit.
therefromhere

Die Verwendung von "tee" auf diese Weise wird nicht funktionieren. Bitte sehen Sie: joshhead.wordpress.com/2011/08/04/…
user35060

2

Ich weiß nur, dass es einige Dinge gibt, die als Festplatten-Duplikatoren bezeichnet werden. Hierbei handelt es sich um spezielle Geräte zum gleichzeitigen Klonen (Duplizieren) von Festplatten auf mehrere Laufwerke. Könnte sein Dieser Beitrag hilft dir.


Ja, ich bin mir der Existenz dieser Geräte bewusst. Sie sind jedoch alles andere als billig, insbesondere in meinem Fall mit Null-Budget :( Vielen Dank, dass Sie sie erwähnt haben.
mr.b

1
Wenn Sie eine Ersatzmaschine (mit einem anständigen Netzteil) haben, die Sie sich leisten können und ein paar billige SATA-Controller leisten können (es gibt einen Zwei-Port-Controller in meiner Heimmaschine, der einen Zehner kostet) Sie könnten Ihr eigenes einfaches Vervielfältigungsgerät erstellen und die dd + tee-Methode oder eine andere Software verwenden, wenn Sie einige finden, die das effiziente "Lesen aus einer Quelle, Schreiben in viele" unterstützen.
David Spillett

(Dies ist, was ich angenommen habe, dass Sie versucht haben, in meiner ersten Antwort zu tun.)
David Spillett

1

Da es noch niemand erwähnt hat, werde ich es erwähnen Clonezilla und ihre Server Edition. (Leider scheint es keinen direkten Link zu geben, aber Sie finden "Server Edition" im linken Navigationsmenü der Site ...)

Ich hatte großes Glück mit der Clonezilla Live Edition, muss aber noch die Server Edition ausprobieren. Sieht aber ziemlich schick aus.


Ich werde Clonezilla als eine scheinbar gute Lösung für Sie einstufen, basierend auf dem Feedback, das Sie uns gegeben haben.
user35060

1

Wenn Sie Mac OS X verwenden, ist dies integriert. Auf dem Computer, auf dem Sie das Image bereitstellen, starten Sie eine Multicast-ASR-Sitzung. Starten Sie von den Clients aus die Startdiskette, öffnen Sie das Terminal und stellen Sie eine Verbindung zum ASR-Multicast-Stream her. Kostenlos.

Einzelheiten: http://www.bombich.com/mactips/multicast.html


1

Ich habe 2 nützliche Links im Web gefunden, die sich darauf beziehen. Man benutzte dd without cat, um das Disk-Duplikat zu machen:

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

Dies wird mit einem weiteren Link erweitert, um eine Fortschrittsanzeige anzuzeigen:

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

Ich wollte auf Davids Antwort näher eingehen

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

Das drive.image kann eigentlich ein anderes Gerät sein, wie /dev/sde

Zweitens die dd Befehl wird Größen schneller mit einem richtigen arbeiten bs Rahmen. ich benutzte bs=64k und sah eine 6-fache Geschwindigkeit für das Kopieren einer 40-Gig-Partition, von 1 Stunde auf 10 Minuten.

Der endgültige Befehl sieht also so aus:

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

Wenn Ihre Quelle ein Laufwerk anstelle einer Datei ist, sieht es folgendermaßen aus:

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

Parallele Duplizierung von Festplatten ist eine häufige Aufgabe in der Computerforensik. dc3dd ( Manpage ) ist ein spezielles Tool, das das parallele Kopieren einer einzelnen Quelle auf mehrere Ziele ermöglicht und wie UNIX funktioniert ddmit mehreren of= Optionen erlaubt.

Es ist auch möglich, das Hashing des Quellvolumes und der Kopien zu aktivieren, um deren Integrität zu überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.