====== RAID + UEFI ======
Inspirer de ce très bon tuto en français => https://www.youtube.com/watch?v=SPnoYE8FzV8
===== Installation =====
Ici nous allons faire une installation de Debian 10 sur 2 disques en RAID 1 et le boot en UEFI
On lance l'installation sur une net install ou on devrait voir "Debian GNU/Linux UEFI Installer menu"
Si le terme UEFI n'apparait pas, vous devez configurer le BIOS pour que l'UEFI soit activé sinon, il n'est peut etre pas disponible et dans ce cas, pas la peine d'aller plus loin dans ce tuto.
Ensuite on va jusqu'à l'étape "Partitionner les disques".
La difficulté ici est que l'UEFI est incapable de lire ses fichiers d'amorçage sur un RAID. Il lui faut absolument une partition en FAT32 avec les flags BOOT et ESP
Créer de préférence une partition de table GPT sur les 2 disques.
Nous allons créer une partition FAT32 de 128Mo sur les 2 disques et mettre les flags BOOT et ESP uniquement sur le premier disque et on utilise le reste des disques pour faire une partition RAID
Sur le 1er disque
* Sélectionner l'espace libre
* Créer une nouvelle partition
* 128MB
* Début
* Utiliser comme Partition système EFI (ce qui implique FAT32 et flags BOOT et ESP)
* Indicateur d'amorçage présent
* Fin du paramétrage de cette partition
* Sélectionner l'espace libre
* Créer une nouvelle partition
* max
* Utiliser comme volume physique pour RAID
* Fin du paramétrage de cette partition
Sur le 2ème disque
* Sélectionner l'espace libre
* Créer une nouvelle partition
* 128MB
* Début
* Utiliser comme système de fichiers FAT32
* Point de montage aucun
* Fin du paramétrage de cette partition
* Sélectionner l'espace libre
* Créer une nouvelle partition
* max
* Utiliser comme volume physique pour RAID
* Fin du paramétrage de cette partition
Théoriquement on a donc nos partitions FAT32 en /dev/sda1 et /dev/sdb1 et le reste en /dev/sda2 et /dev/sdb2
En ligne de commande le RAID 1 se créerait comme ça
mdadm --create /dev/md0 -l1 -n2 /dev/sda2 /dev/sdb2
Un message d'avertissement indique que si le /boot est sur le RAID, il faut utiliser un metadata différent. Mais dans notre cas, on utilise UEFI et notre boot se situe hors du RAID.
Pour voir la construction du RAID on utilise la commande
watch cat /proc/mdstat
Astuce pour que ca aille plus vite
echo 99999999999 > /proc/sys/dev/raid/speed_limit_max
Ici on va utiliser le menu
* Configurer le RAID avec gestion logicielle
* On applique les changements
* Créer un périphérique multidisque
* RAID1
* 2 périphériques actifs
* 0 périphérique de réserve
* On sélectionne nos /dev/sda2 /dev/sdb2
* Terminer
* Cliquer sur la partition de RAID
* Utiliser comme système de fichiers journalisé btrfs
* Point de montage /
* Fin du paramétrage de cette partition
* Terminer le partitionnement et appliquer les changements
Ignorer l'alerte qui dit que votre partition FAT32 n'a pas de point de montage.
Si tout s'est bien passé, la suite de l'installation devrait bien se passer.
===== Configuration =====
A ce stade, le système EFI est disponible uniquement sur le 1er disque sur /dev/sda1. Nous allons configurer tout ça pour que le système boot sur n'importe quel disque dans le cas ou un des 2 disques serait HS
La commande suivante permet d'afficher toutes les partitions
# lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 vfat 99C7-2650 505,9M 1% /boot/efi
├─sda2 linux_raid_member edmc___:0 ada4f056-bff8-8e36-b3d2-f4fe60f5bb81
│ └─md0 btrfs 19cb67a4-43f2-4221-ae89-b07e6bdaeed3 108,3G 1% /
└─sda3 linux_raid_member edmc___:1 d2d5cbef-f935-553b-ad3e-bfba1e20bd1b
└─md1 swap 50e2e891-1891-4704-a46b-d2352a73175b [SWAP]
sdb
├─sdb1 vfat 46AF-038E
├─sdb2 linux_raid_member edmc___:0 ada4f056-bff8-8e36-b3d2-f4fe60f5bb81
│ └─md0 btrfs 19cb67a4-43f2-4221-ae89-b07e6bdaeed3 108,3G 1% /
└─sdb3 linux_raid_member edmc___:1 d2d5cbef-f935-553b-ad3e-bfba1e20bd1b
└─md1 swap 50e2e891-1891-4704-a46b-d2352a73175b [SWAP]
On va maintenant copier notre partition EFI sda1 sur notre 2ème disque sdb1. Pour cela on va formater notre 2eme partition et lui mettre le même UUID que la partition EFI (on note qu'il n'y a pas de tiret dans l'UUID)
# mkfs.vfat -i 99C72650 /dev/sdb1
On va maintenant configurer /etc/fstab pour qu'il monte les 2 partitions pour que le systeme puisse booter sur l'un des disques disponibles et aussi la possibilité de mettre à jour ces fichiers
vi /etc/fstab
On remplace ça
# /boot/efi was on /dev/sda1 during installation
UUID=99C7-2650 /boot/efi vfat umask=0077 0 1
par
# /boot/efi was on /dev/sda1 during installation
/dev/sda1 /boot/efi vfat umask=0077,nofail 0 1
/dev/sdb1 /boot/efi2 vfat umask=0077,nofail 0 1
L'option nofail est importante pour ne pas bloquer le démarrage si un des 2 disques est HS
On crée le répertoire /boot/efi2 puis on vérifie que efi2 ait les mêmes droits que efi
mkdir /boot/efi2
chmod 700 /boot/efi2
On teste le montage
# mount -a
# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev 3,9G 0 3,9G 0% /dev
tmpfs 789M 8,8M 780M 2% /run
/dev/md0 111G 1,1G 109G 1% /
tmpfs 3,9G 0 3,9G 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
/dev/sda1 511M 5,1M 506M 1% /boot/efi
tmpfs 789M 0 789M 0% /run/user/0
tmpfs 789M 0 789M 0% /run/user/1000
/dev/sdb1 511M 4,0K 511M 1% /boot/efi2
On copie maintenant le contenu de efi sur efi2
# rsync -av /boot/efi/ /boot/efi2/
sending incremental file list
EFI/
EFI/debian/
EFI/debian/BOOTX64.CSV
EFI/debian/fbx64.efi
EFI/debian/grub.cfg
EFI/debian/grubx64.efi
EFI/debian/mmx64.efi
EFI/debian/shimx64.efi
sent 5,322,140 bytes received 138 bytes 10,644,556.00 bytes/sec
total size is 5,320,417 speedup is 1.00
Il faut maintenant mettre le flags boot et ESP sur la partition /dev/sdb1
On va utiliser parted
apt install parted
# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: ATA KINGSTON SA400S3 (scsi)
Disk /dev/sdb: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 msftdata
2 538MB 119GB 118GB raid
3 119GB 120GB 999MB linux-swap(v1) raid
(parted) set 1 boot on
(parted) set 1 esp on
(parted) print
Model: ATA KINGSTON SA400S3 (scsi)
Disk /dev/sdb: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 boot, esp
2 538MB 119GB 118GB raid
3 119GB 120GB 999MB linux-swap(v1) raid
===== Vérification =====
On éteind tout et on débranche le disque 1. Le boot se passe bien, l'UEFI est chargé et grub est la. On vérifie l'état du RAID
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Nov 3 12:11:33 2019
Raid Level : raid1
Array Size : 115652608 (110.29 GiB 118.43 GB)
Used Dev Size : 115652608 (110.29 GiB 118.43 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Nov 3 15:10:19 2019
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : cantine:0 (local to host cantine)
UUID : ada4f056:bff88e36:b3d2f4fe:60f5bb81
Events : 1243
Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
- 0 0 1 removed
On recommence en débranchant le 2ème disque
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Nov 3 12:11:33 2019
Raid Level : raid1
Array Size : 115652608 (110.29 GiB 118.43 GB)
Used Dev Size : 115652608 (110.29 GiB 118.43 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Nov 3 15:14:37 2019
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : cantine:0 (local to host cantine)
UUID : ada4f056:bff88e36:b3d2f4fe:60f5bb81
Events : 1239
Number Major Minor RaidDevice State
- 0 0 0 removed
1 8 2 1 active sync /dev/sda2
J'ai écrit un fichier toto sur un disque et tata sur l'autre disque, maintenant on rebranche les 2 et on voit se qui se passe.
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Nov 3 12:11:33 2019
Raid Level : raid1
Array Size : 115652608 (110.29 GiB 118.43 GB)
Used Dev Size : 115652608 (110.29 GiB 118.43 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sun Nov 3 15:18:16 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : cantine:0 (local to host cantine)
UUID : ada4f056:bff88e36:b3d2f4fe:60f5bb81
Events : 1257
Number Major Minor RaidDevice State
0 8 2 0 active sync /dev/sda2
1 8 18 1 active sync /dev/sdb2
Je retrouve bien mon fichier tata mais en revanche le fichier toto a disparu...
On peut voir ici que notre RAID md1 (qui est la swap ici) est dans l'état pending
# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb2[1] sda2[0]
115652608 blocks super 1.2 [2/2] [UU]
bitmap: 1/1 pages [4KB], 65536KB chunk
md1 : active (auto-read-only) raid1 sda3[0] sdb3[1]
974848 blocks super 1.2 [2/2] [UU]
resync=PENDING
unused devices:
En fait il est en readonly, on va le repasser en lecture écriture
# mdadm --readwrite /dev/md1
# cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb2[1] sda2[0]
115652608 blocks super 1.2 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md1 : active raid1 sda3[0] sdb3[1]
974848 blocks super 1.2 [2/2] [UU]
[=======>.............] resync = 38.5% (375872/974848) finish=0.0min speed=187936K/sec
unused devices:
Je n'ai pas retourvé mon fichier toto.. conclusion, ne pas s'amuser à intervertir les disques. Dans le doute, reformatez le disque que vous allez remettre en place.