Hauptplatte am einfachsten klonen

cabriofahrer

Well-Known Member
Ich möchte meine Systemplatte durch eine neue schnellere ersetzen und habe keine Lust auf eine Frischinstallation. Ich habe gehört, man kann mit dd oder irgendeinem Tool in den Ports die Platte mit einem einzigen Befehl klonen, inklusive aller Partitionen. Ist das richtig? Ich habe auf ada0 eine standardmäßige Installation:

Code:
$ gpart show
=>       34  312581741  ada0  GPT  (149G)
         34        128     1  freebsd-boot  (64K)
        162  308281216     2  freebsd-ufs  (147G)
  308281378    4298752     3  freebsd-swap  (2.0G)
  312580130       1645        - free -  (823K)

Ist irgendetwas zu beachten, wenn die Zielplatte größer ist als die ursprüngliche? Muss man dann hinterher noch ein growfs machen? Wird diese dann auch nach dem Umstöpseln auch problemlos wieder als ada0 angenommen, wenn sie während des Klonens als Zielplatte logischerweise ada1 war?
Und wie lange könnte das ungefähr dauern, wenn auf der urspünglichen Platte 108 GB belegt sind?
 
Das Tool "dd" ist was du suchst. Wenn die Zielplatte größer ist, musst du die Partitionen anpassen (bei deinem Layout würde sich anbieten swap zu löschen, die ufs Partition zu vergrößern und hinten wieder eine swap dranhängen). Danach musst du das FS auf der ufs-Partitio noch vergrößeren. Je nach Geschwindigkeit deiner Platten sollte das in ca. 30Min erledigt sein.
 
das Problem ist, dass du dich entscheiden musst, ob das im System-Up-Modus durchführen möchtest oder ob du auch in Erwägung ziehst, den Rechner mal außer Betrieb zu nehmen und ihn zwischendurch mit einem Live-System zu booten.
Wenn das alles aus dem installierten, laufenden System erfolgen soll, dann habe ich mit rsync und tar schon gute Erfahrungen gemacht, lese aber, dass dazu definitiv die dump/restore Geschichte am ehesten geeignet ist. Benutzt habe ich selbst das noch nie ernsthaft. Bei rsny oder anderen Copy-Versionen, muss im Ziel schon eine Partitionierung mit Dateisystem bestehen, die auch vom System verstanden wird. In diesem Fall müsstest du auch schon den passenden Bootblock schreiben (eine Einrichtung, die Dank gpart ja nun nicht zu schwierig ist).
Nach Einrichtung der neuen Platte und kopieren des Systems ins Ziel, ist die sofort für den nächsten Bootvorgang bereit. Ohne dump/restore sollte das aber lieber im Offline-Mode aus einem Live-System heraus passieren. Sonst können sich Dateien im laufenden Betrieb während des Kopiervorgangs verändern und evtl Probleme verursachen.
Ebenfalls im Offline Mode sollte deshalb dd nur angewendet werden. Es nimmt alle Bits die es auf der Quelle findet und schreibt sie ins Ziel. Das heißt, dass auch deine Partitionen und der Bootblock sich anschließend so wieder finden. Damit hat man sehr unkompliziert schnell einen Klon eines Systems geschaffen und kann das vor allen Dingen auch mit Systemen durchführen, die die benutzten Dateisysteme gar nicht kennen. Im Fall deines FreeBSD etwa könntest du ein Live-Linux booten und den dd daraus laufen lassen. Du könntest aber kein rsync benutzen, wenn Linux nicht UFS (oder ZFS) versteht.
Das Problem ist hier, dass die Geometrie deiner neuen Platte gar nicht berücksichtigt wird, die Partitionen also möglicherweise in allen Richtungen nicht gut auf deiner Platte zu liegen kommen. Man kann die Größe anschließend relativ einfach ändern, aber wenn man die Partitionen auch noch verschieben möchte, ist das mit Risiko verbunden. Manchmal geht es schief.

Du hast vielleicht einen entspannten Zustand und kannst einfach mal probieren und testen.
Dein laufendes System bleibt dir ja erhalten und du kannst mit dem Umschalten vielleicht warten, bis du mit einer Methode glücklich bist und die neue Platte erfolgreich hergestellt hast.
Wenn ich selbst unter Anspannung stand und einen schnellen und garantierten Erfolg brauchte, nahm ich bisher immer dd und verzichtete darauf, die neue Platte anschließend zu optimieren, Meine Situationen waren dann aber immer Reparaturen am System, das oft ausgefallen war, weil es eine neue Platte brauchte und ich hatte zu einigen sensiblen Systemen vorher schon mal einen dd-Klon angelegt und auf einem Medium bereit gehalten.
Wie schon angedeutet, ist das besonders hilfreich in Systemen, bei denen man sich nicht hinreichend auskennt oder nur einen eingeschränkten Zugang hat. Es kann so etwa grundsätzlich auch eine komplett verschlüsselte Platte geklont werden, auch von solchen Systemen, zu denen man selbst gar keine Passworte kennt. Nach einem dd auf den neuen Datenträger kennt man dann immer noch keine Passworte, hat aber die Funktionalität des Systems einfach wieder hergestellt.
 
