J'ai déjà expliqué comment créer un RAID1 sur un système UEFI avec mdadm sous Debian. Vous pouvez retrouver ce merveilleux tutoriel ici. Je vais maintenant expliquer comment étendre un RAID1 mdadm sur un système UEFI en RAID5, car il est courant d'avoir besoin de plus d'espace disque au fil du temps.
Dans cet article, je suppose qu'un RAID1 UEFI, configuré avec deux disques de 20G, est déjà parfaitement fonctionnel. Un troisième disque de 20G sera ajouté pour former un RAID5.
Et comme je suis de bonne humeur, je vais vous montrer comment le faire avec et sans LVM (oui, oui, ne me remerciez pas ! En fait, si, vous pouvez le faire… 😊).
⚠️Avant toute chose, comme toujours lorsqu'il s'agit de configuration de disques, il est essentiel de réaliser une sauvegarde. Les données seront tout simplement irrécupérables si le serveur redémarre pendant le processus (très long !) de conversion de RAID1 en RAID5. Vous voila prévenu !⚠️
J'ai effectué plusieurs tests lors de la rédaction de cet article. En effet, après avoir migré la partition root (qui inclut ici la partition /boot/) vers un RAID5, le système ne démarrait plus normalement et basculait en mode de récupération GRUB. Ce qui est étrange, c'est que le système démarre normalement si l'on entre d'abord dans le menu de démarrage UEFI et que l'on sélectionne manuellement l'une des partitions de démarrage EFI. J'ai observé ce comportement sur VMware ESXi et Proxmox VE. Heureusement, cela semble fonctionner hors machine virtuelle : j'ai testé avec succès sur un Dell PowerEdge T630. Si vous avez une explication, je serais ravi de l'entendre !
En résumé, faites toujours des sauvegardes. Idéalement, testez avant de passer en production.
Maintenant que vous êtes prévenu, passons au tutoriel !
Comme expliqué dans l’introduction, nous commençons avec un RAID1 UEFI fonctionnel.
root@host:~# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual disk
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: F89D780E-776F-4CFF-A096-2F13B8435BE4
Device Start End Sectors Size Type
/dev/sda1 2048 98303 96256 47M EFI System
/dev/sda2 98304 39159807 39061504 18.6G Linux RAID
/dev/sda3 39159808 41940991 2781184 1.3G Linux RAID
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual disk
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: 580CC43C-5BED-45D4-B2B5-FD460A3EC1A1
Device Start End Sectors Size Type
/dev/sdb1 2048 98303 96256 47M EFI System
/dev/sdb2 98304 39159807 39061504 18.6G Linux RAID
/dev/sdb3 39159808 41940991 2781184 1.3G Linux RAID
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@host:~# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md100 : active raid1 sda1[0] sdb1[2]
48064 blocks super 1.0 [2/2] [UU]
md1 : active (auto-read-only) raid1 sda3[0] sdb3[1]
1388544 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda2[1] sdb2[0]
19513344 blocks super 1.2 [2/2] [UU]
root@host:~# apt update && apt install gdisk
root@host:~# sgdisk /dev/sdb -R /dev/sdc
root@host:~# sgdisk -G /dev/sdc
root@host:~# efibootmgr --create --disk /dev/sdc --part 1 --label "debian3" --loader "\EFI\debian\shimx64.efi"
root@host:~# mdadm --grow /dev/md100 --raid-devices=3 --add /dev/sdc1
root@host:~# mdadm --grow /dev/md0 --raid-device=3 --level=5 -a /dev/sdc2
root@host:~# cat /proc/mdstat
cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md100 : active raid1 sdc1[3] sdb1[0] sda1[2]
48064 blocks super 1.0 [3/3] [UUU]
md1 : active (auto-read-only) raid1 sda3[0] sdb3[1]
1388544 blocks super 1.2 [2/2] [UU]
md0 : active raid5 sdc2[2] sda2[0] sdb2[1]
19513344 blocks super 1.2 level 5, 64k chunk, algorithm 2 [3/3] [UUU]
[>....................] reshape = 0.3% (77596/19513344) finish=37.5min speed=8621K/sec
root@host:~# mdadm --grow /dev/md1 --raid-device=3 --level=5 -a /dev/sdc3
root@host:~# resize2fs /dev/md0
root@host:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 392M 700K 391M 1% /run
/dev/md0 37G 2.3G 33G 7% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/md100 47M 5.9M 41M 13% /boot/efi
tmpfs 392M 0 392M 0% /run/user/0
tmpfs 392M 0 392M 0% /run/user/1000
Pour la partition swap, il est nécessaire de la désactiver puis de la recréer. Cette modification implique de mettre à jour les entrées dans /etc/fstab et /etc/mdadm/mdadm.conf.
root@host:~# swapoff /dev/md1
root@host:~# mkswap /dev/md1
mkswap: /dev/md1: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2.6 GiB (2843734016 bytes)
no label, UUID=dfefc270-893d-4c77-930e-94d2985c9ab3
root@host:~# blkid /dev/md1
/dev/md1: UUID="dfefc270-893d-4c77-930e-94d2985c9ab3" TYPE="swap"
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/md0 during installation
UUID=869d77af-e5b0-4f17-bfd8-79245b6915d6 / ext4 errors=remount-ro 0 1
# /boot/efi was on /dev/sda1 during installation
#UUID=4FE8-AC32 /boot/efi vfat umask=0077 0 1
#/dev/md100 /boot/efi vfat umask=0077 0 1
/dev/md100 /boot/efi vfat umask=0077,noauto,defaults 0 1
# swap was on /dev/md1 during installation
#OLD SWAP ENTRY: UUID=42f44cc3-025d-4a22-8510-647ff25338de none swap sw 0 0
UUID=dfefc270-893d-4c77-930e-94d2985c9ab3 none swap sw 0 0
#/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
RESUME=UUID=dfefc270-893d-4c77-930e-94d2985c9ab3
root@host:~# update-initramfs -u
root@host:~# swapon /dev/md1
root@host:~# swapon --show
NAME TYPE SIZE USED PRIO
/dev/md1 partition 2.6G 0B -2
C’est pratiquement la même chose, à la différence que nous devons utiliser la commande pvresize pour que notre LVM prenne en compte le nouvel espace. Comme on peut le voir, LVM apporte une grande flexibilité.
root@host:~# sgdisk /dev/sdb -R /dev/sdc
root@host:~# sgdisk -G /dev/sdc
root@host:~# efibootmgr --create --disk /dev/sdc --part 1 --label "debian3" --loader "\EFI\debian\shimx64.efi"
root@host:~# mdadm --grow /dev/md100 --raid-devices=3 --add /dev/sdc1
root@host:~# mdadm --grow /dev/md0 --raid-device=3 --level=5 -a /dev/sdc2
root@host:~# cat /proc/mdstat
root@host:~# pvresize /dev/md0
root@host:~# lvextend -r -L+2G /dev/mapper/vgos-lvhome
Contact :