zfs auf neue Platte clonen?

Alexco

Well-Known Member
Hallo zusammen,

ich habe hier eine ältere 320GB Platte (ja, keine SSD) im GUID Schema partitioniert. Erst die EFI, dann ein 120GB ZFS (mein Root Pool), dann swap und dann eine Debian Linux Installation.
Wenn ich jetzt neuerdings die Debian Installation boote, dann ist das suuuuuper lahm und es gibt irgendwann Timeouts von der Platte. S.M.A.R.T. meldet bisher aber noch nichts.
Die FreeBSD Installation bootet bisher ohne Probleme. Jetzt würde ich das gerne "retten", weiß aber nicht, wie ich da vorgehen soll.

Meine Idee ist, neue Platte per USB anklemmen, partitionieren und dann
a) komplett neu installieren (och nööö)?
b) irgendwie klonen (inkl. Datasets)?
c) ....

Für Tipps und Ideen wäre ich echt dankbar.
 
Ich würd erstmal versuchen, einen Klon auf die neue Platte mittels clonezilla oder ddrescue (ddrescue -n -r3 /dev/alt /dev/neu) zu erstellen - wobei das -n für "do not scrape" und das -r3 für "try max 3 times" steht.
 
Auf der neuen Festplatte oder SSD die Partitionen und einen neuen Pool anlegen und dann die Daten mit 'zfs send | zfs receive' übertragen. Das wäre so der Standardweg und hat den Vorteil, dass man mit einem sauberem Pool ohne Vorgeschichte startet,
 
Ich habe bisher nur eine Datenplatte mit einem separatem eigenen Pool auf eine größere Platte migriert, indem ich eine 2. Platte mit zpool add hinzugefügt und die 1. Platte dann mit zpool remove entfernt habe. Das hat soweit gut funktioniert.

In diesem Fall fehlt natürlich noch der Teil mit den Boot Informationen, aber ich denke, dass es trotzdem machbar sein sollte.
 
a) komplett neu installieren (och nööö)?
Neuinstallieren ist nicht mehr so schlimm wie früher.
Versuch mal meinen Skunk Installer.
Der macht das mühelos und kinderleicht, konfiguriert dir X und die von Dir ausgewählten Desktops und Apps automatisch.

Der Installer ist momentan noch inoffizielle Alpha, da Gnome und XFCE noch nicht auf allen Repos zurück sind.
Daher sollte auf 13 quarterly momentan nur Xfce ausgewählt werden, und auf 13 latest nur Gnome.
Die anderen DE/WMs sind alle verfügbar/installierbar.

Ich habe bisher nur eine Datenplatte mit einem separatem eigenen Pool auf eine größere Platte migriert, indem ich eine 2. Platte mit zpool add hinzugefügt und die 1. Platte dann mit zpool remove entfernt habe. Das hat soweit gut funktioniert.

In diesem Fall fehlt natürlich noch der Teil mit den Boot Informationen, aber ich denke, dass es trotzdem machbar sein sollte.
Ja, die Bootinfos fehlen da immer.
Persönlich hab ich da am liebsten eine Bootplatte und zwei, drei mirrored Datenplatten, die ich dann einfach einhänge.
Mit zpool attach/detach lassen sich so bequem Backup-Platten zum Wegbunkern erstellen.
 
Herzlichen Dank für die Tipps.
Ich dachte, wenn ich bei meinem Pool (habe nur einen) einfach ein
Code:
zfs snapshot -r "blabla"
und ein
Code:
zfs send -R "blabla" | zfs recv -Fdu "newPool"

mache, dann werden alle sets, inklusive des Boot Environments übernommen?

Und ich könnte dann einfach
  • den neuen Pool mounten
  • die Config anpassen
  • wieder exportieren
  • Platte umbauen und den Rechner neu starten?

Wenn ich neu installieren muss, dann probiere ich mal das Script von Dir aus, @skunk .
Kann man das auch nachträglich laufen lassen? Unterstützt das auch GNUStep und WindowMaker?
 
inklusive des Boot Environments übernommen?
was meinst du damit?
Es wird der ZFS-Pool, oder besser gesagt, der benutzte snap genau geklont.
Die EFI musst du von Hand anlegen und befüllen, die gehört ja nicht zum Pool.

