Boot-Device Replacement - Proxmox ZFS Mirror Disk austauschen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

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.

Proxmox optimierte Server kaufen

Empfehlung - Testumgebung

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.

Ausgefallenen Datenträger identifizieren

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.

Vor dem Ausfall

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

Nach dem Ausfall

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.

Partition Layout kopieren

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.

Datenträger ID herausfinden (by-id)

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

ZFS Datenträger austauschen

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

Datenträger Austausch finalisieren

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.

Einzelnachweise

  1. ZFS on Linux (pve.proxmox.com) Abschnitt Changing a failed device im Unterkapitel 3.8.5.


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.


Das könnte Sie auch interessieren

Android App - Proxmox VE Web-UI
Maintenance Mode Proxmox VE aktivieren
NIC Interface Status in Proxmox VE Web-UI anzeigen