Vollständiges Sichern einer ganzen Platte

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiGrundsatzfragen ‹ Vollständiges Sichern einer ganzen Platte


Backup von einer lokalen Platte zu einer anderen

Dabei wird eine 1 zu 1 Kopie angefertigt, also inklusive MBR und Partitionstabelle. Mit welcher Schnittstelle die Quell- oder Zielfestplatte angeschlossen ist, spielt nur in Bezug auf die Datenrate eine Rolle.

Backup mit dd

Debianpackage.png dd ist ein Tool, welches sich zum Sichern von Festplatten oder Partitionen eignet.

Es wird angenommen, dass die komplette Festplatte (/dev/sda) zu sichern und unter /mnt/backup eine andere Platte mit genügend freiem Platz eingehangen ist. Die zu sichernde Festplatte sollte Fehlerfrei sein.

root@debian:~# dd if=/dev/sda bs=4K of=/mnt/backup/Sicherung_sda-`date -I`.img

Blockgröße

Die oben gewählte Blockgröße von 4K (4096 Byte) bewirkt, dass Daten mit dieser Byteanzahl auf einmal gelesen und geschrieben werden. Standardmäßig sind 512 Byte Voreinstellung, welche durch internes prefetching der Festplatte eher hinderlich sein können. Um den maximalen Durchsatz zu erreichen, muss die Blockgrößen, ein Vielfaches der physikalischen 512 Byte, experimentell ermittelt werden. Da moderne Festplatten und SSDs 4K große oder größere physikalische Blockgrößen aufweisen, sollte man mit diesem Wert als Minimum starten.

Status

Da GNU dd standardmäßig keine Fortschrittsanzeige bietet, kann man mit einem Trick jedoch den aktuellen Status erfahren. Wenn nicht noch weitere dd-Prozesse laufen, lässt sich dieser in der Konsole ausgeben, wo dd gestartet wurde.

root@debian:~# kill -SIGUSR1 $(pidof dd)

Die dd-Ausgabe sieht dann beispielsweise so aus:

2611645+0 Datensätze ein
2611644+0 Datensätze aus
10697293824 Bytes (11 GB) kopiert, 264,342 s, 40,5 MB/s

Backup mit pv

Debianpackage.png pv ist ein Tool, welches dd bei dieser Aufgabe in einigen Punkten voraus ist.

  • es erkennt/wählt automatisch die passende Blockgröße
  • es bietet eine Fortschrittsanzeigen mit dem aktuellen Datendurchsatz an
  • bei der Angabe der Quell-Dateigröße, errechnet es die voraussichtliche Übertragungsdauer
  • möchte man die Übertragung 'on-the-fly' mit gzip komprimieren, kann man auch zwei pv-Aufrufe in der Pipe haben. Damit sieht man den Durchsatz einmal komprimiert und einmal unkomprimiert.

Ein einfaches Beispiel
Wir nehmen wieder an, dass die komplette erste 250GB große Festplatte (/dev/sda) zu sichern ist und unter /mnt/backup eine andere Platte (oder ein Netzwerkdateisystem) mit genügend freiem Platz eingehangen ist:

root@debian:~# pv -s250GB -cN "sda" /dev/sda > /mnt/backup/VollSicherung_sda-`date -I`.img

Die Ausgabe könnte bei übertragenden 130GB wie folgt aussehen:

 sda: 130GB 0:35:55 [61MB/s] [================>               ] 52% ETA 00:33:48

Wahl des Dateisystems

Wird die Sicherung auf eine lokal angeschlossene Platte durchgeführt, so ist die Wahl des Dateisystems nicht unwichtig. Oft ist es so, dass die Sicherung auf EXT Dateisysteme schneller als auf FAT ist. Sicherungen auf NTFS sind durch den Userspace Treiber ntfs-3g noch um einiges langsamer.

Bei fat32 muss man allerdings an die maximale Dateigröße von 2 GB pro Datei denken und noch split in die Pipe einbauen wenn dies nicht vom Backupprogramm automatisch gemacht wird.

Wenn direkt auf ein anderes Blockgerät (wie Festplatte) geschrieben wird, ist ein Dateisystem natürlich nicht nötig.