Warum nicht dump/restore bei Verwendung von UFS. Habe ich als BSD-Laie schon erfolgreich genutzt. Geht auch aus dem laufenden System wenn man bestimmte Bedingungen einhält. Welche es konkret sind fällt mir jetzt nicht mehr ein. Bin im Umgang mit FreeBSD nicht fit und eingerostet.
 
Danke für Eure Antworten. Was ich letztenedlich gemacht habe: Eine alte FreeBSD 9.3 Installations-CD im Live-Modus gebootet und dd angewendet. Hat ungefähr eine Stunde gedauert. Hinterher das gemacht, was @medV2 grob beschrieben hat und in Kap. 17.3 "Resizing and Growing Disks" ganz genau beschrieben ist. Hat wunderbar geklappt! Wozu also eine Linux-LiveCD?
 
Wozu also eine Linux-LiveCD?
wenn sich das darauf bezieht:
Im Fall deines FreeBSD etwa könntest du ein Live-Linux booten und den dd daraus laufen lassen. Du könntest aber kein rsync benutzen, wenn Linux nicht UFS (oder ZFS) versteht.
erklärt sich das hoffentlich beinahe von selbst. Es war keine Empfehlung, ein Live-Linux zu benutzen. Ich wollte nur die Unterschiede der Methoden besser darstellen.
Allerdings habe ich immer ein Live-Linux in der Hosentasche und könnte das (mit den benannten Einschränkungen) auch einsetzen. dd unter GNU/Linux ist flexibler und kann einige Dinge mehr und besser, als dd unter FreeBSD. Doch das nur am Rande.
 
Könntest Du das bitte anhand praktischer Beispiele genauer ausführen?
nein, dazu müsste ich erst ein GNU/Linux starten und das ist mir nun zu viel.
Man kann die man-pages vergleichen, die es im Netz gibt, aber der Hauptunterschied für mich ist, dass GNU/Linux dd mit bs kleiner 512 klar kommt. Es kann quasi Bit-genau eingesetzt werden und wird das auch oft, wenn etwa nur ein Teil des MBR kopiert werden soll (bs=440 etwa).
FreeBSD hatte dazu früher sdd von Jörg Schilling in den Ports. Als ich es letztens mal suchte, fand ich es nicht mehr und nahm dann eben mein Live-Linux vom Stick für die eine spezielle Aufgabe (es ging darum, wenige Byte in einem MBR zu ersetzen, nur eine kleine Partitionskennung).
 
Hat ungefähr eine Stunde gedauert.
Einiges an dieser Zeit hättest du dir sparen können, dd ist für diesen Zweck nicht geeignet.
Partitionen anlegen, Bootloader installieren, Dateisysteme initialisieren, Einhängen, Kopieren, reboot.

Stattdessen übernimmst du mit dd eine Partitionstabelle, die warscheinlich nicht für 4k-Sektoren angeordnet ist. Desweiteren übernimmst du die Parameter und Fragmentierung der ursprünglichen Dateisysteme.

Auch das nachträgliche Erweitern der Partitionen und growfs klappt nur, wenn die jeweilige Partition am Ende der Tabelle liegt oder alle nachfolgenden Partitionen entfernt werden können.

Rob
 
Nun, ich sehe schon, es gibt offensichtlich mehrere Möglichkeiten um zum gleichen Ziel zu kommen. Jedenfalls hat es so geklappt und ich bin zufrieden.

Nur für das hier hätte ich noch gerne eine genauere Erläuterung:

Stattdessen übernimmst du mit dd eine Partitionstabelle, die warscheinlich nicht für 4k-Sektoren angeordnet ist.

