Mit dem Tool-Gespann dd und dd_rescue sichern Sie komplette Partitionen und stellen sie schnell und bequem wieder her. Auch Daten von bereits defekten Festplatten können Sie damit noch retten.
Wenn ein von Ihnen liebevoll konfiguriertes System auf dem Rechner nicht mehr starten will – egal ob Windows oder Linux – ist guter Rat teuer. Meist lassen sich persönliche Daten noch retten, die Neu-Installation kostet allerdings viel Zeit. Mit dem Konsolen-Tool dd können Sie diesem Fall vorbeugen: Klonen Sie Ihre Systempartitionen dann, wenn alles korrekt funktioniert und eingerichtet ist. Bei Bedarf stellen Sie sie schnell wieder her oder ziehen damit das System auf neuere, größere Festplatten um. Ist Ihre Festplatte dabei, sich ganz zu verabschieden, etwa weil zu viele defekte Sektoren einen sauberen Start verhindern, hilft Ihnen das Kommandozeilenwerkzeug dd_rescue weiter.
Backup leicht gemacht
Das Tool dd (Disk Dump) ist eines der ältesten Linux-Tools.
Es kopiert Datenträger Sektor für Sektor, unabhängig von dem
darüberliegenden Dateisystem und den darauf befindlichen Daten. Es
eignet sich also vorzüglich, um Backups von Disketten, CD/DVDs,
USB-Sticks oder eben Partitionen und Festplatten zu erstellen.
Backups werden dabei als sogenannte Image-Dateien abgelegt, also
als Dateien, die ein exaktes Abbild des gesicherten Mediums
enthalten. Diese Dateien können Sie dann später mit dem gleichen
Tool auf ein anderes Medium zurückspielen. Unter Linux haben
gesicherte Images einen weiteren Vorteil: Sie können sie direkt in
das Dateisystem einbinden, um auf die enthaltenen Daten
zuzugreifen.
Alternativ verwenden Sie dd, um Inhalte direkt von einer
Festplatte auf eine andere zu übertragen, diese also zu klonen. Ein
weiterer Vorteil: Das Tool „dd“ gibt es in verschiedenen Varianten
auch für Windows. Abgesehen von der Systempartition können Sie also
Backups einzelner Partitionen auch unter Windows erstellen und
wieder einspielen. Alle hier vorgestellten Tools und Befehle
funktionieren mit dem Live-System Systemrescue-CD.
Klonen mit dd
Um eine Festplatte zu klonen, müssen Sie ein paar Dinge
beachten: Weder der Quell-Datenträger noch der Ziel-Datenträger
dürfen eingebunden (gemountet) sein, denn zwischenzeitliche
Zugriffe verhindern eine komplette Spiegelung. Sollten Sie also
eine Systemplatte übertragen wollen, müssen Sie auf ein Live-System
zurückgreifen, etwa auf die Systemrescue-CD. Achten Sie
außerdem darauf, dass die Ziel-Festplatte mindestens genau so groß
oder größer ist als das Quell-Laufwerk. Ursprünglich kleinere
Partitionen können Sie später mit einem Partitionierungs-Tool wie
Parted Magic anpassen. Die Ziel-Festplatte muss nicht partitioniert
sein, denn dd überträgt beim Klonen den kompletten
Festplatteninhalt samt Partitionstabelle. Um nun den Inhalt einer
Festplatte auf eine andere zu übertragen verwenden Sie folgenden
Befehl:
dd if=/dev/sda of=/dev/sdb
wobei /dev/sda die zu kopierende Festplatte ist und /dev/sdb
der Ziel-Datenträger. War die ursprüngliche Festplatte bootfähig,
sollten Sie sicherheitshalber zusätzlich den MBR (Master Boot
Record) übertragen. Dazu verwenden Sie ebenfalls dd, allerdings mit
leicht veränderter Syntax:
dd if=/dev/sda of=/dev/sdb bs=512count=1
Mit dem Parameter „bs“ legen Sie die Größe der Blöcke, mit „
count“ die Anzahl der zu kopieren Blöcke fest, hier also ein Block
mit der Größe von 512 Bytes.
Gesamte Festplatte sichern
Möchten Sie ein Backup einer bestehenden Festplatte oder
Partition in einer Image-
Datei erstellen, benötigen Sie dafür natürlich genügend
Speicherplatz auf einer weiteren Festplatte, um das Festplatten-
oder Partitions-Image darauf unterzubringen. Außerdem muss auf der
Ziel-Festplatte ein Dateisystem eingerichtet sein, das große
Dateien speichern kann, etwa das unter Linux übliche Ext3- oder das
Windows-eigene NTFS-Dateisystem. Binden Sie zunächst die
Zielpartition (hier beispielsweise /dev/sdb1) in das Dateisystem
ein, etwa mit
mount /dev/sdb1 /data1
Den Inhalt einer gesamten Festplatte (hier /dev/sda)
übertragen Sie mit:
dd if=/dev/sda of=/data1/sda.img
Auch hier sollten Sie sicherheitshalber den MBR separat in
einer Datei (hier: sda_mbr.img) sichern:
dd if=/dev/sda of=/data1/sda_mbr.imgbs=512 count=1
Wollen Sie später das gespeicherte Image zurück auf die
ursprüngliche Festplatte übertragen, sollten Sie sie zunächst mit
dd if=/dev/zero of=/dev/sda
leeren. Damit verhindern Sie, dass Reste der ursprünglichen
Dateien dem zurückgespielten Backup in die Quere kommen, etwa wenn
Sie Windows nach einem Virenbefall durch das Backup ersetzen
wollen. Wenn Sie dann wie oben beschrieben die Backup-Partition
erneut mit „mount /dev/sdb1 /data1“ ins System einbinden, können
Sie anschließend mit dem Befehl
dd if=/data1/sda.img of=/dev/sda
das Image (im Beispiel sda.img) auf die Platte (hier:
/dev/sda) zurückspielen. Mit
dd if=/data1/sda_mbr.img of=/dev/sda
machen Sie die Platte wieder bootfähig.
Beachten Sie aber, dass Sie komplette Festplatten-Images
nicht ohne Weiteres in das Dateisystem einbinden können, um auf
einzelne Dateien zuzugreifen. Wie Sie das bewerkstelligen, erfahren
Sie im Kasten „Images einbinden“.
Partitionen sichern
Statt einer ganzen Festplatte können Sie auch nur eine
einzelne Partition sichern. Der Vorteil: Wenn Sie etwa Daten und
System auf unterschiedlichen Partitionen untergebracht haben,
müssen Sie bei Problemen mit dem System nicht die gesamte
Festplatte überschreiben. Sie können dann beispielsweise das
zerschossene System zurückspielen und die Daten, die Sie auf
weiteren Partitionen untergebracht haben, unangetastet lassen.
Einzelne Partitionen können Sie auch ohne großen Aufwand unter
Linux einbinden und dort Dateien einsehen, bearbeiten oder
ersetzen. Mehr dazu erfahren Sie im Kasten „Images einbinden“.
Außerdem sollten Sie die ursprüngliche Partitionstabelle
sichern, vor allem, wenn Sie mehrere Partitionen oder gar
erweiterte Partitionen in logischen Laufwerken untergebracht haben.
Mehr dazu erfahren Sie im Kasten „Partitionstabelle sichern“. Der
eigentliche dd-Befehl zum Sichern einer Partition ist dem oben
vorgestellten ähnlich. Nachdem Sie die Ziel-Festplatte mit „mount
/dev/sdb1 /data1“ eingebunden haben, müssen Sie lediglich die
Gerätebezeichnung der Festplatte durch die der Partition (hier:
/dev/sda1) ersetzen, etwa
dd if=/dev/sda1 of=/data1/sda1.img
Einen Überblick über alle Partitionen auf sämtlichen
Festplatten liefert der Befehl „fdisk -l“.
Mehr Tipps zu dd
Partitionen zurück spielen
Um Partitionen zu rekonstruieren oder auf eine neue
Festplatte zu übertragen, müssen Sie zunächst auf der
Ziel-Festplatte die Partitionstabelle so einrichten, wie sie auf
der ursprünglichen Festplatte war. Die einzelnen Partitionen können
dabei zwar größer sein als zuvor, auf der sicheren Seite sind Sie
aber, wenn Sie zunächst das Backup der ursprünglichen
Partitionstabelle einspielen – wie im Kasten „Partitionstabelle
sichern“ beschrieben. Sie können dann später mit einem
Partitionierungs-Tool die Partitionen vergrößern, falls die
Zielplatte mehr Platz bietet als vorher. Dazu können Sie
beispielsweise das grafische Tool Gparted nutzen,
das etwa die Live-Distribution Parted Magic mitbringt. Formatieren
müssen Sie die Festplatte nicht. Nachdem Sie die Zielplatte mit „
mount /dev/sdb1 /data1“ eingebunden haben, und die
Partitionstabelle wieder hergestellt haben, rekonstruieren Sie eine
Partition mit
dd if=/data1/sda1.img of=/dev/sda1
Tipps zu dd
Das Tool dd hat einen entscheidenden Nachteil: Nach dem Start
bleibt die Bildschirmausgabe leer; erst nach Abschluss des
Kopiervorgangs erhalten Sie ein Zusammenfassung der kopierten
Bytes. Allerdings können Sie anhand der zunehmenden Größe der
Zieldatei den Fortschritt verfolgen. Öffnen Sie dazu ein neues
Terminal-Fenster oder gehen mit <Strg>-<Alt>-<F3>
auf die Konsole, wechseln dort mit „cd /data1“ in das
Zielverzeichnis und geben anschließend den Befehl
watch -n5 ls -al
ein. Der Befehl „watch“ frischt die Ausgabe von „ls -al“ alle
fünf Sekunden auf. Sie können den Kopiervorgang von dd
beschleunigen, indem Sie die Standardblockgröße (Parameter „bs“)
von 512 Bytes erhöhen. Dazu brauchen Sie aber entsprechend mehr
Arbeitsspeicher. Bei mehr als 1 GB installiertem RAM können Sie
obigen Befehl durch folgenden ersetzen:
dd if=/dev/sda1 of=/data1/sda1.imgbs=1024
Unter Umständen lässt sich der Parameter auch auf „2048“
erhöhen. Ist nicht genügend Arbeitsspeicher vorhanden, bricht dd
den Kopiervorgang ab, und Sie müssen mit einem kleineren Wert neu
beginnen.
Images teilen und komprimieren
Wenn Sie mit weniger Platz auskommen müssen, können Sie das
dd-Image an das Komprimierungs-Tool gzip weiterleiten. Dazu
erweitern Sie den Kopierbefehl folgendermaßen.
dd if=/dev/sda1 | gzip > /data1/sda1.img.gz
Zurückspielen können Sie das Image mit
gunzip -c /data1/sda1.img.gz| dd of=/dev/sda1
Wenn Sie ein gesichertes Image so aufteilen möchten, dass Sie
es auf DVDs brennen können, verwenden Sie folgenden Befehl:
dd if=/dev/sda1 | gzip -c | split -b4200m -
/data1/sda1.img.gz.
Vergessen Sie nicht den abschließenden Punkt, denn der Befehl
generiert dann mehrere Dateien mit den Endungen „aa“, „ab“ etc.
Später kopieren Sie alle Dateien von den DVDs wieder auf eine
Partition und entpacken Sie mit:
cat /data1/sda1.img.gz.* | gzip -dc |dd of=/dev/sda1
Beachten sollten Sie bei diesen Befehlen allerdings
Folgendes: Je mehr Befehle Ihre Sicherung durchläuft, desto
fehleranfälliger wird das Backup. Außerdem dauert eine
Sicherung wegen der Komprimierung deutlich länger.
dd_rescue in der Not
Das Tool dd_rescue basiert auf dd, ist allerdings darauf
spezialisiert, Daten von Platten mit defekten Sektoren auszulesen –
etwa wenn die Festplatte langsam den Geist aufgibt und aufgrund
dessen nicht mehr ordnungsgemäß in Windows oder Linux eingebunden
werden kann. dd_rescue liest Daten so lange mit einer Sektorgröße
von 512 Bytes aus, bis es auf einen defekten Sektor trifft. Dann
reduziert es die Blockgröße so weit, bis es alle noch lesbaren
Daten kopiert hat; und fährt dann mit der ursprünglichen Blockgröße
fort. So lange die Festplatte noch einigermaßen intakt ist, stehen
die Chancen gut, dass Sie auf diese Weise Ihre Daten noch retten
können.
Voraussetzung ist, dass das von dd_rescue erstellte Image auf
einer frischen, mit Ext3- oder NTFS-formatierten Festplatte Platz
hat. Außerdem sollten Sie über genügend Platz verfügen, um von dem
gesicherten Image eine weitere Kopie erstellen zu können, von der
Sie dann Ihre Rettungsversuche starten. Wollen Sie eine
NTFS-Partition reparieren, müssen Sie auf eine weitere Festplatte
zurückgreifen, auf die Sie das erstellte Image zurückspielen.
Images von FAT32- oder Ext3-Partitionen können Sie dagegen direkt
mit den entsprechenden Tools unter Linux reparieren, mehr dazu
später.
Daten retten ...
Booten Sie zunächst Ihren Rechner mit der defekten Festplatte
von der CHeft-DVD, und starten Sie Systemrescue-CD. Erstellen Sie
dort ein beschreibbares Verzeichnis, etwa mit
mkdir /data1 && chmod 777 /data1
und binden Sie dort die Ziel-Partition (hier /dev/sdb1)
beispielsweise mit „mount /dev/sdb1 /data1“ ein. Die Rettungsaktion
starten Sie dann mit dem Befehl:
dd_rescue /dev/sda1 /data1/sda1.img
Verfahren Sie ebenso mit allen Partitionen auf der defekten
Platte. Unter Umständen müssen Sie damit rechnen, dass der
Kopiervorgang mehrere Stunden oder mehr als einen Tag dauert.
dd_rescue zeigt Ihnen den Fortschritt der Rettungsaktion an – je
weniger Prozente Sie neben dem Eintrag „err“ sehen, desto
besser.
... und reparieren
Nachdem die Partitionen gesichert und kopiert sind, können
Sie mit der Reparatur beginnen. Für FAT32 und das Linux-übliche
Dateisystem Ext3 bringt Linux die entsprechenden Tools bereits mit.
Ein Image mit FAT32-Dateisystem reparieren Sie mit dem Befehl
fsck.vfat /data1/sda1.img
Ext3-Dateisysteme mit dem Kommando
fsck.ext3 /data1/sda1.img
Danach können Sie die Images wie im Kasten „Images einbinden“
beschrieben in Ihr Linux-System einhängen und Ihre Daten sichern.
Welche Dateisysteme fsck unterstützt, erfahren Sie, wenn Sie „fsck“
an der Konsole eingeben und zweimal <Tab> drücken.
NTFS-Images müssen Sie zunächst auf eine frische, bereits
entsprechend partitionierte Festplatte übertragen, sie dann an
einen funktionierenden Windows-PC anschließen und von dort mit dem
Windows-Befehl „chkdsk“ reparieren.
Partitionstabelle sichern und Images einbinden
Partitionstabelle sichern
Informationen zu primären Partitionen werden im Master Boot
Record (MBR) gespeichert, der auch die Startdateien eines Systems
enthält. Haben Sie lediglich primäre Partitionen auf Ihrer
Festplatte, reicht es, wenn Sie den MBR sichern und später
wiederherstellen, wie im Artikel beschrieben. Enthält Ihre
Festplatte allerdings zusätzlich eine erweiterte Partition mit
logischen Laufwerken, müssen Sie auf das Tool sfdisk (bei dem
Systemrescue-Tool enthalten) zurückgreifen, um die
Partitionstabelle zu sichern. Sichern Sie zunächst wie beschrieben
den MBR. Erstellen Sie anschließend mit dem Befehl
sfdisk -d /dev/sda > backup-sda.sf
ein Backup der erweiterten Partitionstabelle. Das Backup
spielen Sie folgendermaßen wieder ein: Zunächst übertragen Sie wie
beschrieben das Backup des MBR. Anschließend spielen Sie die
erweiterte Partitionstabelle mit
sfdisk /dev/sda < backup-sda.sf
auf die Zielplatte.
Beachten Sie unbedingt die Reihenfolge. Bevor Sie dann das
Backup Ihrer Partitionen einspielen, sollten Sie den Rechner neu
starten.
Images einbinden
Um auf Dateien in gesicherten Partitions-Images zugreifen zu
können, binden Sie diese unter Linux mit Hilfe des Loop-Devices in
das System ein. Dazu dient etwa folgender Befehl:
mount -o loop,ro /data1/sda1.img /data2
Der Befehl bindet das Image im Nur-Lesen-Modus in das
Verzeichnis /data2 ein. Dort können Sie nun auf den Inhalt der
Image-Datei zugreifen. Wenn Sie die Dateien im Image auch verändern
wollen, müssen Sie den Parameter „ro“ samt davor stehendem Komma
einfach weglassen. Dann können Sie die Dateien bearbeiten, als sei
das Image eine normale Festplatte. Änderungen werden sofort
übernommen. Mit „umount /data2“ heben Sie die Einbindung wieder
auf.
Partition aus einem Festplatten-Image einbinden:
Ein wenig komplizierter ist es, wenn Sie eine Partition
einbinden wollen, die in einem kompletten Festplatten-Image
enthalten ist. Dazu müssen Sie zunächst den sogenannten Offset
ermitteln, also den Punkt an dem die Partition im Image beginnt.
Dazu verwenden Sie den Befehl „parted“. Zunächst laden Sie das
Image mit
parted /data1/sda.img
in das Programm. Anschließend wechseln Sie mit „unit“ gefolgt
von <Return> und <B> gefolgt von <Return> in den
Byte-Modus. Tippen Sie „print“ und bestätigen Sie mit
<Return>, dann erhalten Sie die interne Partitionstabelle des
Images. Neben der Partitionsnummer in der Rubrik „Start“ finden Sie
die gewünschte Offset-Nummer. Mit „quit“ verlassen Sie parted
wieder. Nun binden Sie die gewünschte Partition mit folgendem
Befehl ein:
mount -o loop,ro,offset=<Offset-Nummer>/data1/sda.img
/data2
in das Dateisystem ein, den abschließenden Buchstaben „B“
lassen Sie dabei weg.