Wieder eine tolle Aufgabe, die in Linux mit Leichtigkeit zu erledigen ist.
Will man eine Partition mit „dd“ kopieren (bit für bit spiegeln), dann geht es auf die folgende Art und Weise:
# dd if=/dev/sda1 of=/def/sdb1
oder für die ganze Festplatte:
# dd if=/dev/sda of=/def/sdb
Der Nachteil liegt darin, dass man keinen Fortschritt sieht. Dafür habe ich aber ein paar Vorschläge (buffer installieren: aptitude install buffer):
# dd if=/dev/sda1 | buffer -s 64k -S 10m | dd of=/dev/sdb1
oder
# dd if=/dev/sda1 | pv | dd of=/dev/sdb1
Dafür muss man aber pv installieren(unter Debian: apt-get install pv).
Das Gleiche geht natürlich auch in ein Image(mit Anzeige):
# dd if=/dev/sda1 | buffer -s 64k -S 10m > image
oder mit dem Tool „dd_rescue“ falls verfügbar.
Oder das ganze mal verpackt:
# dd if=/dev/sda1 | buffer -s 64k -S 10m | gzip -c > image.gz
Um das ganze über Netzwerk zu betreiben stehen folgende Möglichkeiten zur Verfügung:
In ein Image:
# dd if=/dev/sda1 | pv | ssh user@host „cat > ~/image“
oder mit „buffer“:
# dd if=/dev/sda1 | buffer -s 64k -S 10m | ssh user@host „cat > ~/image“
oder auch mal mit Verpacken:
# dd if=/dev/sda1 | pv| gzip -c | ssh user@host „cat > ~/image.gz“
oder mit „buffer“:
# dd if=/dev/sda1 | buffer -s 64k -S 10m | gzip -c | ssh user@host „cat > ~/image.gz“
Um die Images auf eine Partition einzuspielen tut man das Folgende:
# dd if=image of=/dev/sdb1
oder mit Anzeige:
# dd if=image | pv | dd of=/dev/sdb1
oder
# dd if=image | buffer -s 64k -S 10m | dd of=/dev/sdb1
Natürlich kann man das verpackte Image auch entpacken:
# gunzip -c image.gz | pv | dd of=/dev/sdb1
oder
# gunzip -c image.gz | buffer -s 64k -S 10m | dd of=/dev/sdb1
Oder direkt auf die Partition schreiben mit(benötigt root-Rechte):
# dd if=/dev/sda1 | pv | ssh root@host „dd of=/dev/sdb1“
oder mit „buffer“ (muss vorher mit „aptitude install buffer“ installiert werden):
# dd if=/dev/sda1 | buffer -s 64k -S 10m | ssh root@host „dd of=/dev/sdb1“
Falls du noch ein paar hilfreiche Empfehlungen hast oder irgendwas falsch sein sollte, dann melde dich bitte! Es sind bereits einige Kommentare zu dem Thema eingegangen und dafür danke ich den Schreibern.
Konstantin
Vielen Dank fuer die Tips !
Vielleicht noch ein kleiner Hinweis. Das „buffer“ command war auf meiner Debian Maschine nicht da, ich musste noch
apt-get install buffer
sagen.
Peter
danke, ich nehme diese seite als referenz auf 😉
bzgl. der übertragung des dd-images per ssh über das netzwerk wär es escht nett zu wissen, wie ich die gegenseite präparieren muss, damit der datenstrom auch angenommen wird.
gruss
s
Hallo sbecker,
was meinst du mit „preparieren“. der Befehl in den Ausführungszeichen wird auf der Remotemaschine ausgeführt. Als Beispiel wäre „dd of=image.iso“ dann den geschickten Inhalt in die Datei „image.iso“ schreiben oder „dd of=/dev/sda1“ z.B. direkt auf die Festplatte.
Gruß, Konstantin
Kleiner Auszug aus „man dd“ bzgl der Fortschrittsanzeige:
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; sleep 1; kill $pid
18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
Hallo Mario,
Danke für die Information. Viele Wege führen nach Rom. 🙂
Gruß, Konstantin
Oft erfolgt ein Zurückspielen des Images mit Hilfe einer Linux-Live-CD aus. Da dort meist kein sshd läuft, können die o.g. Befehle nicht benutzt werden. Hiermit klappt es:
ssh user@host „cat /path/to/file/image.gz“ | gzip -d -c | buffer -s 64k -S 10m | dd of=/dev/sdb
super blog Konstantin,
ich frage mich immer ob beim zurück spielen
des images die partition _genau: so groß sein muss oder auch größer sein darf wie die orginal partition?
danke
Hallo Marc,
Spielst du eine Partition zurück (z.B. /dev/sda1), dann wird die Partitionstabelle von der Festplatte (hier /dev/sda) nicht mitgeschrieben. Die Partitionsgröße (Eigenschaften einer Partition) werden nicht angefasst. Die Partition muss gleich oder größer sein. Ist sie größer, so kannst du mit den fs-tools (file system tools das Dateisystem auf die Partitionsgröße vergrößern. Das tool heißt „resize2fs“, aber sei damit vorsichtig und Datensicherung vorher nicht vergessen!
Spielst du eine Festplatte zurück (z.B /dev/sda), so wird die Partitionstabelle mit kopiert und damit auch die Aufteilung der Partitionen. Hier wird der alte Inhalte gnadenlos mit neuem Inhalt überschrieben.
Bei „dd“ musst du mind. 3 Mal ganz genau auf den Befehl schauen, da es den Inhalt des Images oder der alten Festplatte nicht überprüft und das Ziellaufwerk oder Partition gnadenlos überschreibt.
Gruß, Konstantin
super Konstantin
ich arbeite schon lange mit Linux, aber diese Tipps waren heute Goldwert. Danke
Hallo,
ich habe ein großes Raid, bei dem das Dateisystem gecrashed ist. Ich hab einen neuen Serveraufgebaut und möchter nun ein dd über nfs machen. Aber das bekomme ich nur als image hin. Ich hab in der Größe aber nur diese Systeme und kann daher schlecht ein weiteres Aufsetzen, um dann das image zurück zu spielen. Bekommt man das über NFS auch ohne das Image hin? (Das alte System kann ich nicht mehr nutzen, da mehrere Platten zu viele defekte haben.)
Danke und Gruß
Viper
Hallo Viper,
sei mir nicht böse, aber versuch mal alles über ssh, wie ich es oben geschrieben habe.
Gruß, Konstantin
grmbl
Das scheint ech t hinüber zu sein. Mir springen die Platten beim dd aus dem Raid-Verbund.
Das muss ich wohl mit jeder Platte einzeln machen und dann dann den Verbund mit den neuen Platten wiederherstellen. 🙁
Hallo, ich fände noch eine Bemerkung zum Parameter bs hilfreich, denn der wird meines Wissens meistens mit dd zur Beschleunigung benutzt.
Hallo.
Vielen Dank für die tolle Befehlsammlung.
Im Moment bin ich noch auf der Suche nach einer Möglichkeit, dass der SSH-SERVER auf der Maschine läuft, von der das Backup gemacht werden soll und das ganze vom SSH-Client aus initiiert wird. Am besten natürlich ebenfalls mit Fortschrittsanzeige (-: .
Über Tips würde ich mich freuen.
Ansonsten aber auf jeden Fall nochmals vielen Dank für den Artikel.
Viele Grüße
mrtest
Das kannst du mit sshfs machen. Das bedeutet du mountest das Dateisystem vom Server auf dem Client und machst dann die Sicherung.