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 eine Virtuelle Maschine 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.

Kurzanleitung

Dieser Abschnitt fasst die notwendigen Kommandos zum Austausch Ihres Datenträgers und deren Auswirkungen auf Ihr System kurz zusammen.

Achtung: Lesen Sie unbedingt die ausführliche Anleitung gründlich, wenn Sie diesen Vorgang zum ersten Mal durchführen oder noch unerfahren in der Administration von Proxmox VE-Systemen sind!

  1. Identifizieren Sie den defekten Datenträger und tauschen Sie ihn aus.
  2. Kopieren des Partition-Layouts des gesunden Datenträgers auf den Austausch-Datenträger (und randomisieren der GUID)
  3. Über die Datenträger-ID die ZFS-Partition herausfinden (Solaris /usr & Apple ZFS)
  4. Partition des neuen Datenträgers in den zpool kopieren
  5. Austausch mit dem proxmox-boot-tool finalisieren

Nach korrekter Durchführung aller Schritte ist ihr ZFS wieder Online, Healthy und bootfest.

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 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 gesunden 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 für boot, EFI und ZFS an:

root@pve:~# fdisk -l /dev/sda

Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7D6423DE-2A9C-4B8D-A272-C7B28E1452D9

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 67108830 66058207 31.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:

root@pve-virtual-01:~# zpool replace -f rpool /dev/disk/by-id/ID-ALTE-FESTPLATTE /dev/disk/by-id/ID-NEUE-FESTPLATTE

In unserem Beispiel:

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

Damit ist der Austausch vollzogen. Nun 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 folgende Befehle ausführen:
root@pve:~# proxmox-boot-tool format /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-part2

UUID="" SIZE="536870912" FSTYPE="" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="sdb" MOUNTPOINT=""
Formatting '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-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-scsi0-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-scsi0-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-scsi0-part2'.
Adding '/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-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

Hostname ändern in einem produktiven Proxmox Ceph HCI Cluster
Proxmox Node aus Cluster entfernen und erneut hinzufügen
Proxmox VE installieren