Festplatten klonen mit dd

Wer eine Festplatte klonen oder ein Image davon erstellen will, der hat die Qual der Wahl wenn es um die Programmauswahl geht.
Natürlich gibt es für diesen Zweck eine Reihe kommerzieller Programme (Ghost, Acronis usw.), die aber meiner Meinung nach absolut überflüssig sind weil man auf hervorragende Open Source Lösungen zurückgreifen kann. (Ausnahme ist die Erstellung von Live-Images, also bei laufendem System)

Außerdem bin ich kein Freund von kostenpflichtiger Software wenn es freie Software gibt die ihre Aufgabe gleich gut oder sogar besser erledigt.

Da wäre zum einen CloneZilla, ein bootfähiges, linux basiertes Programm das von CD/DVD oder einem USB Stick gestartet wird – einfach das ISO Image downloaden, brennen und den Rechner damit starten.
Damit sollte man in den meisten Fällen auskommen wenn man nur eine Platte oder eine Partition klonen will bzw. ein Image davon erstellen will.

Kürzlich hatte ich jedoch einen Fall wo ich mit CloneZilla nicht weitergekommen bin. Es gab ein Problem mit dem Ziellaufwerk, aus irgend einem Grund konnte er die Partitionen nicht erstellen (es war eine frische, neue Platte).

In so einem Fall kann man immer noch die Holzhammermethode anwenden – eine 1:1 kopie mit dd – dump device.
dd ist ein Unix/Linux Programm das in den meisten Linux Distributionen enthalten ist, so auch in CloneZilla Live.
Damit lassen sich Datenströme 1:1 von A nach B leiten, was sich für’s Klonen natürlich anbietet.

Wir booten also z.B. mit CloneZilla und wechseln danach auf die Kommandozeile anstatt Clonezilla zu starten.

mit folgendem Befehl wird sda (Laufwerk auf SATA Port 1) 1:1 auf sdb (SATA Port 2) übertragen:

sudo dd if=/dev/sda of=/dev/sdb bs=1M & pid=$!

Kurz zur Erklärung der Parameter:

if = input file (kann ein x beliebiger stream sein)
of = output file (auch beliebig, datei (für ein Image) oder ein device)
bs = block size – unbedingt angeben ansonsten wird der Vorgang ewig dauern. Da muss man evtl. etwas experimentieren, ich bin letztens mit 1M ganz gut gefahren.

Mit pid=$ wird die Prozess ID in die Variable $pid geschrieben damit wir nachher zur Statusanzeige noch darauf zugreifen können ohne die Prozess ID manuell angeben zu müssen.

Achtung: Bevor dd ausführt sollte man unbedingt sichergehen dass man if und of richtig angibt, ansonsten kann das Ganze sehr schnell in einem Disaster enden.

sudo fdisk -l gibt Aufschluss über die angeschlossenen Devices.

Nachdem dd läuft und wir es idealerweise mit & in den Hintergrund geschickt haben, senden wir zur Statusanzeige dd das USR1 Signal, woraufhin es den aktuellen Fortschritt anzeigt.

sudo kill -USR1 $pid

Um bspw. alle 10 Skunden den Fortschritt zu erhalten kann man watch verwenden:

sudo watch --interval 10 kill -USR1 $pid

Das Ziellaufwerk muss natürlich mindestens gleich groß wie die Quelle sein, aber das sollte klar sein.

dd ist sehr langsam, eine 2TB Platte zu klonen kann schon mal 5 Stunden dauern – da ist man mit Clonezilla im Normalfall besser bedient weil hier intelligenter vorgegangen wird. dd schaufelt halt “dumm” die Blocks von A nach B, inkl. nicht genutzem Speicherplatz.

Aus aktuellem Anlass musste ich gerade die Festplatte eines SBS 2003 klonen.
Im laufenden Betrieb stürzte der RAID Controller ab (nVidia Software RAID), weswegen die Spiegelung sofort unbrauchbar war. Eine Wiederherstellung via RAID Utility klappte leider nicht – Gott sei Dank gibt es so einfache Programme wie dd.

8 Gedanken zu „Festplatten klonen mit dd“

  1. Hey, hat sauber funktioniert, nachdem ich sda auf hda angepasst hatte, da der PC noch kein sata verwendet.
    Rund 1/2h und danach war die Sicherhungs-HD erstellt. Ging ganz einfach mit der Rescue-cd.

    Gruss, Markus

  2. Prima, danke ! Die Watch Syntax meiner Linuxdistri wollte statt “–intervall” “-n” haben, ansonsten hats perfekt funktioniert.  Aber ein bisschen darf man das Hirn ja trotz der perfekten Vorlage einschalten ;)

     

  3. Danke für die ausführliche Beschreibung. Mein NAS hat es zerlegt und ich hoffe nach dem Klonen der Datenpartition auf eine zweite da noch was retten zu können. 2TB dauern jetzt schon schon 4h ca. Ich habe leider den Status vergessen mit anzugeben und nur einen blinkenden Cursor im Terminal. Kann ich das noch nachträglich eintippern ohne wieder mit allem von vorne an anzufangen?

    Anwort kommt wahrscheinlich eh zu spät ;-)

     

     

  4. Im Nachhinein kann man nichts mehr am Befehl ändern. Da musst du wohl einfach abwarten

    Nicht unbedingt, in nem anderen Terminal “ps -C dd” gibt unter anderem die PID aus, diese einfach statt “$pid” verwenden.

  5. auch wenn das tut scho antik ist (2 Jahre OMG!!1) mein senf dazu :)

     

    das mit dem kill-switch fuer USR1 funktioniert natuerlich, keine frage :)

    als aternative dazu:

     

    dd allein zeigt keinen vernuenftigen progressbar an, dafuer gibts aber als additional tool ‘pv’. sollte sich auf debian und anderen normaldistris einfach via apt-get, pacman, zypper, whatever installieren lassen. dann kann man sehr fein den fortschritt so beobachten:

    dd if=/dev/sda | pv | dd of=/dev/sdb

     

    OOOOODER alternativ installiert man sich dcfldd, eine dd-mutation mit eingebautem progressbar :)

     

    just my 2 cents :)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">