Gefällt dir dieser Artikel?

neue Festplatte: Linux und Windows Partitionen kopieren

erschienen in der Kategorie Software, am 14.05.2012
Schnatterente
Auf meinem Laptop wurde es, was den verfügbaren Speicher angeht, schon vor längerer Zeit recht eng. Seit fast einem Jahr plante ich, meine 320 GB Samsung Festplatte durch eine größere zu ersetzen. Die letztjährige Flutkatastrophe in Thailand, von der auch der Festplattenhersteller Western Digital schwer betroffen war, machte mein Vorhaben für längere Zeit unmöglich, denn sie ließ die Preise in wahnwitzige Dimensionen steigen.

Inzwischen haben sich die Preise weitestgehend normalisiert und so entschied ich mich endlich zuzuschlagen. Eine Western Digital WD10JPVT mit 1TB Speicher sollte es sein. (In Samsung habe ich, auf Grund einer Vielzahl schlechter Erfahrungen, kein Vertrauen mehr.)

Kaum war ich im Besitz der Platte, stand ich vor einem neuen Problem: Wie kopiere ich die Inhalte meiner alten Festplatte, inklusive der Betriebssysteme (Linux und Windows), auf die neue, ohne alles neu installieren zu müssen?

Vorwort und Motivation

Im Folgenden will ich aufzeigen, wie ich vorgegangen bin und auf welche Probleme ich dabei stieß. Ich denke, dass sich recht viele Leute einmal mit dem Problem des Kopierens einer Festplatte oder eines Betriebssystems rumschlagen müssen. In Windows-Kreisen wird oft das kostenpflichtige Programm "Norton Ghost" empfohlen, um derartige Aufgaben zu bewältigen. Ich habe das kostenlose Linux-Tool "dd" benutzt, welches, meiner Einschätzung nach, einfach genug zu handhaben ist, dass es auch von Nicht-Linux-Nutzern bedient werden kann.

Alle im Folgenden eingesetzten Programme sind in der Regel auf Linux Live-CDs, wie zum Beispiel "Knoppix", enthalten. (Derartige Linux Systeme könnt ihr euch als .iso Dateien aus dem Internet herunterladen, auf eine CD oder DVD brennen und euer System dann von dieser starten, ohne etwas auf den Computer installieren zu müssen.)

Es sei auch noch erwähnt, dass alle hier aufgeführten Operationen keine Änderungen am Quelldatenträger, also an der alten Festplatte, vornehmen - die Daten sind also in Sicherheit.

Eine Warnung

Trotz allem Gesagten übernehme ich natürlich keinerlei Haftung für die hier verfassten Informationen. Leute die nicht wissen, was eine Partitionstabelle oder ein Bootloader ist, sollten sich vielleicht doch besser an jemanden wenden, der ein bisschen mehr von der Materie versteht oder sich zumindest vorher ausreichend belesen.

So, nun geht's aber los!

Partitionstabellen

Als erstes habe ich die neue Festplatte in ein externes Festplattengehäuse gebaut, welches ich via eSATA-Anschluss mit meinem Computer verbunden habe. Desweiteren habe ich Fedora-Linux auf einem USB-Stick installiert (wie bereits geschrieben kann auch eine Live-CD verwendet werden).

Mancher mag sich jetzt fragen, warum ich für die ganze Datenschieberei noch ein drittes Betriebssystem nutze und nicht auf das zurückgreife, was bereits auf meiner Festplatte liegt. Dies resultiert aus der Überlegung, dass es vielleicht ungewollte Seiteneffekte geben könnte, wenn sich ein gerade ausgeführtes Betriebssystem selbst kopieren soll.

Nachdem ich mein Fedora-Linux vom Stick gestartet habe, nutzte ich das Konsolenprogramm fdisk, um mir noch mal die Partitionstabelle meiner alten Festplatte anzuschauen und eine ähnliche (gleicher Aufbau mit größeren Partitionen) auf der neuen Festplatte zu erstellen. Wer es lieber grafisch mag, sollte das Programm "gparted" verwenden, mit welchem man sehr einfach Festplatten partitionieren kann.