Backup über das Netzwerk

Sobald man mehr als einen Rechner im Netz hat, bietet es sich an das Image auf einen anderen Rechner im LAN zu sichern. Nachfolgend einige Beispiele

Backup mit dd über netcat

Hier wird Debianpackage.png netcat-traditional verwendet, um das Image ohne grossen Overhead über das Netzwerk zu transportieren. Am besten geht das, indem man den Clientrechner mit einer LiveCD wie http://grml.org bootet.

Das Paket netcat-traditional ist kompatibel mit dem netcat aus debian/sarge. Man kann damit also auch noch sehr alte Debian-Installationen sichern um sie virtualisiert unter z.B. KVM weiter zu betreiben.

Einfaches Beispiel

Warnung.png Warnung: Der Netzwerkverkehr ist weder verschlüsselt noch mit einem Passwort geschützt.


Auf dem Zielserver muss netcat im listen Modus auf Port 1234 starten und das Image wegschreiben:
(Der Nachteil an dd ist, dass man keine Fortschrittsanzeige bekommt. Daher ist in der Pipe noch ein Debianpackage.png pv integriert.)

user@debian:~$ netcat -l -p 1234 | pv -rtb > Clientimage-`date -I`.dd

Auf dem zu sichernden Client-Rechner kann dann die folgende Zeile abgesetzt werden. Wobei Zielserver ein auflösbarer Name oder die IP-Adresse sein muss.

root@debian:~# dd if=/dev/sda bs=4K | netcat Zielserver 1234

Wenn der Zielserver keine Daten mehr erhält, muss man auf dem Client-Rechner einmal STRG+c drücken. Es fliessen dann abschliessend noch ein paar KB über die Leitung bevor netcat auf dem Zielserver dann das Ende der Übertragung feststellt und eine Zusammenfassung ausspuckt.

Erweitertes Beispiel

Überträgt man das zu sichernde Image über das Internet möchte man die Daten meist verschlüsseln, damit sie niemand mitlesen kann und komprimieren, damit die Übertragung schneller geht. Nebenbei hat man den Effekt, dass das komprimierte Image weniger Platz auf der Festplatte braucht.
Dazu wird einfach Debianpackage.png pigz zur Kompression und Debianpackage.png aespipe zur Verschlüsslung zwischengeschaltet.

Auf dem Rechner auf dem das Image gesichert wird, muss jetzt zusätzlich entschlüsselt werden. (Alternativ könnte man das Image natürlich auch gleich verschlüsselt lassen und erst beim Zurückspielen entschlüsseln. Dazu müsste man sich aber natürlich das Passwort merken...)

user@debian:~$ netcat -l -p 32168 | aespipe -d > Clientimage-`date -I`.dd.gz

Auf dem Client, wo das Image gezogen wird, muss zusätzlich komprimiert und verschlüsselt werden:

root@debian:~# dd if=/dev/sda bs=4K | pigz -2 | aespipe | netcat Zielserver 32168
Tipp
Anstelle von /dev/sda kann man auch nur eine Partition oder einen LVM Logical Volume sichern, z.B. über if=/dev/mapper/vg00-ossp1.

Forensisches Backup

Schlecht lesbare (oder defekte) Datenträger wie CDROMs/DVDs oder Festplatten mit defekten Sektoren bedürfen anderer Tools, um hier das Maximum an Daten zu retten. Normale Werkzeuge wie dd oder pv brechen bei Lesefehlern ab und es ist oft unmöglich eine komplette Kopie zu fertigen. Hierfür gibt es spezielle DD-Varianten oder eigene Entwicklungen, die nicht lesbare Bereiche mit Nullen auffüllen, mehrere Images zusammenfügen, die Image-Dateien automatisch in bestimmte Größen teilen können und noch viel mehr. Es kommt auf die Vollständigkeit der Daten und weniger auf die Geschwindigkeit an. Auf einem solchen Image können dann die Datenrettung versucht werden, ohne das Original zu beeinflussen und so die eigentlichen Daten für immer zu verlieren.

GNU ddrescue