Woher wollen wir das wissen? Ich hatte seinerzeit eine Standardpartition von mit bsdinstall/UFS vorgenommen, da habe ich doch 4k-Sektoren, oder nicht? Außerdem habe ich wie gesagt genau die Anleitung in Kap. 17.3 befolgt, die auch einen Wert von 4k als Parameter vorgibt, um die Partition zu vergrößern
(# gpart resize -i 2 -a 4k -s 47G ada0), und dabei passierte auch nichts merkwürdiges.
 
Könntest Du das bitte anhand praktischer Beispiele genauer ausführen?
ich habe immer noch kein GNU/Linux gebootet, aber in einem anderen Forum mal den letzten, etwas kniffligen dd-Befehl rausgesucht, der mit FreeBSD dd nicht ging:
Code:
dd if=/dev/da1 bs=1 skip=482 count=1 | dd of=/dev/da1 bs=1 seek=450 count=1 conv=notrunc
In der man zu dd in FreeBSD steht:
Code:
Input data is read and written in 512-byte blocks.
Merkwürdig ist, dass ich das natürlich vor diesem Beitrag gleich nochmal testen wollte und bei einem beliebigen File als Eingang auch auf Anhieb 234 Bytes (willkürlich gewählt) schreiben konnte. Ich bin ziemlich sicher, dass es früher immer nur vielfache von 512 funktionierten.
Vielleicht hat sich was geändert?
Allerdings, der Befehl wie oben hatte bei mir vor wenigen Wochen mit FreeBSD nicht funktioniert, aber in einem GNU/Linux auf Anhieb (natürlich mit geänderten Gerätebezeichnungen).
Der Befehl sollte einen Eintrag von einem Platz im MBR nehmen und an einen anderen Platz schreiben. Dazu wird jeweils die genaue Position angegeben und das Einlesen, bzw Schreiben entsprechend gesteuert.
Der exakte Beitrag dazu steht hier: Link ins KNOPPIX-Forum und in diesem Thread ging es insgesamt um das Bootverhalten des neuen Knoppix 8.1, besonders als DVD mit UEFI. Das war für mich recht interessant.
 
Ich hatte seinerzeit eine Standardpartition von mit bsdinstall/UFS vorgenommen, da habe ich doch 4k-Sektoren, oder nicht?
Das hängt natürlich ein wenig davon ab, WANN denn dieses seinerzeit gewesen ist.
Du hast durchaus Recht. Wir haben nun seit geraumer Zeit die 4k-Sektoren-Grenzen auch in FreeBSD per default und müssen darauf nicht mehr gesondert achten.
Du kannst das ja nachsehen, wie es auf deinem Medium ist und ich verweise mal auf das Handbuch, ohne nun selbst nachsehen zu wollen, wie das denn geht.

Auch in meinem ersten Beitrag hatte ich aber schon darauf hinweisen wollen, dass dd eben das klont, was es vorfindet und es könnte sein, dass das mal nicht gut passt. Deshalb wird es immer noch funktionieren, aber es könnte eben auch besser funktionieren, wenn die Partitionen richtig ausgerichtet sind.

Warum wird noch immer für diesen Fall die "dd-Sau" durch das Dorf getrieben?
Wenn du genau den hier behandelten Fall meinst, kann ich nur zustimmen.
Aber ganz allgemein bin ich sehr froh, dass man mit dd auch Festplatten (oder andere Medien) sehr einfach und erfolgreich Klonen kann und zwar durchaus auch mit allen Fehlern und Besonderheiten.
Ich will mich nicht unbedingt wiederholen, aber besonders bei Systemen, wo man keinen erweiterten Zugang hat, ist das ungemein hilfreich. So kann ich einen erfolgreichen Klon einer Systemplatte aus einem SUN, Windows, IRIS, OS-X und so weiter erstellen, ohne auch nur eines der benutzten Dateisysteme zu kennen. Ich brauche keine tiefer gehenden Rechte, kann sogar verschlüsselte Medien klonen (zumindest generell) und so einen tauglichen Notfall-Backup parat haben.
Ihr dürft hier nicht in IT-denken. Denkt an Reparatur eines Unbekannten Systems, wiederherstellen der Funktionalität bei Festplatten-Tod und zwar auch bei sehr verschlossenen Systemen, wo in einem solchen Fall sehr schnell sehr viel Geld fällig werden kann.
Doch Details möchte ich mir an dieser Stelle nun ersparen.

Nur die Bemerkung, dass es wirklich gute Gründe für den Einsatz von dd geben kann und nochmal, dass ich sehr froh damit bin und in den letzten Jahren oft unerwartete Hilfe damit leisten konnte. Gut, dass die Sau noch lebt!
 
Merkwürdig ist, dass ich das natürlich vor diesem Beitrag gleich nochmal testen wollte und bei einem beliebigen File als Eingang auch auf Anhieb 234 Bytes (willkürlich gewählt) schreiben konnte. Ich bin ziemlich sicher, dass es früher immer nur vielfache von 512 funktionierten.
Vielleicht hat sich was geändert?
Ich habe nun ein wenig ausführlicher getestet und bei einem beliebigen File als Input konnte ich tatsächlich mit FreeBSD-dd Byte-Weise schneiden.
Das hat mich nun selbst überrascht und ich weiß im Augenblick nicht, weshalb es vor wenigen Wochen nicht funktionierte, wie ich mir das vorgestellt hatte. In meinem Test nun benutzte ich nur eine bestimmte Eingangsdatei (irgendein pdf) und manipulierte darin nahezu beliebig irgendwelche Bytes, indem ich wie oben gezeigt vorging und diese von bestimmten Stellen kopierte an gewünschte Stellen schrieb.

Mit einem guten hexeditor wäre das natürlich jeweils grundsätzlich einfacher. Kann ich einfach dd if="füttern"? Also: dd if="27" ... um mal ein banales Beispiel zu geben und damit den Hexwert "27" zu wünschen.
Aber reden wir nicht über Schnee und sprengen wir nicht diesen Thread.
 
Zurück
Oben