Unter Linux wird jedem Gerät eine Datei im Dateisystem zugewiesen, die zur Verwaltung genutzt wird. Die erste Festplatte eines Systems heißt in der Regel "/dev/sda", die zweite "/dev/sdb", die dritte "/dev/sdc", usw. Die erste Partition der ersten Festplatte ist beispielsweise unter "/dev/sda1" zu finden, die dritte Partition der zweiten Festplatte unter "/dev/sdb3".

Im Programm gparted werden die Festplatten auch an Hand dieser Bezeichner sortiert. In der rechten oberen Ecke der Programmoberfläche, kann je ein Datenträger zur Partitionierung ausgewählt werden. Zuerst sollte man sich einen Überblick darüber verschaffen, welche Festplatte unter welcher Bezeichnung zu finden ist.

In meinem Fall hört die alte Festplatte auf die Bezeichnung "/dev/sda" und die neue nennt Linux "/dev/sdb". Falls dies beim geneigten Leser dieses Artikels anders ist, muss er die Bezeichnungen natürlich entsprechend anpassen, sonst kann es passieren, dass er die falsche Festplatte mit dem falschen Inhalt beschreibt (Datenverlust!).

dd: Festplatten und Partitionen kopieren

Wie bereits erwähnt, nutzte ich das Programm dd zum Kopieren meiner Dateisysteme. Diese Software ist dafür konzipiert, Daten schlicht zu kopieren - sie weiß nicht was Dateien und Ordner sind, dd sieht und schreibt nur 1en und 0en, egal ob diese irgendeinen Sinn ergeben oder nicht.

Eine komplette Festplatte, inklusive des Master Boot Records (MBR) mit den Partitionstabellen, kann man mit dd wie folgt kopieren:
dd if=/dev/sda of=/dev/sdb

Diesen Befehl führt man einfach in einer Linux-Konsole aus (evtl. sind root-Rechte nötig). Unter dem Parameter if wird die Datenquelle angegeben, unter of das Ziel. In diesem Beispiel wird also der komplette Inhalt der Festplatte /dev/sda auf die Festplatte /dev/sdb kopiert. Wöllte man nur eine Partition kopieren, würde das Ganze zum Beispiel so aussehen:
dd if=/dev/sda3 of=/dev/sdb1
(kopiert Partition 3 von Festplatte a auf Partition 1 von Festplatte b)

Wenn man auf einer Festplatte ein Betriebssystem installiert hat, hat dieses zu meist einen Bootloader in den Master Boot Record des Speichermediums geschrieben. Will man den Bootloader der ersten Festplatte auf die zweite kopieren, geht man wie folgt vor:
dd if=/dev/sda of=/dev/sdb bs=446 count=1
(kopiert die ersten 446 Byte von Festplatte a auf Festplatte b)

Möchte man den kompletten MBR, also auch die Partitionstabellen, kopieren, muss man die Zahl 446 durch 512 ersetzen.

Will man eine Festplatte auf eine andere, gleicher Größe kopieren, ist der zuerst gezeigte dd-Befehl gut einsetzbar (eine rechte elegante Backup-Methode). Will man seine Daten auf einen größeren Datenträger kopieren und die bisherigen Partitionen vergrößern, ist der zeitliche Aufwand geringer, wenn man die neue Partitionstabelle (mit den größeren Partitionen) selbst erstellt und die Daten der Partitionen dann, wie im zweiten dd-Beispiel gezeigt, einzeln kopiert. Natürlich könnte man die Festplatte auch in diesem Fall komplett kopieren und die Partitionen hinterher, mit gparted oder einem anderen Tool, vergrößern und verschieben, aber dann müssten die meisten Daten mehrmals geschrieben werden und bei einigen hundert Gigabyte vergehen da schnell mal einige Stunden.

Der Master Plan

