
# Mise en place d'un RAID5 avec LUKS et LVM sous Linux

## Le plan


- installer un raid5
- installer les partitions
  - une partition pour grub de 1Mo
  - une partition pour le déchiffrement de 511Mo
  - une seule partition pour Proxmox en ext4 (même si ZFS est recommandé, il a plus d'overhead, voir Annexes)
- chiffrer avec luks
  - il semble que le meilleur algo de chiffrement soit aes-cbc (moins bon en écriture que aes-xts mais meilleur en lecture)
- 
- Installer Debian



## Contexte : RAID5 avec 3 disques de 2 To
Vous souhaitez configurer un RAID5 sur un serveur Linux, avec un chiffrement LUKS, une gestion par LVM et un système de fichiers ext4. Voici les détails et la procédure complète pour atteindre cet objectif.

---

## 1. RAID : Partitionner ou non les disques ?
### Faut-il partitionner les disques avant de configurer le RAID ?

**Non, il n'est pas nécessaire de partitionner les disques**. Voici pourquoi :
- **RAID 5** fonctionne mieux avec des disques utilisés dans leur totalité, sans partitionnement, ce qui simplifie la gestion et optimise les performances.
- **LUKS** et **LVM** offrent toute la flexibilité nécessaire sans qu’il soit nécessaire de partitionner.
- Ajouter des partitions pourrait compliquer la configuration et n’apporterait aucun avantage significatif en termes de sécurité ou de performances.

### Pourquoi cette approche est optimale ?
- Simplicité d’administration.
- Performances maximales.
- Réduction des risques d’erreurs.

---

## Benchmark

Voir: https://forum.proxmox.com/threads/adding-full-disk-encryption-to-proxmox.137051/

```
# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1232169 iterations per second for 256-bit key
PBKDF2-sha256    1661768 iterations per second for 256-bit key
PBKDF2-sha512    1209430 iterations per second for 256-bit key
PBKDF2-ripemd160  742617 iterations per second for 256-bit key
PBKDF2-whirlpool  469792 iterations per second for 256-bit key
argon2i       7 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      6 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       629.9 MiB/s      2288.7 MiB/s
    serpent-cbc        128b        90.4 MiB/s       319.0 MiB/s
    twofish-cbc        128b       199.1 MiB/s       377.3 MiB/s
        aes-cbc        256b       474.5 MiB/s      1721.4 MiB/s
    serpent-cbc        256b        91.0 MiB/s       319.8 MiB/s
    twofish-cbc        256b       200.6 MiB/s       377.0 MiB/s
        aes-xts        256b      1959.3 MiB/s      1952.9 MiB/s
    serpent-xts        256b       312.3 MiB/s       301.9 MiB/s
    twofish-xts        256b       347.3 MiB/s       353.8 MiB/s
        aes-xts        512b      1538.7 MiB/s      1523.3 MiB/s
    serpent-xts        512b       317.4 MiB/s       302.0 MiB/s
    twofish-xts        512b       352.9 MiB/s       354.8 MiB/s
```


### Capacité CPU

Voir : https://www.cyberciti.biz/faq/linux-xen-vmware-kvm-intel-vt-amd-v-support/

```
less /etc/cpuinfo 
```

Vérifier si aes est présent (chiffrement)

Vérifier si lm (64 bits)

Vérifier si vmx (Intel) ou svm (AMD) sont activés

Ou

```
# lscpu | grep VT
Virtualization:      VT-x
```


## 2. Configuration complète : RAID → LUKS → LVM → ext4


### Étape 0: système de boot

1.	Réservez une petite partition (généralement 1 Go) sur chaque disque pour /boot.
•	Exemple : partitionnez /dev/sd[b-d] en deux :
•	Une partition de 1 Go pour /boot (ex. /dev/sdb1, /dev/sdc1, /dev/sdd1).
•	Le reste du disque pour le RAID5.
2.	Configurez /boot avec RAID1 pour la redondance :

sudo mdadm --create --verbose /dev/md1 --level=1 --raid-devices=3 /dev/sd[b-d]1

   •	RAID1 garantit que même si un disque tombe en panne, le système peut toujours démarrer.

3.	Formatez la partition RAID1 en ext4 :

sudo mkfs.ext4 /dev/md1


4.	Montez cette partition comme /boot :

5. Installer le système de démarrage (voir kimsufi.md)

### Étape 1 : Créer le RAID 5

```bash
sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sd[b-d]
```

Laissez le RAID se synchroniser après la création.

Pour voir la progression:

```bash
sudo watch -n1 cat /proc/mdstat
```

### Étape 2 : Ajouter le chiffrement LUKS

1. Initialiser le chiffrement LUKS sur le RAID :
   ```bash
   sudo cryptsetup luksFormat /dev/md0
   ```

2. Ouvrir le conteneur chiffré :
   ```bash
   sudo cryptsetup open /dev/md0 raid_crypt
   ```

### Étape 3 : Configurer LVM
1. Initialiser LVM sur le conteneur LUKS :
   ```bash
   sudo pvcreate /dev/mapper/raid_crypt
   sudo vgcreate vg_raid /dev/mapper/raid_crypt
   ```

2. Créer des volumes logiques :
   ```bash
   sudo lvcreate -L 1.5T -n lv_root vg_raid
   sudo lvcreate -L 500G -n lv_home vg_raid
   ```

### Étape 4 : Formater et monter les volumes
1. Formater en ext4 :
   ```bash
   sudo mkfs.ext4 /dev/vg_raid/lv_root
   sudo mkfs.ext4 /dev/vg_raid/lv_home
   ```

2. Monter les volumes :
   ```bash
   sudo mount /dev/vg_raid/lv_root /mnt
   sudo mkdir /mnt/home
   sudo mount /dev/vg_raid/lv_home /mnt/home
   ```

3. Ajouter les entrées dans `/etc/fstab` pour un montage automatique au démarrage.

---

## 3. Vérification de la prise en charge AES-NI

Les extensions AES-NI permettent d’accélérer le chiffrement et le déchiffrement des données avec LUKS.

### Méthode 1 : Vérification via `/proc/cpuinfo`
```bash
cat /proc/cpuinfo | grep -i aes
```
- Si `aes` apparaît dans les `flags`, AES-NI est pris en charge.

### Méthode 2 : Utiliser `lscpu`
```bash
lscpu | grep -i aes
```
- Une ligne avec `AES : Supported` confirme la prise en charge.

### Méthode 3 : Outil `cpuid`
1. Installer l’outil :
   ```bash
   sudo apt install cpuid  # Pour Debian/Ubuntu
   sudo dnf install cpuid  # Pour Fedora/CentOS
   ```

2. Vérifier la prise en charge AES :
   ```bash
   cpuid | grep -i aes
   ```

### Méthode 4 : Vérification avec `dmesg`
```bash
dmesg | grep -i aes
```
- Si AES-NI est actif, le noyau Linux le mentionnera.

### Importance d’AES-NI
AES-NI améliore considérablement les performances pour le chiffrement de données, notamment pour **LUKS**, **SSL/TLS**, et les systèmes chiffrés. Si AES-NI n’est pas disponible, le chiffrement sera réalisé en mode logiciel, ce qui est moins performant.


## Annexes



* [Best practices question (Ext4/zfs/raw/qcow2) | Proxmox Support Forum](https://forum.proxmox.com/threads/best-practices-question-ext4-zfs-raw-qcow2.142094/)
* [ZFS and EXT4 mixed? | Proxmox Support Forum](https://forum.proxmox.com/threads/zfs-and-ext4-mixed.66730/)
* [ZFS or something else? | Proxmox Support Forum](https://forum.proxmox.com/threads/zfs-or-something-else.73917/)

### Ressources RAID

* [Quel RAID pour protéger efficacement mes données ? Du RAID0 au RAID5](https://www.chronodisk-recuperation-de-donnees.ca/blog/quel-raid-pour-proteger-efficacement-mes-donnees/)
* [RAID 5 – is it pointless (for large drives)? : r/storage](https://www.reddit.com/r/storage/comments/fascry/raid_5_is_it_pointless_for_large_drives/)
* [linux - How to increase speed of RAID 5 with mdadm + luks + lvm - Server Fault](https://serverfault.com/questions/1081766/how-to-increase-speed-of-raid-5-with-mdadm-luks-lvm)
* [linux - Best order of RAID, LVM and LUKS - Super User](https://superuser.com/questions/1193290/best-order-of-raid-lvm-and-luks)
* [How to install Ubuntu with LUKS Encryption on LVM](https://gist.github.com/superjamie/d56d8bc3c9261ad603194726e3fef50f)
* [linux - How to add RAID5 to existing crypto-LVM? - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/74427/how-to-add-raid5-to-existing-crypto-lvm)
* [How to Create a RAID 5 System With LVM Tool and Recover Data After Failures / Habr](https://habr.com/en/companies/hetmansoftware/articles/547086/)
* [Créer un Espace de Stockage Fiable avec RAID 5 et LVM sous Linux | Kevin Deldycke](https://kevin.deldycke.com/2005/creer-un-espace-de-stockage-fiable-avec-raid-5-et-lvm-sous-linux)
* [Raid 5 configuration Question : r/sysadmin](https://www.reddit.com/r/sysadmin/comments/13sltai/raid_5_configuration_question/)
* [partitioning - Is it better to partition hard drives for a RAID? - Super User](https://superuser.com/questions/382748/is-it-better-to-partition-hard-drives-for-a-raid)
* [hard drive - Are different RAID levels on the same physical disks possible? Does it make sense to include RAID 1 and RAID 5 on the same disks? - Super User](https://superuser.com/questions/1579024/are-different-raid-levels-on-the-same-physical-disks-possible-does-it-make-sens)
* [RAID (informatique) — Wikipédia](https://fr.wikipedia.org/wiki/RAID_(informatique))
* [Mdadm — Wikipédia](https://fr.wikipedia.org/wiki/Mdadm)
* [Using mdadm to send e-mail alerts for RAID failures | Support | SUSE](https://www.suse.com/support/kb/doc/?id=000016716)