Wenn du anschließend diese Platte dann booten möchtest und sie nicht zuvor nochmal einbinden willst, kannst du sogar den gleichen Pool-Namen benutzen und wenn du nicht eine Pool-ID irgendwo benutzt hast, brauchst du auch keine Änderungen in einer Config durchzuführen.
Willst du den Pool einbinden, dann pass auf, wenn er den gleichen Namen hat, wie dein alter. Unbedingt auf ein extra Verzeichnis mounten, nicht einfach importieren.

Was du allerdings vorher noch prüfen solltest, sind einige Eigenschaften des Pools, ob du das so willst. Dinge, wie atime, compression, ashift und so, sind ja nicht immer so, wie man das vielleicht für sich haben möchte.
 
habe eben meine letzte Mitschrift gefunden, als ich also zum letzten Mal meine SSDs erneuert hatte. Ich versuche das mal hierher zu kopieren und das hatte so funktioniert. Allerdings habe ich alles drei Mal gemacht, weil ich drei SSDs in einen Mirror gelegt habe und möchte es nun aber nur einmal kopieren.
SWAP habe ich darauf keinen angelegt. Das müsstest du dir noch hinzu denken.

DIE ESP und der PMBR
Code:
# gpart create -s gpt ada0
# gpart bootcode -b /boot/pmbr ada0
# gpart add -t efi -l EFISYS -a 100m -s 500m ada0
# newfs_msdos -F 16 -L EFISYS /dev/ada0p1
# mkdir efi0
# mount -t msdosfs -o rw /dev/ada0p1 efi0
# mkdir -p efi0/efi/boot
# cp /boot/loader.efi efi0/efi/boot/BOOTx64.efi
# umount efi0
# rm -r efi0

Der ZFS-Pool
Code:
# gpart add -t freebsd-zfs -l Celsius -a 100m ada0
# zpool create -R /tmp/Celsius Celsius mirror /dev/ada0p2...
# zfs get compression Celsius
NAME     PROPERTY     VALUE           SOURCE
Celsius  compression  off             default
pit@Celsius /home/pit:-# zfs get atime Celsius
NAME     PROPERTY  VALUE  SOURCE
Celsius  atime     on     default
pit@Celsius /home/pit:-# zfs get checksum Celsius
NAME     PROPERTY  VALUE      SOURCE
Celsius  checksum  on         default
pit@Celsius /home/pit:-# zfs set atime=off Celsius
pit@Celsius /home/pit:-# zfs set compression=lz4 Celsius

pit@Celsius /home/pit:-# zfs snap -r PitPool@send
pit@Celsius /home/pit:-# zfs send -R PitPool@send | zfs recv -Fduv Celsius

# zpool set bootfs=Celsius/ROOT/default Celsius
# zpool list
NAME               SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
Celsius            928G   143G   785G        -         -     0%    15%  1.00x    ONLINE  /tmp/Celsius
.....

# zfs mount Celsius/ROOT/default && mount | grep Cels
Celsius/ROOT/default on /tmp/Celsius (zfs, local, noatime, nfsv4acls)
# cd /tmp/Celsius
# ee boot/loader.conf ....
# cd
# zfs unmount Celsius/ROOT/default
# zpool export Celsius

Ohne Gewähr.

Edit:
heute nehme ich übrigens lieber FAT32 für die EFI-SP, etwa:
Code:
# newfs_msdos -F 32 -L EFISYS -c 1 -m 0xf8 /dev/ada1p1
 
Wenn ich neu installieren muss, dann probiere ich mal das Script von Dir aus, @skunk .
Kann man das auch nachträglich laufen lassen? Unterstützt das auch GNUStep und WindowMaker?
Gedacht ist das Script hauptsächlich zur Autodetektion/Autokonfiguration der Grafikkarten.
Die Installation von DE/WM und Applikationen ist nur Übergangsbehelf, da das eigentlich so geplant ist, nach dem Start des Skripts Xorg zu autokonfigurieren und dann alles per Webinterface mittels Apache mit suexec + Browser statt mit dialog(8) zu machen.
Es ist also quasi ein "Bootstrap"-Skript im bsdinstall-Look+Feel, um Desktop und Apps betriebsbereit draufzuklatschen und zu konfigurieren, um sich Stunden mühseliger Installiererei und Konfigurationsdateien-Editiererei zu sparen.

