
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 :).
Leave a Reply