Eine Möglichkeit ist das GNU ddrescue aus dem Debianpackage.png gddrescue Paket. Es versucht trotz Lesefehler so viele Daten wie möglich zu bekommen und füllt fehlende Bereiche mit Nullen auf. Es arbeitet weitgehend automatisch. Die Grundanwendung ist beispielsweise mit folgendem bedient:

root@debian:~# ddrescue -n /dev/sdg /media/Backup/imagefile.img rescue.log

Eine scheinbar defekte Festplatte sdg wird mittels gddrescue in eine Datei geschrieben. Dabei wird ein Logfile rescue.log angelegt, welches bei einem Abbruch den Vorgang an dieser Stelle fortsetzen lässt. Ständig wird der Fortschritt und eine Statistik über Lesefehler, Leseversuche ausgegeben.

Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:    18426 MB,  errsize:       0 B,  current rate:   39518 kB/s
   ipos:    18426 MB,   errors:       0,    average rate:   32750 kB/s
   opos:    18426 MB,     time from last successful read:       0 s

dd_rescue

Debianpackage.png ddrescue ist ein komplett anderes Programm und hat damit wenig mit gddrescue gemein. Im Unterschied kann es die gelesenen Daten allerdings auf die Standardausgabe ausgeben, womit zum Beispiel Sicherungen über das Netzwerk möglich sind.

root@debian:~# dd_rescue /dev/sdg /media/WD-SATA_daten/imagefile.img -l rescue.log

Die Statusanzeige stellt sich so dar:

dd_rescue: (info): ipos:  16711680.0k, opos:  16711680.0k, xferd:  16711680.0k
                   errs:      0, errxfer:         0.0k, succxfer:  16711680.0k
             +curr.rate:    22325kB/s, avg.rate:    22783kB/s, avg.load:  3.8%

Diese Werkzeuge und viele mehr sind im Forensik Wiki aufgeführt und beschrieben.

Komprimierung

Da Festplattenabbilder in der Regel sehr große Dateien erzeugen, kann es schwierig werden, den benötigten Platzt frei zu machen. Da die Dateisysteme der Quellplatte selten voll belegt sind, gibt es freie Bereiche, die das Komprimieren dieser großen Dateien sehr effektiv gestalten.

Mit Debianpackage.png gzip, Debianpackage.png xz Debianpackage.png bzip2 oder Debianpackage.png lzop lässt sich das wie gewöhnt erledigen. Um die Komprimierungszeit auf einem Multiprozessorsystem zu verkürzen, bietet sich die parallel arbeitendnen Alternativen Debianpackage.png pigz, Debianpackage.png pxz oder Debianpackage.png pbzip2 an, welche diese effektiv nutzen.

root@debian:~# gzip sda.img
root@debian:~# ls sda.img.gz
sda.img.gz

Diese Tools lassen sich natürlich in eine Pipe einbauen.

Komprimierungsfaktor maximieren

Um den Komprimierungsfaktor des späteren Abbildes zu maximieren, kann man, wenn möglich, das oder die gemounteten Dateisysteme der Quellfestplatte vorher komplett mit Nullen beschreiben. Das funktioniert, weil gelöschte Dateien nie wirklich gelöscht werden; die Daten bis zum Überschreiben also noch unverändert weiterbestehen (je nach Dateisystem). Mit dd in so ein gemountetes FS (/media/Daten) schreiben und die erzeugte Datei anschließend löschen:

root@debian:~# dd if=/dev/zero of=/media/Daten/nullfile
root@debian:~# rm /media/Daten/nullfile

Alternativ kann Debianpackage.png zerofree verwendet werden, welches auf einem read-only oder ausgehängtem EXT Dateisystem angewendet werden kann. Dafür ist es schneller als dd und läßt image Dateien (z.B. qcow) nicht auf ihre maximale Größe anwachsen. Der Geschwindigkeitsvorteil rührt vom Verständnis von zerofree für EXT2/3 Dateisysteme, es ist deshalb nur für diese geeignet. Nach der Analyse werden also bloß die nötigen Blöcke genullt.

Mit "-v" erhält man eine Fortschrittsanzeige in Prozent, mit "-n" wäre es nur eine Trockenübung:

root@debian:~# zerofree -n /dev/sda1
57.9%
12684/11166882/39072080