# Mise en place d'un RAID logiciel

Le RAID permet d'améliorer la tolérance aux pannes ou la performance en répartissant les données sur plusieurs disques durs.  
Les données sont réparties sur les disques de plusieurs manières, appelées niveaux RAID, en fonction du niveau de redondance et de performances requis.

# Réplication de données avec le RAID  logiciel

> **Attention : Le RAID n'est pas une solution de sauvegarde**, il s'agit d'une solution qui permet un rétablissement relativement rapide de la situation .  
> Avec un RAID de niveau 1 ou plus, les données sont copiées sur plusieurs disques. Lorsqu'un disque tombe en panne, le système continue de fonctionner avec ceux restant. C'est une solution de haute disponibilité pour des systèmes dont les services ou l'accès aux données ne doivent pas être interrompus.

<span style="text-decoration: underline;">**Définition du RAID 1:**</span> 2 disques minimum - Taille du plus petit disque - En RAID 1 vos données sont copiées sur deux disques ou plus. C'est-à-dire que chaque disque sera l'exacte copie du premier. Si l'un d'eux grille, il suffit de le remplacer pour créer une nouvelle copie sur ce nouveau disque.

L'exemple ci dessous va présenter comment mettre en place un montage RAID 1 **logiciel.** Le logiciel qui va nous permettre de remplir notre objectif s'appelle `<strong>mdadm</strong>`.

### Mise en place d'un système de réplication type RAID 1

#### Prérequis :

Avoir au moins 2 disques prêts à l'emploi. *L'utilisation de disques durs <abbr data-original-title="Serial Advanced Technology Attachment" title="">SATA</abbr>, est plus que recommandée, car ils permettent une extraction à chaud (Hot Plug).*

```bash
sudo apt update
sudo apt install mdadm
```

##### Configuration du serveur utilisé pour l'exemple

<table border="1" id="bkmrk-type-de-disque-ident" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 22.4969%;"></col><col style="width: 15.4512%;"></col><col style="width: 11.1494%;"></col><col style="width: 50.9025%;"></col></colgroup><tbody><tr><td>Type de Disque</td><td>Identification</td><td>Taille </td><td>Description</td></tr><tr><td>SDD</td><td>sda</td><td>10 Go</td><td>Disque utilisé pour le boot et la racine (`/`) du serveur </td></tr><tr><td>HDD</td><td>sdb</td><td>8 Go</td><td>Disque vierge à utiliser pour le RAID 1</td></tr><tr><td>HDD</td><td>sdc</td><td>8 Go</td><td>Disque vierge à utiliser pour le RAID 1</td></tr></tbody></table>

####   


#### Créer les partitions

Créez une partition de type RAID sur chaque disque dur à l'aide de l'outil `fdisk`.   
Exécutez les commandes suivantes pour chaque disque dur (`sdb` et `sdc`) :

```bash
sudo fdisk /dev/sdb
# n to create new partition
# p to create a primary partition
# enter
# enter
# enter
# t to change type of partition
# fd to select RAID LINUX
# w to save
```

####   


#### Créer le RAID 1

Créez le périphérique RAID 1 en utilisant `mdadm` :

```bash
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
# y to continue
```

Explication des arguments utilisé pour la commande `mdadm` :

- `-- create /dev/md0` C'est pour donner un nom au RAID
- `--level=1` C'est le type de RAID utilisé (0,1,5,6,10)
- `--raid-devices=2` Pour donner le nombre de disques que vous souhaitez utiliser
- `/dev/sdb1 /dev/sdc1` La liste des partitions à ajouter dans le RAID

Cela crée un périphérique RAID appelé `/dev/md0` avec un niveau RAID 1 utilisant les deux partitions que vous avez créées (`/dev/sdb1` et `/dev/sdc1`).

Une fois que le RAID est créé, vous pouvez formater le périphérique RAID avec le système de fichiers de votre choix (par exemple, `ext4`):

```bash
sudo mkfs.ext4 /dev/md0
```

On termine cette construction par la daemonisation du volume RAID, c'est-à-dire que nous allons faire en sorte que le système charge le volume à chaque démarrage :

```bash
mdadm --monitor --daemonise /dev/md0
```

A ce niveau de la procédure notre configuration ressemble à ceci :

```
root@debianVM:~# lsblk -f
NAME    FSTYPE            FSVER            LABEL           UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda                                                                                                            
└─sda1  ext4              1.0                              a305e837-99f5-4d7c-a293-4ffa11ca5441    1,2G    89% /
sdb                                                                                                            
└─sdb1  linux_raid_member 1.2              debianVM:0      6caf09bd-22a0-d6d6-a2ab-502641c28dfc                
  └─md0 ext4              1.0                              4479440e-6a32-45c3-a977-bd153d6e412b                
sdc                                                                                                            
└─sdc1  linux_raid_member 1.2              debianVM:0      6caf09bd-22a0-d6d6-a2ab-502641c28dfc                
  └─md0 ext4              1.0                              4479440e-6a32-45c3-a977-bd153d6e412b
```

On remarque que la partition `md0` partage le même UUID sur les 2 disques.

#### Monter le RAID 1

Pour monter notre RAID il suffit de créer un dossier à l'endroit voulu, dans notre cas ça sera `/mnt/raid`.

```bash
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
```

Pour automatiser le montage du RAID au démarrage du serveur éditer le fichier `/etc/fstab` pour mettre la ligne suivante :

```bash
UUID=2d2599e6-0925-4091-87f1-9f631cb7c709      /mnt/raid        ext4    defaults 0      2
# UUID correspond à l'uuid de la partition md0 
```

#### Finalisation

Enfin, redémarrez votre système ou montez manuellement le RAID avec `sudo mount -a`.

Pour vérifier le bon fonctionnement du RAID on peux utiliser la commande `cat /proc/mdstat`, ce qui donne :

```c
root@debianVM:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc1[1] sdb1[0]
      8382464 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>
```

Et notre configuration final ressemble à :

```
root@debianVM:~# lsblk -f
NAME    FSTYPE            FSVER            LABEL           UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda                                                                                                            
└─sda1  ext4              1.0                              a305e837-99f5-4d7c-a293-4ffa11ca5441    1,2G    89% /
sdb                                                                                                            
└─sdb1  linux_raid_member 1.2              debianVM:0      6caf09bd-22a0-d6d6-a2ab-502641c28dfc                
  └─md0 ext4              1.0                              4479440e-6a32-45c3-a977-bd153d6e412b    7,4G     0% /mnt/raid
sdc                                                                                                            
└─sdc1  linux_raid_member 1.2              debianVM:0      6caf09bd-22a0-d6d6-a2ab-502641c28dfc                
  └─md0 ext4              1.0                              4479440e-6a32-45c3-a977-bd153d6e412b    7,4G     0% /mnt/raid
```

Et pour avoir le détail du RAID 1 on peut faire la commande suivante :

```
root@debianVM:~# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Wed Mar 13 16:33:39 2024
        Raid Level : raid1
        Array Size : 8382464 (7.99 GiB 8.58 GB)
     Used Dev Size : 8382464 (7.99 GiB 8.58 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Wed Mar 13 16:45:06 2024
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : debianVM:0  (local to host debianVM)
              UUID : 6caf09bd:22a0d6d6:a2ab5026:41c28dfc
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
```