Mdadm + lvm : bonnes pratiques ?

Bonjour à tous,

J’ai enfin fini par récupérer un serveur pour faire du stockage. Cette fois, j’essaye de faire ça bien en partant sur du mdadm et du LVM. Mon idée est d’obtenir quelque chose comme cela :

HDD1 --|
       |
HDD2 --|
       |
HDD3 --|
       |
HDD4 --|                                          |--- 001 (lv)
       |-- /dev/md0 -- monPV (pv) -- monVG (vg) --|--- 002 (lv)
HDD5 --|                                          |--- ... (lv)
       |
HDD6 --|
       |
HDD7 --|
       |
HDD8 --|

D’après ce que j’ai pu comprendre en cherchant des informations, j’ai établis la procédure suivante, mais j’aimerais savoir si elle respecte bien les bonnes pratiques :

  1. Création des partitions de type RAID Linux autodétecté sur chaque disques (de la taille du disque)
  2. Création de mon agrégat mdadm en RAID6
  3. Création d’une partition de type LVM Linux sur l’agrégat
  4. Création de mon PV sur la partition créée
  5. Création d’un VG sur le PV
  6. Création des différents LV

Si cette procédure vous semble correcte, j’ai une question supplémentaire : quelle est la procédure si j’ajoute un disque physique ?

Vous remerciant d’avance de vos réponses.

Les partitions n’ont pas besoin d’être de type “RAID Linux auto-détecté”. En fait il y a débat, car certains “puristes” estiment que ce type doit être réservé aux partitions RAID contenant un superbloc (méta-données) en version 0.90, ancien format obsolète mais le seul qui soit utilisable en auto-détection par le noyau. Problème : la version par défaut de superbloc créé par les versions actuelles de mdadm est 1.2 (recommandée sauf besoin spécifique), et de toute façon l’auto-détection ne peut fonctionner que si les pilotes md sont inclus en dur dans le noyau. Or avec les noyaux Debian ces pilotes sont en modules donc l’auto-détection par le noyau n’est pas utilisable, et l’assemblage des agrégats RAID est réalisé par les scripts de l’initramfs. Certains recommandent le type 0xDA “non-filesystem data” (données autre qu’un système de fichiers) mais personnellement je le trouve trop vague j’utilise le type Linux RAID qui a le mérite d’être clair.

L’étape 3 est superflue. Il est possible (et d’usage) de créer le PV LVM directement dans l’agrégat RAID /dev/md0.

Ce n’est pas indispensable avec GRUB 2 qui sait lire le RAID 6, mais il est conseillé de créer un agrégat RAID 1 sans LVM pour /boot (simplicité, maximum de redondance).

Pour ajouter un membre actif supplémentaire à un agrégat (et non un membre de réserve “spare” ou remplacer un membre défaillant), il faut utiliser la commande mdadm --grow. Cela réorganise les données du RAID 6 pour utiliser le disque supplémentaire, ce qui peut prendre du temps. S’il contient un PV LVM, il faut ensuite agrandir ce dernier avec pvresize.

Un grand merci pour ta réponse. Les disques n’hébergeront que des données, le système sera sur un RAID1 hardware (le serveur est prévu comme cela).

Donc, pour créer l’agrégat de départ :

  1. Création d’une partition de type RAID Linux (0xDA) sur un disque en utilisant tout l’espace
  2. Copie de la table de partition sur les autres membres via sgdisk
  3. Créer mon agrégat mdadm de type RAID6
  4. Création du PV directement sur /dev/md0
  5. Création du VG sur le PV
  6. Création des LV

Pour l’ajout d’un disque à l’agrégat :

  1. Copie via sgdisk de la table de partition d’un disque déjà membre
  2. Ajouter le disque à l’agrégat via mdadm --grow
  3. Agrandir le PV via pvresize
  4. Agrandir le VG (inutile, cf plus bas)

Je voulais résumé histoire d’avoir une petite procédure claire.
Je te remercie encore pour ta réponse qui est très complète !

L’identifiant de type “Linux RAID” n’est pas 0xDA. 0xDA est l’identifiant du type “non-FS data”.
Note que ça n’a aucune importance pour mdadm et le noyau, c’est juste une question de lisibilité pour toi.

Le point “4. Agrandir le VG” n’a pas lieu d’être. Un VG est “agrandi” explicitement par l’ajout d’un PV. Lors de l’agrandissement d’un PV déjà membre du VG, c’est implicite. Tu voulais peut-être écrire “agrandir ou créer un ou plusieurs LV” ?

Du coup j’ai dû loupé quelque chose… Tu utilises le même type que moi au final ?
Comme tu le dis, c’est pour une question de lisibilité :slight_smile:

Pour le point 4, je ne savais pas, merci !
Je commence seulement à utilisé LVM donc forcément, j’ai pas encore toutes les notions.

Je vais abusé de tes connaissances en posant une question supplémentaire. Sur une VM où le disque systèmes est en LVM. Si j’agrandis le disque virtuel, je dois également agrandir la partition ou directement agrandir le PV ?

Si le disque est utilisé directement par le PV sans table de partition, il suffit d’agrandir le PV.

Si le disque est partitionné au format GPT, l’en-tête de la table de partition GPT contient la capacité utilisable du disque donc il faut la mettre à jour avec la nouvelle taille.

Si le PV est dans une partition, il faut agrandir la partition puis agrandir le PV ; ou bien créer une nouvelle partition de type LVM, l’initialiser comme PV avec pvcreate et agrandir le VG en ajoutant le PV avec vgextend.

1 J'aime