Table des matières

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

Sur le 2ème disque

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

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: <none>

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: <none>

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.