Mein Vorhaben sah so aus:
  • auf der neuen Festplatte eine Partitionstabelle erstellen, die dem Grundaufbau der alten gleicht, aber mit vergrößerten Partitionen
  • den Bootloader der alten Festplatte auf die neue kopieren (GRUB)
  • die Inhalte der einzelnen Partitionen mit dd kopieren

Die Umsetzung

Der erste Punkt lässt sich, wie bereits erwähnt, bequem mit gparted und einigen Mausklicks erledigen. Meine Partitionstabelle enthält die folgenden Partitionen - die mit einem Stern* gekennzeichneten, habe ich auf der neuen Festplatte massiv vergrößert.

/dev/sda1 (fat16 / 40MB) - eine von DELL vorinstallierte, versteckte Partition zur Systemüberprüfung und -wiederherstellung (hätte man auch löschen können, aber die 40MB tun ja keinem weh)

/dev/sda2 (ext2 / 256MB) - meine Linux Boot Partition /boot (enthält u.a. den Linux Kernel)

/dev/sda3 (ntfs / 100MB) - die Windows 7 Boot Partition

/dev/sda4 (erweitert / 931GB) - eine erweiterte Partition, die die folgenden Partitionen enthält

/dev/sda5* (ntfs / 200GB) - Windows 7

/dev/sda6* (crypt-luks / 500GB) - auf dieser verschlüsselten Partition liegen die meisten meiner Daten

/dev/sda7* (ext4 / 228GB) - die Linux Root-Partition /

/dev/sda8 (swap / 3GB) - Linux Swap

Das Erstellen der Partitionstabelle ging ohne jegliche Probleme vonstatten. Als Nächstes kopierte ich den GRUB-Bootmanager mit dd: dd if=/dev/sda of=/dev/sdb bs=446 count=1 - auch das lief fehlerfrei ab. Danach ging es ans eigentliche Kopieren der Daten. Die Partitionen 1, 2, 3, 5 und 7 kopierte ich, wie oben beschrieben, ebenfalls mit dd. Die Swap-Partition zu kopieren macht wenig Sinn, ich führte mkswap /dev/sda8 aus, um sie neu anzulegen.

Die Partitionen 5 und 7 wurden zwar vergrößert, durch das komplette Kopieren der Partitionen wurden aber auch ihre Superblöcke einfach kopiert. Würde man das System jetzt starten, wüssten die Dateisysteme nichts von ihrer neuen Größe. Mit den Programmen resize2fs (für ext-Dateisysteme) und ntfsresize (für NTFS-Dateisysteme) lässt sich dieser Fehler beheben:
resize2fs /dev/sda7

und
ntfsresize /dev/sda5

korrigieren die Superblöcke.
Übrig blieb jetzt nur noch die Datenpartition /dev/sda6. Deren verschlüsseltes Dateisystem kann man nicht einfach kopieren und vergrößern (bzw. es kann schon sein, dass es geht, aber ich hatte keine Lust mich damit zu beschäftigen.). Ich entschied mich dafür, das Dateisystem auf der neuen Festplatte einfach erneut zu erzeugen und kopierte die Dateien auf dem herkömmlichen Weg, via cp -r.

Der Windows-GAU

Nach der ganzen Datenkopiererei habe ich meinen Rechner neu gestartet, den Linux-Boot-Stick entfernt und mich erst mal darüber gefreut, dass mein GRUB-Bootloader noch einwandfrei funktionierte. Auch Gentoo-Linux ließ sich problemlos booten und kommentierte die ganze Aktion in keiner Weise.

Als letzten Schritt wollte ich testen, ob Windows noch funktioniert. Natürlich war dies nicht der Fall. ☺

Windows 7, bzw. dessen Bootloader reagierte sehr allergisch auf die Verschiebung der Partitionen. Jedenfalls bekam ich nicht mal eine Fehlerausgabe, sondern nur einen dauerhaften, lauten und extrem nervigen Piepton um die Ohren gedonnert.