Derzeit angeboten sind KDE, Gnome, Mate, Xfce und FVWM. Was man sonst noch so will, kann man sich per pkg dazu installieren. Habe halt nur die wichtigsten DE dazugemacht, weil jedes einen anderen Start in der .xinitrc braucht und ich nicht für jeden einzelnen die richtigen Kommandos herausfinden will.

Edit:
Man kann es auch nachträglich laufen lassen (Option -c), wenn man z.B. die Grafikkarte gewechselt oder eine weitere hinzugefügt hat, um die richtigen Treiber zu installieren und die passende xorg.conf zu generieren. Es setzt allerdings voraus, dass die vorhergehende Installation auch damit durchgeführt wurde, da die eingerichteten Boot-Environments u.a. quasi als "Flags" für den Installationsfortschritt genutzt werden.
Deine Anregung ist allerdings nicht schlecht. Ich werde wohl noch eine Option dazufügen, damit man das auch auf anders installierten Systemen nutzen kann, um sich eine ordentliche xorg.conf anfertigen zu lassen und die richtigen Treiber zu installieren, und die weitere Konfiguration vorzunehmen, so dass auch suspend+resume funktioniert (haben ja viele Probleme mit).
 
Zuletzt bearbeitet:
Ja, die kommen mit. Was allerdings nicht mitkommt, ist der bootfs-Property. Denn das liegt auf dem Pool selbst. Ohne es findet der Loader das Root-Dateisystem nicht. Daher braucht es etwas in dieser Art: zpool set bootfs=pool/und/dataset pool
 
Die Properties kommen dann bei "zfs send" nicht mit, richtig?
ich weiß nicht, ob ich in meinem Fall eine vorauseilende Vorsicht an den Tag gelegt habe oder ob ich da früher schon mal andere Erfahrung gemacht hatte und die properties anschließend falsch geraten waren. Wie das so ist, hat man mal einen Weg gefunden und notiert, ist es sehr viel einfacher, den immer wieder zu reproduzieren, als nochmals nachzulesen und neu zu lernen.
Den ersten Versuch mit einem send | recv startete ich mit einem FreeBSD 7 und damals hatten wir noch ein ganz anderes ZFS.
Mein derzeitiges System war irgendwann mal ein FreeBSD 9 oder 10 und lag auf SAS-HDs. Seither bekam es nicht nur SW-Updates, sondern mehrere Male neue SSDs und neues Mainboard mit RAM etc. Bei jedem Festplatten/SSD Tausch machte ich immer so ziemlich die gleiche Prozedur, wie ich sie oben hingestellt habe. Und bei jedem neuen PC, etwa meinen Laptops, da machte ich das auch, nur eben übers Netz und bekam so jeweils ein geklontes System.

Was ich dabei nicht zeigte: ich machte diese Prozedur wenigstens doppelt, nämlich zuerst immer auf eine externe Platte. Damit hatte ich nicht nur ein weiteres Backup, sondern konnte bequem testen, wie erfolgreich meine Aktionen gewesen sind.
Das scheint mir im Nachhinein übrigens kein schlechter Tip zu sein, solch einen Backup des Systems auch regelmäßig zu ziehen. Nicht unbedingt nötig, klar, ein System ist ja schnell wieder installiert und man hat ja Redundanz und ständiges Backup eh zur Verfügung.
Aber zB kann in einem recht billigen Gehäuse eine SSD eingebaut und extern an USB3 angeschlossen werden. Fallen irgendwie plötzlich alle anderen SSDs im Rechner aus und vielleicht auch noch das MainBoard und Sturm und Erdbeben... nimmt man einfach seine externe Platte und bootet davon und wenn man möchte, steckt man sie intern ein und dann geht das auch nochmal flotter.
Ich selbst habe das bisher nicht gemacht und vertraue meiner Redundanz/Backup und vorsorglich HW-erneuern Strategie.
 
So, kurze Rückmeldung.
Mithilfe der ganzen Tipps hier hat das hervorragend funktioniert. Mein neuer Pool heißt jetzt zwar rootz anstelle von zroot, aber das hat nicht wirklich gestört, da ich keinen Eintrag in der loader.conf habe.
Das Fragen und Einlesen hat jetzt mehr Zeit gekostet, als die Durchführung mittels Snapshot uns zfs send | zfs receive :-D.
 
Zurück
Oben