Lieferung frei Haus

Das Hilfsprogramm »netcat« kann beliebige Daten via TCP über das Netz sowohl senden, als auch empfangen. In diesem Fall lässt man es zunächst auf dem Backupserver am Port »9000« nach ankommenden Daten lauschen (Parameter »-l« ):

netcat -l -p 9000 | dd of=meinimage.img

Alle eingehenden Bytes wandern anschließend über die Pipe direkt an »dd« , das sie wiederum in die Datei »meinimage.img« schiebt (ohne den Parameter »if« verwendet »dd« die Standardeingabe, die hier »netcat« mit immer neuen Daten füttert). Um über das Netz eine Partition zu klonen, verwenden Sie anstelle von »meinimage.img« die entsprechende Gerätedatei:

netcat -l -p 9000 | dd of=/dev/hda1

Auf dem Client starten Sie jetzt wie gewohnt »dd« , schieben dessen gelesene Daten jedoch diesmal über eine Pipe an den Befehl »netcat« , der sie wiederum in Richtung Backup-Server schickt:

dd if=/dev/hda1 | netcat 192.168.2.101 9000

Die Rücksicherung des erstellten Image verläuft genau umgekehrt: Zunächst starten Sie auf dem Client

netcat -l -p 9000 | dd of=/dev/hda1

und lassen dann den Backup-Server die Daten zurücksenden:

dd if=meinimage.img | netcat 192.168.2.150 9000

Pferdefüße

Eine schnelle, einfache Backup-Methode, könnte man meinen. Leider hat sie einen großen Haken: »dd« ist extrem dumm. So liest es die gesamte Partition stupide Byte für Byte aus. Folglich ist die Datei »meinimage.img« genau so groß, wie die zu sichernde Partition, selbst wenn diese nur zu einem kleinen Teil mit Daten gefüllt ist. Aus dem gleichen Grund braucht das Image eine quälend lange Zeitspanne, um sich komplett durch das Netzwerk zu quetschen. Etwas Linderung verschafft die Zwischenschaltung eines Packprogramms, wie beispielsweise »gzip« :

dd of=/dev/hda1 | gzip -c | netcat 192.168.2.101 9000

Bei einer späteren Rücksicherung entpackt man die Daten kurz bevor sie auf der Platte landen:

netcat -l -p 9000 | gzip -d | dd of=/dev/hda1

Dies verhindert aber immer noch nicht, dass auch die ungenutzten Teile einer Partition über den Äther wandern. So entstehen selbst mit Kompression schnell Schnappschüsse von über 4 GByte. Einige ältere Dateisysteme brechen unter derart große Lasten schlichtweg zusammen. Hierzu zählen beispielsweise der Oldtimer FAT32 oder Ext2 ohne Large File Support. Möchte man auf ihnen das Image ablegen, muss man es noch während der Sicherung in kleinere Happen aufspalten. Hierbei hilft das Programm »split« :

dd if=/dev/hda1 | gzip -c | split -b600m - meinimage.img

In diesem Fall entstehen 600 MByte große Teile (»-b600m« ). Das Zurückschreiben erfolgt dann mit der Hilfe von »cat« , das die Einzelteile wieder zusammensetzt:

cat meinimage.img* | gzip -d | dd of=/dev/hda1

Die Dummheit von »dd« geht aber noch weiter: Wenn es eine Partition zurücksichert, schreibt es genau so viele Bytes auf die Platte, wie »meinimage.img« umfasst. Sollte die Zielpartition nicht exakt die gleiche Größe aufweisen, überschreibt »dd« entweder gnadenlos die nachfolgende Partition oder verschwendet überschüssigen Plattenplatz. Daraus folgt unmittelbar ein weiterer Nachteil: Tippfehler sind tödlich. Vertauscht man beispielsweise die Parameter hinter »if=« und »of=« , ist nach einem Druck auf die Eingabetaste zumindest eine der in der Nähe befindlichen Festplatten reif für die Mülltonne.

Last but not least bricht »dd« den Lesevorgang einfach ab, wenn es auf defekte Sektoren trifft. Für solche Fälle steht glücklicherweise sein Bruder »dd_rescue« [1] bereit, der eigens für die Datenrettung entwickelt wurde und im Wesentlichen genau so funktioniert wie »dd« .

Bei so vielen Nachteilen verwundert es schon fast, dass ein extrem guter Grund für den Einsatz von »dd« spricht: Es sichert die Partition mit Haut und Haaren, ohne sich um das Dateisystem zu scheren. Egal was für ein Exot auf der Platte lungert, »dd« sichert und restauriert ihn ohne zu murren.

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019