Ich vermute aber, dass dieser Fehler eher unüblich ist und nur bei mir auftrat, weil das Windows Dateisystem sowieso schon einige kleine Schäden hatte.

Alle, auf der Windows DVD verfügbaren Reparaturoptionen schlugen fehl. Auch die in der Wiederherstellungskonsole enthaltenen Werkzeuge, wie z.B. bootrec, konnten das Problem nicht lösen. Ich versuchte eine Neuinstallation von Windows, mit dem Resultat, dass mein GRUB-Bootloader überschrieben wurde und der Windows Bootloader nach wie vor nur Pieptöne produzierte - mein Rechner war nun also ein Gerät, das man anschaltete, das nichts anzeigte und nur nervige Töne produzierte. Ein CD-Player mit einer Tokio Hotel CD erfüllt den gleichen Zweck, ist billiger und Energie-effizienter - meine Erfindung war also nicht so toll.

Nach einigem Hin und her startete ich mein System erneut mit dem Fedora-USB-Stick, kopierte die Windows 7 Daten-Partition erneut mit dd und löschte die Windows 7 Boot Partition. Danach ließ ich die Fehlerreparatur der Windows 7 DVD noch einmal durchlaufen, weil ich dachte, dass diese vielleicht in der Lage ist, die Boot Partition wieder anzulegen. Dies konnte sie offensichtlich nicht, fand aber auf einmal einige Fehler im NTFS-Dateisystem und reparierte diese. Ich startete die Windows Installation erneut, legte im frei gewordenen Speicher (100MB) die Boot Partition neu an und markierte die bisherige Windows 7 Partition als Installationsziel. Wieder warnte mich die Windows-Installationsroutine, dass auf dem Datenträger bereits eine alte Windows Installation vorhanden sei und dass die alten Daten in den Ordner "Windows.old" verschoben würden (nettes Feature).

Diesmal lief die Installation sauber ab, nach dem Neustart des Rechners erschien sofort das Windows 7 Logo und ich wurde aufgefordert, mit der Konfiguration fortzufahren. Ignorant wie ich nun mal bin, drückte ich den Ausschalter, woraufhin das Installationsprogramm erkannte, dass ich gerade keine Lust auf diesen Quatsch hatte und den Rechner herunterfuhr.

Ein letztes Mal und inzwischen reichlich genervt, schloss ich meinen Linux-Boot-Stick an. Ich kopierte erneut den GRUB Bootloader, von der alten Festplatte auf die neue, um den Autostart von Windows 7 zu unterbinden und mein Linux wieder zugänglich zu machen. Desweiteren schaute ich mir die Windows-Datenpartition an. Hier lag nun das neue Windows und die dazu gehörigen, neu erstellten Ordner "Program Files", "Users", usw. Ich löschte sie alle und holte meine alten Daten aus dem Backupordner "Windows.old" zurück.

Nach einem Neustart stellte ich fest, dass ich endlich am Ziel angekommen war. Alle Systeme ließen sich booten und Windows zickte nicht mehr rum.

Unterm Strich

hat der ganze Spaß länger gedauert, als ursprünglich geplant, aber dennoch weniger Zeit in Anspruch genommen, als eine komplette Neuinstallation. Linux hat das Vergrößern und Verschieben der Partitionen gut weggesteckt, Windows fand es hingegen gar nicht lustig. Im Netz liest man aber häufig, das Probleme nach dem Verschieben von Partitionen durch die Wiederherstellungstools behoben werden können. Vielleicht waren diese Werkzeuge in meinem Fall einfach nur durch die Vielzahl der Partitionen überfordert oder die Probleme ergaben sich, wie oben schon vermutet, aus bereits bestehenden Fehlern des Dateisystems.

Letzten Endes funktioniert nun alles - auch wenn ein Tag dafür drauf gegangen ist. ☺

Geschnatter

8 Kommentare, selbst mitschnattern << < Seite 2/2 > >>
André, am 12.10.2015 um 23:56 Uhr
Schöne Anleitung, besten Dank dafür!