FreeBSD - Festplatte im Root ZFS Pool wechseln
Ich plane irgendwann in der Zukunft den Betrieb meiner Server von Debian auf FreeBSD umzustellen. Auch wenn meine Bemühungen FreeBSD auf meinem Thinkpad X201 zu installieren immer noch am Suspend/Resume scheitern habe ich jetzt über Freenas schon einiges an Erfahrungen sammeln können.
Da hier kein Zeitdruck vorhanden ist aber viel Neues ansteht gilt es erstmal einiges zu testen und auszuprobieren. Da ich in der Vergangenheit schon einige Male meine Festplatte tauschen musste wollte ich diesen sensiblen Usecase vorab einmal ausprobieren. Also habe ich auf Proxmox eine Standardinstallation mit zwei Festplatten durchgeführt. Mit folgenden Befehlen konnte ich auf Basis dieses Beitrages den Zyklus einmal durchlaufen.
Wir beginnen mit 2 Platten wobei von der 2. gestartet wird. In Proxmox habe ich dann die Platte 1 entfernt, eine leere neue wieder eingebaut und gebootet.
zpool status
pool: zroot
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-2Q
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
7039742516796718660 UNAVAIL 0 0 0 was /dev/ada0p3
ada1p3 ONLINE 0 0 0
Zuerst gilt es die Festplattenpartitionen gleichzuziehen.
#/sbin/gpart backup ada1 | /sbin/gpart restore -F ada0
Dann sieht es so aus
gpart show ada0
=> 40 276823984 ada0 GPT (132G)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 4194304 2 freebsd-swap (2.0G)
4196352 184545280 3 freebsd-zfs (88G)
188741632 88082392 - free - (42G)
gpart show ada1
=> 40 188743600 ada1 GPT (90G)
40 1024 1 freebsd-boot (512K)
1064 984 - free - (492K)
2048 4194304 2 freebsd-swap (2.0G)
4196352 184545280 3 freebsd-zfs (88G)
188741632 2008 - free - (1.0M)
Jetzt kann ich die neue 3. Partition an die Stelle der Alten setzten
zpool replace zroot 7039742516796718660 /dev/ada0p3
Make sure to wait until resilver is done before rebooting.
If you boot from pool 'zroot', you may need to update
boot code on newly attached disk '/dev/ada0p3'.
Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
Jetzt wird erstmal das zfs wieder aufgebaut.
zpool status
pool: zroot
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Mon Nov 16 11:32:34 2020
536M scanned at 14.9M/s, 180M issued at 5.01M/s, 536M total
176M resilvered, 33.65% done, no estimated completion time
config:
NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
replacing-0 UNAVAIL 0 0 0
7039742516796718660 UNAVAIL 0 0 0 was /dev/ada0p3/old
ada0p3 ONLINE 0 0 0
ada1p3 ONLINE 0 0 0
Irgendwann ist der Prozess dann fertig
zpool status
pool: zroot
state: ONLINE
scan: resilvered 536M in 0 days 00:01:54 with 0 errors on Mon Nov 16 11:34:28 2020
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada1p3 ONLINE 0 0 0
Jetzt sollten die Daten gleich sein aber ich kann von der ersten Platte noch nicht booten
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
partcode written to ada0p1
bootcode written to ada0
Um das zu testen habe ich im Proxmox jetzt das Bootdevice von Disk1 auf Disk0 umgestellt und konnte booten.
Um den Kreislauf einmal durchzugehen habe ich jetzt das Ganze noch einmal geprüft und den Prozess mit dem Auswechseln der zweiten Festplatte simuliert.
zpool status
pool: zroot
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-2Q
scan: resilvered 536M in 0 days 00:01:54 with 0 errors on Mon Nov 16 11:34:28 2020
config:
NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
ada0p3 ONLINE 0 0 0
11749512230780404159 UNAVAIL 0 0 0 was /dev/ada1p3
/sbin/gpart backup ada0 | /sbin/gpart restore -F ada1
zpool replace zroot 11749512230780404159 /dev/ada1p3
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
Dann konnte nach dem Reboot die Startplatte wieder auf Disk 1 stellen und erfolgreich starten.
Hoffentlich klappt das auch mal wenn es um einen Server in einem entfernten RZ geht.