Ajout d’un disque de réserve sous Proxmox

Nous le savons tous, un disque dur n’est pas éternel. Un jour ou l’autre, une défaillance apparaitra.

Afin de mettre une “sécurité” devant l’inévitable, je vous propose dans cet article une manière d’ajouter un disque de réserve. Ceci afin qu’il puisse prendre le relais à la suite d’une dégradation du matériel de stockage.

Pour précision, nous parlons de Proxmox dans sa version 6. De plus l’installation est composée de 2 disques montés en RAID1 par le biais de ZFS. Le troisième en tant que réserve. Enfin la machine se trouve en UEFI.

Je ne détaille pas l’installation de Proxmox pour la mise en place du RAID. Si les trois disques sont déjà présent sur la machine, éviter de sélectionner le dernier disque lors de la création du volume.

Dans un premier temps, regardons l’état du pool. Et la disponibilités des disques.

zpool status rpool
root@pve1:~# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME                                             STATE     READ WRITE CKSUM
        rpool                                            ONLINE       0     0     0
          mirror-0                                       ONLINE       0     0     0
            ata-VBOX_HARDDISK_VBd8aaf3ea-8875ef0f-part3  ONLINE       0     0     0
            ata-VBOX_HARDDISK_VB2c07874e-9456f4b3-part3  ONLINE       0     0     0

errors: No known data errors
lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk 
├─sda1   8:1    0 1007K  0 part 
├─sda2   8:2    0  512M  0 part 
└─sda3   8:3    0 79.5G  0 part 
sdb      8:16   0   80G  0 disk 
├─sdb1   8:17   0 1007K  0 part 
├─sdb2   8:18   0  512M  0 part 
└─sdb3   8:19   0 79.5G  0 part 
sdc      8:32   0   80G  0 disk 
sr0     11:0    1 1024M  0 rom

On se retrouve bien avec notre pool en bonne santé ainsi que nos trois disques. De part la conception de Promox, il n’est pas possible de simplement rajouter le disque en réserve. Il faut au préalable créer les partitions. Puis installer le boot sur le disque. Ceci afin de toujours avoir une machine qui boot, si par malheur il restais que le disque de réserve en bon état.

Pour cela nous allons utiliser “sgdisk”. ATTENTION, il y a un risque de perte de donnée. Prêter une attention particulière lors de la validation des commandes.

On s’occupe dans un premier temps du partitionnement de notre disque de réserve. Et on affect un GUID avec un random.

sgdisk /dev/sda -R /dev/sdc
sgdisk --randomize-guids /dev/sdc
The operation has completed successfully.

On passe à l’installation du boot, afin d’avoir un disque bootable en UEFI. Prenez soins de bien prendre la partition 2.

pve-efiboot-tool format /dev/sdc2
UUID="CD84-80B2" SIZE="536870912" FSTYPE="vfat" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="sdb" MOUNTPOINT=""
Formatting '/dev/sdb2' as vfat..
mkfs.fat 4.1 (2017-01-24)
Done.
pve-efiboot-tool init /dev/sdc2
Re-executing '/usr/sbin/pve-efiboot-tool' in new private mount namespace..
UUID="F71F-0D8D" SIZE="536870912" FSTYPE="vfat" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="sdc" MOUNTPOINT=""
Mounting '/dev/sdc2' on '/var/tmp/espmounts/F71F-0D8D'.
Installing systemd-boot..
Created "/var/tmp/espmounts/F71F-0D8D/EFI/systemd".
Created "/var/tmp/espmounts/F71F-0D8D/EFI/BOOT".
Created "/var/tmp/espmounts/F71F-0D8D/loader".
Created "/var/tmp/espmounts/F71F-0D8D/loader/entries".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/var/tmp/espmounts/F71F-0D8D/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/var/tmp/espmounts/F71F-0D8D/EFI/BOOT/BOOTX64.EFI".
Created EFI boot entry "Linux Boot Manager".
Configuring systemd-boot..
Unmounting '/dev/sdc2'.
Adding '/dev/sdc2' to list of synced ESPs..
Refreshing kernels and initrds..
Running hook script 'pve-auto-removal'..
Running hook script 'zz-pve-efiboot'..
Copying and configuring kernels on /dev/disk/by-uuid/CD83-8D0E
        Copying kernel and creating boot-entry for 5.0.15-1-pve
