Chapitre 1413 minIntermédiaire
RAID logiciel avec mdadm et quotas disque
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- comparer les niveaux de RAID et calculer leur capacité utile ;
- créer un RAID 1 avec
mdadmet le rendre permanent ; - simuler une panne et remplacer un disque ;
- limiter l'espace des utilisateurs avec des quotas.
4 exercices corrigés1 schéma
Le RAID (Redundant Array of Independent Disks) combine plusieurs disques pour qu'un serveur survive à la panne de l'un d'eux, ou pour additionner leur capacité et leur débit ; sous Linux, mdadm le réalise en logiciel. Les quotas limitent la place que chaque utilisateur ou groupe peut occuper sur un système de fichiers. Ce chapitre compare les niveaux de RAID, monte un RAID 1 sur srv-journaux, simule une panne de disque, puis met en place des quotas sur srv-web.
Les niveaux de RAID
| Niveau | Principe | Disques minimum | Capacité utile (n disques de taille c) | Pannes supportées |
|---|---|---|---|---|
| RAID 0 | Agrégat par bandes (striping) : les données sont réparties sur tous les disques | 2 | n × c | Aucune : un disque perdu, tout est perdu |
| RAID 1 | Miroir : chaque disque contient une copie complète | 2 | c | n − 1 |
| RAID 5 | Bandes avec parité répartie | 3 | (n − 1) × c | 1 |
| RAID 6 | Bandes avec double parité | 4 | (n − 2) × c | 2 |
| RAID 10 | Miroirs, réunis en bandes (1+0) | 4 | n × c / 2 | 1 à coup sûr, plus si les pannes touchent des miroirs différents |
La parité est une information calculée à partir des blocs d'une bande (un OU exclusif), qui permet de recalculer n'importe quel bloc manquant. Elle coûte de l'espace (un disque en RAID 5, deux en RAID 6) et du temps à chaque écriture. Pendant la reconstruction après une panne, tous les disques restants sont lus intégralement : avec de gros disques, c'est long (des heures, parfois plus d'une journée), et une seconde panne pendant cette période est fatale en RAID 5. D'où la préférence pour le RAID 6 ou le RAID 10 sur les grands volumes.
RAID matériel, logiciel ou ZFS. Un RAID matériel est géré par une carte contrôleur, invisible du système. Le RAID logiciel de Linux (mdadm) est géré par le noyau : aucun matériel spécial, et les disques se relisent sur n'importe quel autre Linux. ZFS, utilisé par Proxmox VE et TrueNAS, intègre le RAID (miroirs, RAID-Z) dans le système de fichiers lui-même, avec des sommes de contrôle qui détectent la corruption silencieuse.
Créer un RAID 1 avec mdadm
Dans la maquette, srv-journaux a reçu deux disques virtuels de 100 Gio, sdb et sdc. On en fait un miroir, sur lequel on pose LVM pour le volume des journaux :
sudo apt install mdadm
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
cat /proc/mdstat
mdiallo@srv-journaux:~$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
104790016 blocks super 1.2 [2/2] [UU]
[==>..................] resync = 12.4% (13001344/104790016) finish=7.6min speed=201176K/sec
unused devices: <none>
[2/2] [UU] signifie « 2 disques prévus, 2 présents, tous deux à jour » (U pour up, _ pour un disque manquant). La synchronisation initiale tourne en arrière-plan : le volume est utilisable tout de suite.
Enregistrer la configuration, pour que le RAID soit réassemblé sous le même nom à chaque démarrage :
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u
La première commande ajoute une ligne ARRAY /dev/md0 metadata=1.2 UUID=… à /etc/mdadm/mdadm.conf ; la seconde recopie ce fichier dans l'image de démarrage. Dans le même fichier, la ligne MAILADDR informatique@sorbier.example indique où envoyer une alerte quand un disque tombe : le service de surveillance de mdadm la lit.
Poser LVM et le système de fichiers sur le RAID :
sudo pvcreate /dev/md0
sudo vgcreate vg_journaux /dev/md0
sudo lvcreate -n distant -l 80%FREE vg_journaux # 20 % gardés en réserve
sudo mkfs.ext4 -L journaux /dev/vg_journaux/distant
sudo mkdir -p /srv/journaux
echo '/dev/mapper/vg_journaux-distant /srv/journaux ext4 defaults,nofail,nodev,nosuid,noexec 0 2' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload && sudo mount -a && df -h /srv/journaux
sudo mdadm --detail /dev/md0 donne l'état complet : niveau, taille, état (clean, degraded, recovering), et la liste des disques membres.
Simuler une panne et remplacer un disque
On vérifie que le miroir tient, avant d'en avoir besoin :
sudo mdadm /dev/md0 --fail /dev/sdc # déclarer sdc en panne
cat /proc/mdstat # [2/1] [U_] : le RAID est dégradé, mais fonctionne
ls /srv/journaux # les données sont toujours là
sudo mdadm /dev/md0 --remove /dev/sdc # retirer le disque du RAID
En vrai, on remplace alors le disque physique (ou on ajoute un nouveau disque virtuel, sdd), puis :
sudo mdadm /dev/md0 --add /dev/sdd
watch -n 5 cat /proc/mdstat # suivre la reconstruction (Ctrl+C pour quitter)
Pendant la reconstruction, /proc/mdstat affiche recovery et un pourcentage ; à la fin, [UU] revient. Un RAID dégradé ne se voit pas à l'usage : sans alerte, on peut fonctionner des mois sur un seul disque sans le savoir. C'est pourquoi l'adresse MAILADDR et la supervision de l'état du RAID (cours Supervision) ne sont pas facultatives.
Les quotas disque
Sur srv-web, les comptes du prestataire déposent des fichiers dans leur dossier personnel. Pour qu'un téléversement maladroit ne remplisse pas /home pour tout le monde, on limite chaque compte avec des quotas. Un quota porte sur un système de fichiers, pour un utilisateur ou un groupe, et fixe deux limites :
- la limite souple (soft) peut être dépassée pendant un délai de grâce (7 jours par défaut), au terme duquel elle devient bloquante ;
- la limite stricte (hard) ne peut jamais être dépassée : l'écriture échoue avec « Quota de disque dépassé ».
On peut limiter l'espace (en blocs de 1 Kio) et le nombre de fichiers (en inodes).
Mise en place sur ext4, pour /home :
-
Installer les outils :
sudo apt install quota. -
Ajouter les options
usrquota,grpquotaà la ligne de/homedans/etc/fstab:/dev/mapper/srv--web--vg-home /home ext4 defaults,usrquota,grpquota 0 2 -
Remonter et créer les fichiers de quotas :
sudo systemctl daemon-reload sudo mount -o remount /home sudo quotacheck -cugm /home # crée aquota.user et aquota.group à la racine de /home sudo quotaon -v /home -
Fixer les limites : 4 Gio en souple, 5 Gio en strict, sans limite de fichiers :
sudo setquota -u dev-igarnier 4194304 5242880 0 0 /home sudo setquota -u dev-hpetit 4194304 5242880 0 0 /home sudo setquota -g web-dev 8388608 10485760 0 0 /home # pour tout le groupeLes valeurs sont en blocs de 1 Kio : 4 × 1024 × 1024 = 4 194 304 pour 4 Gio.
sudo edquota -u dev-igarnierouvre les mêmes réglages dans un éditeur ;sudo edquota -p dev-igarnier -u dev-yrouxcopie les quotas d'un compte vers un autre. -
Contrôler :
sudo repquota -s /homeaffiche l'usage et les limites de tous les comptes (-sen unités lisibles), et chaque utilisateur voit les siennes avecquota -s.sudo setquota -t 604800 604800 /homerègle le délai de grâce (en secondes : 7 jours) pour les blocs et pour les inodes.
Au démarrage, systemd vérifie et active les quotas tout seul dès que les options figurent dans /etc/fstab. Sur XFS, les quotas se gèrent avec un autre outil, xfs_quota, et l'option de montage uquota.
Exercices
Exercice 1 sur 4 Calculer des capacités RAID Réussi À revoir
Un serveur reçoit quatre disques de 4 To. Pour chaque niveau (RAID 0, RAID 1 sur les quatre disques, RAID 5, RAID 6, RAID 10), donne la capacité utile et le nombre de disques qui peuvent tomber en panne sans perte de données.
Voir la réponseMasquer la réponse de l'exercice 1
| Niveau | Capacité utile | Pannes supportées |
|---|---|---|
| RAID 0 | 16 To | 0 |
| RAID 1 (4 copies) | 4 To | 3 |
| RAID 5 | 12 To (3 × 4) | 1 |
| RAID 6 | 8 To (2 × 4) | 2, quels qu'ils soient |
| RAID 10 | 8 To (4 × 4 / 2) | 1 à coup sûr ; 2 si ce sont des disques de miroirs différents |
RAID 6 et RAID 10 offrent la même capacité avec quatre disques : RAID 6 supporte deux pannes quelconques, RAID 10 écrit plus vite et se reconstruit plus vite (une simple copie du disque jumeau).
Tu avais trouvé ?
Exercice 2 sur 4 Lire /proc/mdstat Réussi À revoir
md0 : active raid1 sdb[0]
104790016 blocks super 1.2 [2/1] [U_]
- Dans quel état est le RAID ?
- Les données sont-elles accessibles ? Sont-elles protégées ?
- Quelles commandes lances-tu après avoir branché un disque neuf, vu comme
/dev/sdd?
Voir la réponseMasquer la réponse de l'exercice 2
- Dégradé : deux disques prévus, un seul présent (
[2/1]), le second membre manque ([U_]). Seulsdbest actif. - Accessibles, oui : un miroir fonctionne avec un seul disque. Protégées, non : la panne de
sdbferait tout perdre. Il faut remplacer le disque au plus vite, et vérifier que la dernière sauvegarde est bonne. sudo mdadm --detail /dev/md0pour confirmer l'état,sudo mdadm /dev/md0 --add /dev/sdd, puiswatch cat /proc/mdstatjusqu'au retour de[2/2] [UU]. Si l'ancien disque apparaît encore comme membre en échec, le retirer d'abord avec--remove.
Tu avais trouvé ?
Exercice 3 sur 4 Choisir un niveau de RAID Réussi À revoir
Pour un serveur de sauvegarde physique, Antoine Mercier dispose de six disques de 8 To. Il hésite entre RAID 5, RAID 6 et RAID 10. Donne la capacité de chaque solution et conseille-le.
Voir la réponseMasquer la réponse de l'exercice 3
- RAID 5 : 5 × 8 = 40 To, une seule panne supportée.
- RAID 6 : 4 × 8 = 32 To, deux pannes quelconques.
- RAID 10 : 6 × 8 / 2 = 24 To, une panne à coup sûr.
Conseil : RAID 6. Avec des disques de 8 To, une reconstruction dure des heures pendant lesquelles tous les disques sont sollicités : en RAID 5, une seconde panne à ce moment ferait tout perdre. Le RAID 10 est plus rapide mais coûte 8 To de plus, et les performances d'écriture comptent moins qu'une capacité confortable pour des sauvegardes. Dans tous les cas, ce serveur ne doit pas être la seule copie : une sauvegarde hors site reste nécessaire.
Tu avais trouvé ?
Exercice 4 sur 4 Interpréter des quotas Réussi À revoir
Sur /home, dev-igarnier a une limite souple de 4 Gio, une limite stricte de 5 Gio, et un délai de grâce de 7 jours. Il occupe 3,8 Gio.
- Il téléverse une archive de 600 Mio. Que se passe-t-il ?
- Il ne fait rien pendant 8 jours. Que se passe-t-il à sa prochaine écriture ?
- Il tente ensuite de téléverser une archive de 1,5 Gio d'un coup, sans avoir rien supprimé. Que se passe-t-il ?
Voir la réponseMasquer la réponse de l'exercice 4
- Il passe à 4,4 Gio : au-dessus de la limite souple, sous la limite stricte. L'écriture réussit ; le délai de grâce de 7 jours démarre, et
quota -saffiche ce délai. - Le délai de grâce a expiré : la limite souple devient bloquante. Toute nouvelle écriture échoue (« Quota de disque dépassé ») tant qu'il n'est pas redescendu sous 4 Gio.
- Même sans le délai expiré, 4,4 + 1,5 = 5,9 Gio dépasserait la limite stricte de 5 Gio : l'écriture échoue dès que le fichier atteint la limite, et le téléversement s'arrête avec un fichier incomplet.
Tu avais trouvé ?