Festplatte kopieren/sichern

Aus aktuellem Anlass1 wollen wir heute mal beschreiben, wie man die Daten einer Festplatte auf eine andere überträgt. Bit für Bit.

Warum nicht mit dem Dateimanager?

Zunächst einmal ist zu klären, welche Aufgabe es hier zu erledigen gilt.

Will man lediglich ein paar Dateien (Dokumente, Bilder, Videos, etc.) an einen anderen Ort sichern, dann kann man dies natürlich mit den alltäglichen Werkzeugen tun, wie etwa dem systemeigenen Dateimanager. Diese kopieren die gewünschten Dateien nacheinander von einer Stelle zu einer anderen.

Aber eben nur dateiweise! Hier soll es aber darum gehen, dass wir ganze Partitionen (also alle Dateien mitsamt Dateisystem2) oder vielleicht sogar eine vollständige Festplatte (also alle Partitionen einer Festplatte, mitsamt der Partitionstabelle und dem Master Boot Record) sichern wollen.

Würden wir alle (erreichbaren) Dateien eines installierten Betriebssystems dateiweise auf eine andere Festplatte kopieren, so könnte das Betriebssystem von der neuen Platte normalerweise nicht einmal starten, weil eben wichtige Informationen (etwa zum Booten) fehlen.

In solchen Fällen benötigt man also eine (eigentlich ziemlich dumme3) 1:1-Kopie der Festplatte. Es sollte doch nicht so schwierig sein, ein Programm dafür zu schreiben, dass jedes Bit von der einen Platte nimmt und an die gleiche Stelle einer anderen Platte zurückschreibt. Und in der Tat kann man viele Programme käuflich erwerben, die diese (und andere) Aufgaben erfüllen.

Aber es gibt auch (mindestens) eine kostenlose Lösung, bei der man lediglich auf die schicke grafische Oberfläche verzichten muss.

Der Protagonist: dd

In so gut wie jeder Linux-Distribution4 befindet sich ein solcher kostenloser Helfer. Das (Kommandozeilen-)Werkzeug dd.

Dieses Programm kann (vereinfacht gesagt) nichts anderes, als die Daten aus einer Datei Bit für Bit5 auszulesen, um sie in einer anderen Datei abzulegen. Das Kopieren einer Datei /home/ch/org.txt nach /home/ch/cpy.txt könnte man also auch kompliziert schreiben als:

dd if=/home/ch/org.txt of=/home/ch/cpy.txt

dd erwartet als Parameter die Eingabedatei als if (InputFile) und die Ausgabedatei als of (OutputFile).

Nun ist (wieder vereinfacht gesagt) unter Linux so gut wie alles eine Datei, und so können wir dieses Programm auch benutzen, um die gesamte Festplatte (IDE, Primary Master) /dev/hda auf eine andere Festplatte (IDE, Secondary Master) /dev/hdc zu kopieren. Ganz simpel, wie im obigen Beispiel:

dd if=/dev/hda of=/dev/hdc

Damit ist es also schnell und einfach möglich, Festplatten, die im gleichen Rechner stecken, zu klonen.

Für PCs mag das auch eine praktikable Lösung darstellen, die fraglichen Festplatten zum Klonen in einem PC-Gehäuse zusammen anzuschließen. Bei Notebooks hingegen besteht diese Möglichkeit meist nicht. Der Ausbau einer Platte gestaltet sich dort zuweilen schwieriger und die wenigsten Notebooks können mehr als eine Festplatte ansprechen. Für den Einbau in einen PC benötigte man zumeist Adapter für die kleinen Notebook-Speicher.

Eine naheliegende Möglichkeit wäre dann der Weg über das Netzwerk, denn schließlich hat so gut wie jedes aktuelle Notebook heutzutage einen Ethernet-Anschluss. Viele Haushalte haben mittlerweile sogar einen Router mit DHCP-Server, so dass man sich nicht einmal um die Vergabe einer IP-Adresse kümmern muss. Das geschieht in der Regel automatisch beim Booten der Live-CD.

Kurz erklärt: Verketten von Befehlen

Um den Artikel hier jetzt nicht noch länger zu machen, vereinfache ich jetzt nochmal extrem. Ich verzichte darauf, auf die Standard-Ein-/Ausgabe und auf die Details von Datei-Deskriptoren einzugehen und sage hier jetzt ganz plump: Wenn man den Ein-/Ausgabe-Parameter weglässt, kann man mit der Pipe (|) Befehle so verbinden, dass die Ausgabe des einen Programmes als Eingabe des nächsten dienen.

Einfaches Beispiel:

cat liste.csv | sort | uniq > sortiert.csv

Hier wird der Inhalt der Datei liste.csv von der Festplatte gelesen und ausgegeben (cat). Diese Daten werden dann von sort entgegengenommen, sortiert und weitergereicht. Danach eliminiert uniq noch doppelte Zeilen und zu guter letzt wird das Ergebnis (eine sortierte Liste ohne Duplikate) in die Datei sortiert.csv ausgeschrieben.

Der Bote: nc

Also brauchen wir nur jemanden, der die Daten an einem Ende durch das Netzwerk schickt und am anderen Ende wieder einsammelt. Genau dafür gibt es das Kommandozeilen-Werkzeugt NetCat (nc). Dieses kann eigentlich nichts anderes als eingehende Daten über das Netz zu schicken, bzw. aus dem Netz kommende Daten entgegenzunehmen und weiterzugeben.

Um Daten über das Netz zu verschicken, muss man nun einfach netcat sagen, wohin er die eingehenden Daten schicken soll. Dazu benötigt es die (IP-)Adresse des Ziels und einen sog. Port, den man frei wählen kann (der aber auf beiden Seiten [Sender/Empfänger] gleich sein muss). Möchte man etwa an den Rechner mit der Adresse 192.168.1.102 auf Port 9000 schicken, gibt man (wenn wir beispielsweise dern Inhalt der Datei liste.csv übertragen wollten) folgenden Befehl ein:

cat liste.csv | nc 192.168.1.102 9000

Auf der Empfängerseite muss man nun nur noch die Daten auf diesem Port entgegennehmen (Parameter -l für „listen“) und weiterverarbeiten. In diesem Beispiel (Daten entgegennehmen und als Datei ablegen) also:

nc -l -p 9000 > liste.csv

(Sinnvollerweise sind die beiden obigen Befehle natürlich in umgekehrter Reihenfolge abzusetzen, damit es für die zu versendenden Daten auch schon einen Empfänger gibt, der auf die Daten wartet.)

Ein Beispiel

Nun schnell alles zusammengesteckt:

Angenommen ich möchte die Festplatte /dev/hda von einem Notebook (IP: 192.168.1.101) komplett auf die Festplatte eines baugleichen Notebooks (IP: 192.168.1.102) kopieren.

Dazu starte ich auf beiden Notebooks Linux von einer Live-CD und öffne die Kommandozeile. Auf dem neuen (Ziel-)Notebook gebe ich

nc -l -p 9000 | dd of=/dev/hda

ein und das Notebook wartet auf die Daten per Netzwerk, die es auf die Festplatte schreiben soll.

Auf dem alten (Quell-)Notebook gebe ich dann den Befehl

dd if=/dev/hda | nc 192.168.1.102 9000

ein uns starte damit den Lesevorgang auf der alten Platte, sowie das Übertragen der gelesenen Daten an das neue Notebook.

Nun muss ich nur noch warten, bis das Kopieren abgeschlossen ist und starte dann den Zielrechner (ohne CD) neu. Fertig.

Weitere Links