WARN: /dev/disk/by-uuid/CD84-80B2 does not exist - clean '/etc/kernel/pve-efiboot-uuids'! - skipping
Copying and configuring kernels on /dev/disk/by-uuid/F71F-0D8D
        Copying kernel and creating boot-entry for 5.0.15-1-pve

Voilà le disque est fin prêt pour être ajouté comme disque de réserve. Là encore il est important de prendre la bonne partition. Ici c’est la numéro 3 et contenant le UUID.

ls -al /dev/disk/by-id/*-part3
lrwxrwxrwx 1 root root 10 Aug 27 19:50 /dev/disk/by-id/ata-VBOX_HARDDISK_VB2c07874e-9456f4b3-part3 -> ../../sdb3
lrwxrwxrwx 1 root root 10 Aug 27 19:58 /dev/disk/by-id/ata-VBOX_HARDDISK_VBd8aaf3ea-8875ef0f-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 Aug 27 19:58 /dev/disk/by-id/ata-VBOX_HARDDISK_VBe3666faa-a310b447-part3 -> ../../sdc3
zpool add rpool spare ata-VBOX_HARDDISK_VBe3666faa-a310b447-part3
zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME                                             STATE     READ WRITE CKSUM
        rpool                                            ONLINE       0     0     0
          mirror-0                                       ONLINE       0     0     0
            ata-VBOX_HARDDISK_VBd8aaf3ea-8875ef0f-part3  ONLINE       0     0     0
            ata-VBOX_HARDDISK_VB2c07874e-9456f4b3-part3  ONLINE       0     0     0
        spares
          ata-VBOX_HARDDISK_VBe3666faa-a310b447-part3    AVAIL   

errors: No known data errors

A noter que par défaut le remplacement automatique suite à la défaillance de disque n’est pas actif sur le pool. On prend soin de l’activer.

zpool set autoreplace=on rpool
zpool get autoreplace rpool
NAME   PROPERTY     VALUE    SOURCE
rpool  autoreplace  on       local

Il faut aussi joindre le package “zfs-zed”, afin d’avoir le daemon pour assurer le contrôle du pool

apt install zfs-zed

Nous y voilà, notre disque se trouve configuré et au sien de notre pool en tant que disque de réserve !!

En complément, ce que cela donne après la perte des deux premiers disques et le remplacement d’un par celui de réserve.

Réalisable par biais de VirtualBox en retirant les deux disques un après l’autre. Sachant qu’il est préférable de faire le test dans un environnement virtuel.

Et n’oubliant pas de remplacer le premier par celui de réserve avant de retirer le deuxième disque si vous n’avez pas activer le remplacement automatique.

zpool replace rpool 2359848985630563648 sdb3
  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: resilvered 942M in 0 days 00:00:10 with 0 errors on Tue Aug 27 20:16:51 2019
config:

        NAME                       STATE     READ WRITE CKSUM
        rpool                      DEGRADED     0     0     0
          mirror-0                 DEGRADED     0     0     0
            spare-0                DEGRADED     0     0     0
              2359848985630563648  UNAVAIL      0     0     0  was /dev/disk/by-id/ata-VBOX_HARDDISK_VBd8aaf3ea-8875ef0f-part3
              sda3                 ONLINE       0     0     0
            6155453523628784286    UNAVAIL      0     0     0  was /dev/disk/by-id/ata-VBOX_HARDDISK_VB2c07874e-9456f4b3-part3
        spares
          sda3                     INUSE     currently in use

errors: No known data errors

Nous sommes dans un situation extrême, malgré tout nous pouvons toujours faire les opérations nécessaire à la remise en état. Cela sans perte de donnée. Pensez juste à pas trainer :).

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *