Diese Anleitung beschreibt den Austausch eines Boot-Devices in einem Proxmox VE (PVE) Host System mit ZFS-Mirror. Ein solcher Austausch wird notwendig, wenn ein Datenträger im Verbund beschädigt bzw. ausgefallen ist. Sie erfahren, welche Schritte nach einem Ausfall einer Systemfestplatte zu tun sind. Es werden Wege für die verschiedenen Boot-Loader (GRUB oder systemd-boot) aufgezeigt. Außerdem erfahren Sie, wie Sie den Austausch einer Festplatte innerhalb von PVE vornehmen können, sodass Ihr Mirror wieder vollständig Online, Healthy und die Redundanz des Betriebssystems wiederhergestellt ist.
Alle beschriebenen Schritte lassen sich vorab in einer Testumgebung durchführen. Erstellen Sie hierzu ein Virtual Machine in Proxmox VE und installieren dort PVE auf ein ZFS RAID-1.
Dadurch sammeln Sie Erfahrung mit dem Vorgang und verringern das Risiko für Ihr Produktivsystem.
Zuerst muss der ausgefallene Datenträger und dessen Bezeichnung in Ihrem PVE System in Erfahrung gebracht werden. Dies können Sie z.B. mit dem Kommando lsblk herausfinden.
Nach der Installation sind zwei Boot-Datenträger vorhanden (sda und sdb):
root@pve-virtual-01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part └─sda3 8:3 0 99.5G 0 part sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1007K 0 part ├─sdb2 8:18 0 512M 0 part └─sdb3 8:19 0 99.5G 0 part
In diesem Test-Szenario ist die Festplatte sda ausgefallen, sie fehlt nach dem Ausfall in der lsblk Ausgabe:
root@pve-virtual-01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1007K 0 part ├─sdb2 8:18 0 512M 0 part └─sdb3 8:19 0 99.5G 0 part
WICHTIG: Bei Austausch eines Datenträgers ändern sich ggfs. die Bezeichnungen. Prüfen Sie die genaue Bezeichnung immer direkt, nachdem der kaputte Datenträger durch einen neuen Datenträger ersetzt wurde! Eine fehlerhafte Angabe der Bezeichnung kann ihr System bei den weiteren Schritten unwiederbringlich zerstören.
Diese folgenden beiden Schritte sind sowohl für GRUB, als auch für systemd-boot relevant und müssen in beiden Fällen durchgeführt werden. Diese Information finden Sie auch immer in der aktuellen Proxmox VE Dokumentation.[1]
# sgdisk <healthy bootable device> -R <new device> # sgdisk -G <new device> # zpool replace -f <pool> <old zfs partition> <new zfs partition>
Der neue Datenträger ist im System und hat noch kein Partitions-Layout. Wir benötigen aber die Partitionen, damit das System einwandfrei booten kann und wir zwei technisch identische Datenträger für das ZFS bereitstellen können:
root@pve-virtual-01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1007K 0 part ├─sdb2 8:18 0 512M 0 part └─sdb3 8:19 0 99.5G 0 part
Wir kopieren nun das Partitionslayout des gesunden Datenträgers auf den neuen Datenträger. Noch einmal der Hinweis, dass Sie vorher UNBEDINGT die richtige Datenträger-Bezeichnung (Device-Name) mittels lsblk identifizieren müssen. Ansonsten droht ein kaputtes Proxmox-VE System, da ggf. versehentlich das Partitions-Layout des neuen Datenträgers auf den alten Datenträger repliziert wird. Dies hätte zur Folge, dass das System dann gar nicht mehr booten kann und Sie neu installieren müssen.
root@pve-virtual-01:~# sgdisk /dev/sdb -R /dev/sda The operation has completed successfully. root@pve-virtual-01:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1007K 0 part ├─sda2 8:2 0 512M 0 part └─sda3 8:3 0 99.5G 0 part sdb 8:16 0 100G 0 disk ├─sdb1 8:17 0 1007K 0 part ├─sdb2 8:18 0 512M 0 part └─sdb3 8:19 0 99.5G 0 part
Da wir das Layout auf den neuen Datenträger kopiert haben, sind nun auch dieselben GUIDs für den Datenträger und die Partitionen vorhanden. Deswegen müssen wir diese noch randomisieren:
root@pve-virtual-01:~# sgdisk -G /dev/sda The operation has completed successfully.
Damit wir den Datenträger korrekt im ZFS austauschen können, müssen wir die ID des neuen Datenträgers herausfinden. In diesem Fall suchen wir nach dem Datenträger, der mit dem Device-Namen sda verbunden ist.
root@pve:~# ls -l /dev/disk/by-id/* lrwxrwxrwx 1 root root 9 Mar 16 15:11 /dev/disk/by-id/ata-QEMU_DVD-ROM_QM00003 -> ../../sr0 lrwxrwxrwx 1 root root 9 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0 -> ../../sda lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3 -> ../../sda3 lrwxrwxrwx 1 root root 9 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1 -> ../../sdb lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2 -> ../../sdb2 lrwxrwxrwx 1 root root 10 Mar 16 15:11 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part3 -> ../../sdb3
PVE legt bei den Datenträgern immer zweckgebundene Partitionen an:
Device Start End Sectors Size Type /dev/sda1 34 2047 2014 1007K BIOS boot /dev/sda2 2048 1050623 1048576 512M EFI System /dev/sda3 1050624 209715166 208664543 99.5G Solaris /usr & Apple ZFS
In diesem Fall benötigen wir die Device-ID (by-id) von der Partition /dev/sda3. Diese lautet hier:
/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3
Zuerst überprüfen wir den ZFS Pool Status. Hier sehen wir, dass die ausgefallene Festplatte nicht mehr im System ist und vorher die ID /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3 hatte.
root@pve-virtual-01:~# zpool status -v
pool: rpool
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
15467202543801207082 UNAVAIL 0 0 0 was /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3
scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part3 ONLINE 0 0 0
Nun tauschen wir die Datenträger aus:
# Wichtig: In diesem Beispiel hat unsere neue Festplatte die gleiche ID wie die alte Festplatte. Das wird in Ihrem Real-Szenario nicht der Fall sein. Bitte halten Sie die Syntax ein: zpool replace -f rpool /dev/disk/by-id/ID-ALTE-FESTPLATTE /dev/disk/by-id/ID-NEUE-FESTPLATTE root@pve-virtual-01:~# zpool replace -f rpool /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3 /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3 # Make sure to wait until resilver is done before rebooting.
Damit ist der Austausch vollzogen. Davor können Sie noch prüfen, ob das RAID-1 (ZFS-Mirror) nun wieder Online und Healthy ist:
root@pve-virtual-01:~# zpool status -v
pool: rpool
state: ONLINE
scan: resilvered 998M in 0 days 00:00:08 with 0 errors on Tue Mar 16 12:16:34 2021
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part3 ONLINE 0 0 0
scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part3 ONLINE 0 0 0
Zuletzt müssen noch Schritte durchgeführt werden, damit das System reboot fest und funktional ist.
Jetzt müssen Sie noch folgende Schritte mit dem Tool proxmox-boot-tool durchführen: Zuerst müssen Sie wie im Schritt Datenträger ID herausfinden (by-id) die Datenträger-ID herausfinden - dieses mal aber die ID der zweiten Partition, da diese immer für das EFI System verwendet wird. Sobald Sie die ID herausgefunden haben (in diesem Fall /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part2), können Sie die folgenden Befehle ausführen:
root@pve:~# proxmox-boot-tool format /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2
UUID="" SIZE="536870912" FSTYPE="" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="sdb" MOUNTPOINT=""
Formatting '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2' as vfat..
mkfs.fat 4.2 (2021-01-31)
Done.
root@pve:~# proxmox-boot-tool init /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2
Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
UUID="FD52-5CAE" SIZE="536870912" FSTYPE="vfat" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="sdb" MOUNTPOINT=""
Mounting '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2' on '/var/tmp/espmounts/FD52-5CAE'.
Installing systemd-boot..
Created "/var/tmp/espmounts/FD52-5CAE/EFI/systemd".
Created "/var/tmp/espmounts/FD52-5CAE/EFI/BOOT".
Created "/var/tmp/espmounts/FD52-5CAE/loader".
Created "/var/tmp/espmounts/FD52-5CAE/loader/entries".
Created "/var/tmp/espmounts/FD52-5CAE/EFI/Linux".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/var/tmp/espmounts/FD52-5CAE/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/var/tmp/espmounts/FD52-5CAE/EFI/BOOT/BOOTX64.EFI".
Random seed file /var/tmp/espmounts/FD52-5CAE/loader/random-seed successfully written (512 bytes).
Not installing system token, since we are running in a virtualized environment.
Created EFI boot entry "Linux Boot Manager".
Configuring systemd-boot..
Unmounting '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2'.
Adding '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1-part2' to list of synced ESPs..
Refreshing kernels and initrds..
Running hook script 'proxmox-auto-removal'..
Running hook script 'zz-proxmox-boot'..
Copying and configuring kernels on /dev/disk/by-uuid/5D2E-4BFB
Copying kernel and creating boot-entry for 5.15.30-2-pve
WARN: /dev/disk/by-uuid/5D2F-103F does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping
Copying and configuring kernels on /dev/disk/by-uuid/FD52-5CAE
Copying kernel and creating boot-entry for 5.15.30-2-pve
root@pve:~# proxmox-boot-tool status
Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
System currently booted with uefi
5D2E-4BFB is configured with: uefi (versions: 5.15.30-2-pve)
WARN: /dev/disk/by-uuid/5D2F-103F does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping
FD52-5CAE is configured with: uefi (versions: 5.15.30-2-pve)
root@pve:~# proxmox-boot-tool refresh
Running hook script 'proxmox-auto-removal'..
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
Copying and configuring kernels on /dev/disk/by-uuid/5D2E-4BFB
Copying kernel and creating boot-entry for 5.15.30-2-pve
WARN: /dev/disk/by-uuid/5D2F-103F does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping
Copying and configuring kernels on /dev/disk/by-uuid/FD52-5CAE
Copying kernel and creating boot-entry for 5.15.30-2-pve
root@pve:~# proxmox-boot-tool clean
Checking whether ESP '5D2E-4BFB' exists.. Found!
Checking whether ESP '5D2F-103F' exists.. Not found!
Checking whether ESP 'FD52-5CAE' exists.. Found!
Sorting and removing duplicate ESPs..
root@pve:~# proxmox-boot-tool status
Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
System currently booted with uefi
5D2E-4BFB is configured with: uefi (versions: 5.15.30-2-pve)
FD52-5CAE is configured with: uefi (versions: 5.15.30-2-pve)
Danach ist das System reboot fest und nun wieder vollständig redundant und sicher ausgelegt.
|
Autor: Jonas Sterr Ich beschäftige mich mit den Themen Software Defined Storage, Proxmox Virtualisierung auf Basis von KVM, QEMU & Ceph im Produktmanagement der Thomas-Krenn.AG in Freyung. Proxmox ist meine absolute Leidenschaft und ich freue mich gerne über Kontaktanfragen und einen Austausch auf LinkedIn.
|