Natürlich gibt es da noch so vieles mehr, was man mit diesen Tools anstellen kann, und auch auf die Details wäre ich noch gern eingegangen, aber der Artikel ist (für einen Blog-Eintrag) eh schon viel zu lang, so dass ich an dieser Stelle (vorerst?) auf die verschiedenen (leider häufig englischsprachigen) Seiten im Internet verweisen muss.

Hier eine kleine Auswahl:

  1. 1 Ein Freund bekommt im Rahmen der Gewährleistung ein neues Notebook im Vorabtausch und möchte daher verständlicherweise die auf dem alten Notebook installierten Betriebssysteme mitsamt allen Anwendungen, Einstellungen und Daten auf das neue Notebook übertragen, bevor er das alte Notebook wieder weg gibt.
  2. 2 Vielleicht sogar mitsamt der nicht wirklich leeren „leeren“ Bereichen mitsamt aller angeblich gelöschten Dateien.
  3. 3 Dumm im Sinne von „ohne komplizierte Abläufe/Logik“ und nicht im Sinn von „undurchdacht“.
  4. 4 Am einfachsten besorgt man sich eine Linux-Live-CD (wie etwa Knoppix) und startet den Rechner mit dieser CD. So kommt man in den Genuss dieser Tools ohne Linux installieren zu müssen.
  5. 5 Genaugenommen nicht Bit für Bit, sondern Block für Block, aber um das Prinzip zu verstehen kann man das vernachlässigen.

5 Reaktionen zu “Festplatte kopieren/sichern”

  1. #1
    Fachfrau GERMANY Windows 2000 Mozilla Firefox 2.0.0.4 schreibt:

    Gute Einleitung. Was macht man nur, wenn man windows hat? sagen wir 95? ;)

  2. #2
    Christian GERMANY Windows XP Mozilla Firefox 2.0.0.4 schreibt:

    Das oben genannte Vorgehen funktioniert unabhängig vom Betriebssystem, das auf der Festplatte liegt.
    Nur zum Anfertigen der Kopie/Sicherung benötigt man halt ein (Live-)Linux-System. Aber wie gesagt, kann man sich solche kostenlos aus dem Internet herunterladen. Die bekannteste ist sicherlich Knoppix, von dem man sich a.a.O. ein Image herunterladen kann, um dieses dann auf eine CD oder DVD zu brennen.

  3. #3
    Fachfrau GERMANY Windows 2000 Mozilla Firefox 2.0.0.4 schreibt:

    genau das meinte ich. ;) Um deine Anleitung zu folgen , braucht man Linux-Kenntnissen. Ohne Linux kann es wohl nicht gehen. http://www.acronis.de/ - damit ist es aber auch Unwissendem geholfen.

  4. #4
    Christian GERMANY Windows XP Mozilla Firefox 2.0.0.4 schreibt:

    Es gäbe vermutlich auch unter Windows die Möglichkeit, die genannten Schritte etwa unter Cygwin durchzuführen, aber selbst dann müsste man ja von einem “fremden” System starten, damit das laufende Betriebssystem nicht die Zugriffe auf die Festplatte behindert oder während des Kopierens verändert.

    Deshalb wird hier auch der Weg mit einer Live-CD vorgeschlagen, damit das auf der Festplatte installierte Betriebssystem bei der Sicherung eben gerade nicht läuft.

    An sonsten meine ich, dass gar nicht so viele Linux-Kenntnisse nötig sind, da die einzelnen Befehle ja oben genannt wurden.

    Natürlich kann man sich auch ein kommerzielles Produkt kaufen und dann unter einer grafischen Oberfläche (eben auch unter Windows) eine Sicherung herstellen. Aber das war ja eben nicht Ziel dieser Anleitung ;)

  5. #5
    Fachfrau GERMANY Windows 2000 Mozilla Firefox 2.0.0.4 schreibt:

    du hast mich, glaube ich, falsch verstanden. super-anleitung. :)

Einen Kommentar abgeben


This blog uses DigoWatchWP an anti-fraud plugin for Wordpress.