Berny’s Knowledgebase > Betriebssysteme > Linux > Festplatten-Image erstellen
Dieser Artikel liegt in zwei Fassungen vor
aktuelle Version
(ausführlicher, Beispiele mit moderneren Medien)
Ich möchte ein Image von der Festplatte meines Rechners erstellen, damit ich diesen später in exakt dem momentanen Zustand wieder herstellen kann. Wie geht das?
Es gibt im Prinzip zwei Möglichkeiten. Entweder man sichert wirklich die komplette Festplatte in ein Image. Dieses kann bei den heutigen Festplattengrößen aber sehr viel Platz verbrauchen. Oder man sicher einfach nur den Boot-Sektor und die System-Platte als Image. Die Daten, die z. B. auf einer Daten-Partition liegen (und sich sowieso häufig ändern) stellt man bei Bedarf aus einer anderen Sicherung (auf Datei-Ebene) wieder her. Beide Versionen werden im folgenden beschrieben.
Die Methoden funktionieren unabhängig davon, welches Betriebssystem auf dem Rechner installiert ist.
Warnung:
Der Umgang mit den hier gezeigten Tools kann bei unsachgemäßer Handhabung sehr schnell sehr viele Daten ins digitale Nirvana befördern. Dazu reicht es unter Umständen schon, bei einem Befehl einfach nur Quelle und Ziel zu verwechseln. Daher bitte…
Ich übernehme keine Haftung für Schäden, die der Leser durch Beachtung oder Nicht-Beachtung dieser Anleitung anrichtet!! |
Benötigt werden
-
Physikalischer Zugriff auf den zu sichernden Rechner
-
ein groß genuges Backup-Medium, z. B.
-
eine USB-Festplatte
-
ein großer USB-Stick oder
-
eine Netzwerkfreigabe auf einem anderen Rechner im Netz, z. B. per NFS, Samba oder eine Windows-Freigabe
-
ein Medium mit einem Linux-Live-System, von dem der zu sichernde Rechner booten kann, z. B.
-
Linux-Live-System auf einem USB-Stick, z. B. ebenfalls grml (von USB) oder Knoppix (siehe dort Abschnitt "Starten von Flash-Disk")
Vorbereitende Arbeiten: Freie Bereiche mit Nullen füllen
Die zu sichernden Festplatten sind heute meist sehr groß. Das zu erstellende Image soll aber trotzdem noch eine handhabbare Größe haben. Daher ist es dringend zu empfehlen, vor der Erstellung des Image alle ungenutzten Bereiche des Filesystems mit Nullen vollzuschreiben. Dies lässt sich hinterher sehr gut komprimieren. Dies kann man entweder tun, so lange das Orginal-Betriebssystem noch läuft (vorausgesetzt man hat unter diesem Betriebssystem ein Tool wie dd zur Verfügung), oder aber auch erst dann, wenn man den Rechner bereits vom Live-System gebootet hat (vorausgesetzt das Live-Linux bringt für die verwendeten Dateisysteme Treiber mit, um diese Read-Write zu mounten - was aber meist kein Problem sein sollte.)
# mkdir /mnt/win95.c # mount /dev/sda1 /win95.c # cd /mnt/win95.c # dd if=/dev/zero bs=1024k count=1024 of=junkfile.001 # dd if=/dev/zero bs=1024k count=1024 of=junkfile.002 # ...
usw., bis die Partition /dev/sda1 voll ist. Danach gleich wieder aufräumen:
# rm -i junkfile.* # umount /mnt/win95.c
Genauso mit allen anderen Filesystemen auf der Festplatte, die später mit im Image landen sollen.
Sofern man noch das Orginal-Betriebssystem gestartet hat, kann man sich das anlegen des Mountpoints, das mounten und unmounten natürlich sparen.
Image erstellen
Spätestens jetzt ist es an der Zeit, das Live-System zu starten. Sofern das Orginal-Betriebssystem sauber heruntergefahren wurde ist durch die Verwendung des Live-Systems sichergestellt, dass die Systemplatte einen konistenten Zustand hat, der später auch sauber wieder herstellen kann und von dem man garantiert auch sauber (d. h. ohne erzwungene Filesystem-Checks) booten kann. Ausserdem stellt das Booten vom Live-System sicher, dass auch wirklich die ganze Systemplatte gesichert werden kann, d. h. dass nicht vom Betriebssystem einzelne Bereiche gesperrt sind.
Jetzt ist das Backup-Medium zu mounten, wir gehen im Folgenden davon aus, dass es unter /mnt/backupdisk/ eingebunden ist.
fdisk -l
zeigt die erkannten Platten-Devices jeweils mit Ihren Partitionen an. Die zu sichernde Platte sollte dabei sein. Wir nehmen im weiteren mal an, es sei /dev/sda
df -h
verrät, welche Dateisysteme gerade gemountet sind. Partitionen der zu sichernden Platte sollten nicht dabei sein. Ggf. hilft ein umount.
sichern der kompletten Festplatte
dd if=/dev/sda bs=4k | gzip -c > /mnt/backupdisk/hdimage.gz
oder alternativ:
sichern der wichtigsten Teile
(Partitionstabelle, Master-Boot-Record (MBR), System-Partition, ggf. /boot Partition)
fdisk -l /dev/sda > /mnt/backupdisk/fdisk.txt
alternativ für Menschen, die sfdisk lieber mögen
sfdisk -d /dev/sda > /mnt/backupdisk/sfdisk.out
dazu Offset von sda1 bestimmen:
cfdisk -Ps /dev/sda
MBR sichern:
dd if=/dev/sda bs=512 count=63 of=/mnt/backupdisk/MBR.63
(Im Beispiel gehe ich mal von der häufigen Situation aus, dass /dev/sda1 mit einem Offset von 63 Sektoren losgeht, das ist gerade eine "Spur")
System-Partition (aka "root-Partition") sichern:
dd if=/dev/sda1 bs=4k | gzip -c > /mnt/backupdisk/hdimage.sda1.gz
(Unter der Annahme, dass /dev/sda1 die System-Partition sei.)
Falls /boot Partition separat vorhanden, auch diese genauso sichern (unter Verwendung des betreffenden Device)
sichern auf einen anderen Rechner
Wenn auf lokalen Datenträgern nicht genügend Plattenplatz für das Image zur Verfügung steht, kann man es auch direkt über SSH auf einen anderen Rechner im Netzwerk schieben:
dd if=/dev/sda bs=4k | gzip -c | ssh dunno.example.com 'dd of=/path/to/hdimage.gz'
ggf. Image vergleichen
(ganz harte Jungs machen sowas natürlich nicht)
Immer noch im gestarteten Live-System und mit gemountetem Backupmedium:
Bei Sicherung der kompletten Festplatte
gzip -cd /mnt/backupdisk/hdimage.gz | cmp -l /dev/sda
Bei Sicherung der wichtigsten Teile
gzip -cd /mnt/backupdisk/hdimage.sda1.gz | cmp -l /dev/sda1
(Unter der Annahme, dass /dev/sda1 die System-Partition sei.)
Mit boot-Partition ggf. entsprechend.
dd if=/dev/sda bs=512 count=63 | cmp -l /mnt/backupdisk/MBR.63
vom Image wieder herstellen
Dies bleibt dem geneigten Leser zur Vertiefung des Wissens als Übung vorbehalten. Denn wer die bisherigen Kommandos verstanden hat, kommt auch recht leicht auf die Kommandos zur Wiederherstellung. Ausserdem heisst der Artikel ja auch "Image der Festplatte erstellen." (und nicht mehr.)
Nur für diejenigen Leser, die sich jetzt nicht alleine weiter trauen und der Vollständigkeit halber folgt jetzt noch ein Absatz.
Wieder das Live-System starten und das Backup-Medium unter /mnt/backupdisk/ mounten.
Bei Sicherung der kompletten Festplatte
gzip -cd /mnt/backupdisk/hdimage.gz | dd of=/dev/sda bs=4k
Bei Sicherung der wichtigsten Teile
Partitionslayout genauso wieder herstellen, wie in /mnt/backupdisk/fdisk.txt bzw. /mnt/backupdisk/sfdisk.out beschrieben.
dd if=/mnt/backupdisk/MBR.63 bs=512 of=/dev/sda
gzip -cd /mnt/backupdisk/hdimage.sda1.gz | dd of=/dev/sda1 bs=4k
(Unter der Annahme, dass /dev/sda1 die System-Partition sei.)
Mit boot-Partition ggf. entsprechend.
Die gute alte Anleitung
(wird rein aus Nostalgie-Gründen immer hier stehen bleiben)
> Ich hab also das Notebook unter Linux von Diskette gebootet und eine
> nfs-Freigabe vom Server auf /mnt gemountet. Und genau dorthin möchte ich
> jetzt die Platte sichern - in eine Image-Datei. Reicht es wenn ich dann
> einfach angebe:
>
> dd if=/dev/hda1 of=/mnt/plattenimage
Kommentar #1 : Falls die Partition /dev/hda1 grösser als 2GB ist, wird das Abspeichern in eine Datei schiefgehen (jedenfalls im normalen EXT2-Dateisystem)
Kommentar #2 : Vor der Übertragung empfiehlt sich folgendes:
# mkdir /win95.c # mount -t vfat /dev/hda1 /win95.c # cd /win95.c # dd if=/dev/zero bs=1024k count=1024 of=junkfile.001 # dd if=/dev/zero bs=1024k count=1024 of=junkfile.002
usw., bis die Partition /dev/hda1 voll ist. Danach gleich wieder aufräumen:
# rm -i junkfile.* # umount /win95.c
Sinn der Aktion: alle unbenutzten Teile der Partition einheitlich mit Nullen füllen - das läßt sich bei Bedarf gut komprimieren
Kommentar #3 : Falls #1 zuschlägt, hilft manchmal noch #2 und anschliessend
# dd if=/dev/hda1 bs=4k | gzip -c > /mnt/plattenimage.gz
Kommentar #4 : Auch die ausserhalb der normalen Partitionen liegende Partitionierungsinformation ist ein lohnendes Objekt zum Retten.
# dd if=/dev/hda bs=512 count=63 of=/mnt/plattenMBR.63
(hier gehe ich mal von der häufigen Situation aus, dass /dev/hda1 mit einem Offset von 63 Sektoren losgeht, das ist gerade eine "Spur". Details dazu liefert z.B. der Aufruf
# cfdisk -Ps /dev/hda
oder (bevorzugt, da auch zur Wiederherstellung tauglich)
# sfdisk -d /dev/hda > /mnt/plattentabelle.txt
Kommentar #5 : Wenn Du "nur" im Bedarfsfall den Inhalt der gesamten Laptop-Festplatte wiederherstellen willst, dann ersetze in #3 die Partitionsangabe (/dev/hda1) durch das gesamte Laufwerk (/dev/hda).
> Oder brauche ich für den Zweck von den anderen Parametern noch irgendwas?
> Vor allem möchte ich, wenn ich das so mache, einigermassen sicher sein
> können, dass ich mit dem Image im Bedarfsfall was anfangen kann. Ich kann
> das nur leider momentan nicht testen…
Doch, Tests sind möglich!
Annahme: Die gesamte Festplatte war gemäß #5 gesichert worden. Zum Test transferieren wir den gesamten Krempel zurück, aber speichern ihn nicht auf der Laptop-Platte, sondern vergleichen byteweise.
Erinnerung: Gesichert wurde per
# dd if=/dev/hda bs=4k | gzip -c > /mnt/plattenimage.gz
Entsprechend wird verglichen per
# gzip -cd /mnt/plattenimage.gz | cmp -l /dev/hda
(es versteht sich wohl von selbst, dass Du zumindest die Aufrufe
# dd --help # gzip --help # cfdisk --help # sfdisk --help # cmp --help
vor der Verwendung obiger Tipps nutzt: ein Rettungssystem hat idR keine Manpages, aber die in den Programmen eingebaute Hilfe ist noch vorhanden. Zudem sind cfdisk, sfdisk, cmp nicht immer auf Rettungssystemen vorhanden — man präpariere sich ggf. eine Zusatzdiskette)