====== 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.