Vollständiges Sichern einer ganzen Platte
Aus DebianforumWiki
| |
Review: Dieser Artikel ist für das Review freigegeben.
|
Inhaltsverzeichnis |
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
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.
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.
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
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:
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
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 weiterzubetreiben.
- Aber Achtung
- 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
pv integriert.)
Noch ein Beispiel mit
bzib2 oder
pbzip2 in der Pipe:
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.
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.
- Tipp
- Anstelle von /dev/sda kann man auch nur ein 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
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:
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
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.
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
gzip und
bzip2 lässt sich das wie gewöhnt erledigen. Um die Komprimierungszeit auf einem Multiprozessorsystem zu verkürzen, bietet sich
pbzip2 an, welches diese effektiv nutzt. Aus einem ca. 3 GB großen Abbild wird z.B. (abhängig vom Inhalt) ein 1,3 GB großes.
root@debian:~$ ls -l sda.img.bz2
root@debian:~$ -rw-r--r-- 1 root root 1,3G 28. Okt 00:47 sda.img.bz2
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:~$ rm /media/Daten/nullfile
Alternativ kann
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:
57.9%
12684/11166882/39072080