Guide des technologies

Créer et migrer des volumes RAID (mdadm + LVM)

8 min read Système Linux Mis à jour 29 Sep 2025
RAID mdadm + LVM : créer et migrer
RAID mdadm + LVM : créer et migrer

Ce guide explique comment créer des ensembles RAID logiciels (mdadm) et migrer les données LVM existantes vers ces ensembles. Il couvre la création de /dev/md0 et /dev/md1, la préparation pour LVM, la mise à jour des fichiers de configuration (mdadm.conf, fstab, mtab, GRUB), la migration avec pvmove et l’ajout final des disques au RAID. Inclus : checklist, dépannage, critères d’acceptation et bonnes pratiques.

Important : effectuez une sauvegarde complète avant de toucher les partitions ou les métadonnées LVM/RAID.

Intent principal

  • Objectif : créer deux arrays RAID1 (/dev/md0 pour /boot et /dev/md1 pour LVM) et migrer les données d’un disque (sda) vers un disque miroir (sdb), tout en conservant la capacité de démarrer si le premier disque échoue.

Variantes recherchées (intent-related)

  • créer RAID mdadm
  • migrer LVM vers RAID
  • pvmove vgextend mdadm
  • configurer GRUB pour fallback
  • synchronisation /proc/mdstat

4 Création de nos volumes RAID

Maintenant, créons nos ensembles RAID /dev/md0 et /dev/md1. /dev/sdb1 sera ajouté à /dev/md0 et /dev/sdb2 à /dev/md1. /dev/sda1 et /dev/sda2 ne peuvent pas être ajoutés tout de suite (le système démarre actuellement depuis eux), nous utilisons donc le placeholder missing dans les deux commandes suivantes :

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

La commande suivante devrait maintenant montrer que vous avez deux ensembles RAID dégradés ([U] ou [U] signifie qu’un ensemble est dégradé alors que [UU] signifie qu’il est OK) :

cat /proc/mdstat

Exemple d’affichage attendu :

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
10377920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

Ensuite, nous créons un système de fichiers (ext3) sur notre ensemble RAID non-LVM /dev/md0 :

mkfs.ext3 /dev/md0

Maintenant, passons à notre ensemble RAID destiné à LVM : /dev/md1. Pour le préparer pour LVM, exécutez :

pvcreate /dev/md1

Ensuite, ajoutez /dev/md1 au groupe de volumes VolGroup00 :

vgextend VolGroup00 /dev/md1

La sortie de :

pvdisplay

devrait maintenant être similaire à ceci :

[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/sda2
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.76 MB
Allocatable           yes (but full)
PE Size (KByte)       32768
Total PE              316
Free PE               0
Allocated PE          316
PV UUID               aikFEP-FB15-nB9C-Nfq0-eGMG-hQid-GOsDuj

--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes
PE Size (KByte)       32768
Total PE              316
Free PE               316
Allocated PE          0
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

La sortie de :

vgdisplay

devrait ressembler à ceci :

[root@server1 ~]# vgdisplay
--- Volume group ---
VG Name               VolGroup00
System ID
Format                lvm2
Metadata Areas        2
Metadata Sequence No  4
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                2
Act PV                2
VG Size               19.75 GB
PE Size               32.00 MB
Total PE              632
Alloc PE / Size       316 / 9.88 GB
Free  PE / Size       316 / 9.88 GB
VG UUID               ZPvC10-cN09-fI0S-Vc8l-vOuZ-wM6F-tlz0Mj

[root@server1 ~]#

Ensuite, créons /etc/mdadm.conf à partir de l’examen des composants :

mdadm --examine --scan > /etc/mdadm.conf

Affichez le contenu :

cat /etc/mdadm.conf

Dans le fichier vous devriez voir les détails de nos deux ensembles RAID (toujours en état dégradé à ce stade) :

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0a96be0f:bf0f4631:a910285b:0f337164
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=f9e691e2:8d25d314:40f42444:7dbe1da1

Maintenant modifiez /etc/fstab. Remplacez LABEL=/boot par /dev/md0 afin que le fichier ressemble à ceci :

vi /etc/fstab
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
/dev/md0             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

Puis remplacez /dev/sda1 par /dev/md0 dans /etc/mtab :

vi /etc/mtab

Exemple de /etc/mtab modifié :

/dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0

Mise à jour du chargeur de démarrage GRUB

Ouvrez /boot/grub/menu.lst et ajoutez fallback=1 juste après default=0 :

vi /boot/grub/menu.lst
[...]
default=0
fallback=1
[...]

Cela permet, si le premier noyau échoue à démarrer, de tenter le noyau de secours.

Toujours dans le même fichier, copiez la première strophe du noyau et collez-la avant la première existante ; remplacez root (hd0,0) par root (hd1,0) :

[...]
title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img

Le fichier complet devrait ressembler à :

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
fallback=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img

root (hd1,0) fait référence à /dev/sdb qui fait déjà partie de nos ensembles RAID. Nous redémarrerons le système dans quelques instants ; le système tentera alors de démarrer depuis les ensembles RAID (toujours dégradés pour l’instant) et, en cas d’échec, utilisera le disque /dev/sda (grâce à fallback=1).

Ensuite, mettez à jour l’initrd (ramdisk) :

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

5 Déplacement de nos données vers les ensembles RAID

Maintenant que nous avons modifié les fichiers de configuration, nous pouvons copier le contenu de /dev/sda vers /dev/sdb (en incluant les modifications de configuration effectuées précédemment).

Pour déplacer le contenu de notre partition LVM /dev/sda2 vers notre ensemble LVM RAID /dev/md1, nous utilisons pvmove :

pvmove /dev/sda2 /dev/md1

Remarque : cette opération peut prendre du temps selon la quantité de données. Patientez.

Ensuite, retirez /dev/sda2 du groupe de volumes VolGroup00 :

vgreduce VolGroup00 /dev/sda2

… et indiquez au système de ne plus utiliser /dev/sda2 pour LVM :

pvremove /dev/sda2

La sortie de :

pvdisplay

devrait maintenant être :

[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes (but full)
PE Size (KByte)       32768
Total PE              316
Free PE               0
Allocated PE          316
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

Ensuite changez le type de partition de /dev/sda2 en Linux raid autodetect et ajoutez /dev/sda2 à l’ensemble /dev/md1 :

fdisk /dev/sda

Exemple d’interaction :

[root@server1 ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#

Puis :

mdadm --add /dev/md1 /dev/sda2

Regardez ensuite :

cat /proc/mdstat

Vous devriez voir que /dev/md1 est en cours de synchronisation :

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
10377920 blocks [2/1] [_U]
[====>................]  recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

(Vous pouvez exécuter :

watch cat /proc/mdstat

pour obtenir une sortie mise à jour en continu. Pour quitter watch, appuyez sur CTRL+C.)

Attendez la fin de la synchronisation. Une fois terminée, la sortie devrait ressembler à :

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
10377920 blocks [2/2] [UU]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

)

Maintenant, montons /dev/md0 :

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Vous devriez voir l’ensemble dans la sortie de :

mount

Exemple :

[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#

Enfin, copiez le contenu de /dev/sda1 vers /dev/md0 (monté sur /mnt/md0) :

cd /boot
cp -dpRx . /mnt/md0

Checklist pré-migration (vérification avant opérations risquées)

  • Sauvegarde complète de /boot, volumes LVM et metadonnées (pvdisplay, vgdisplay, lvdisplay).
  • Vérifier l’espace libre sur le disque cible (sdb) et le VG.
  • S’assurer que mdadm, lvm2 et utilitaires de noyau sont installés.
  • Noter la version du noyau (uname -r) avant de recréer l’initrd.
  • Plan de rollback et fenêtre de maintenance.

Checklist post-migration (vérification après opérations)

  • Vérifier /proc/mdstat pour [UU] sur chaque array.
  • pvdisplay / vgdisplay / lvdisplay montrent la configuration attendue.
  • /boot est monté via /dev/md0 et contient initrd et vmlinuz correspondants.
  • GRUB configuré avec fallback et entrée root (hd1,0) présente.
  • Redémarrer une machine de test ou production pendant la fenêtre et vérifier le démarrage sur le disque secondaire si nécessaire.

Playbook bref (opérations à suivre)

  1. Créer les arrays avec placeholder missing.
  2. Formater /dev/md0 et pvcreate /dev/md1.
  3. vgextend VolGroup00 /dev/md1.
  4. Mettre à jour /etc/mdadm.conf, /etc/fstab, /etc/mtab et GRUB.
  5. Regénérer l’initrd.
  6. pvmove /dev/sda2 /dev/md1.
  7. vgreduce /dev/sda2 et pvremove /dev/sda2.
  8. Changer type de partition de /dev/sda2 (fd) et mdadm –add /dev/md1 /dev/sda2.
  9. Surveiller cat /proc/mdstat jusqu’à synchronisation complète.
  10. Copier /boot vers /dev/md0, tester redémarrage.

Quand cette procédure peut échouer (contre-exemples)

  • Disque cible (sdb) défectueux ou mal partitionné : la création de l’array échoue ou échoue lors de la synchronisation.
  • Métadonnées LVM corrompues : pvmove peut échouer ou renvoyer des erreurs de mémoire/offset.
  • Espace insuffisant sur le VG cible : pvmove échoue faute de place.
  • GRUB mal configuré : la machine peut ne pas démarrer depuis le second disque; vérifiez fallbacks et entrées.

Alternatives et approches complémentaires

  • Utiliser dd ou rsync pour copier /boot puis réinstaller GRUB sur le second disque avant de configurer le RAID, afin d’avoir un disque amorçable indépendant.
  • Utiliser RAID matériel si disponible pour une performance/simplicité différente (mais attention au lock-in fournisseur).
  • Pour systèmes modernes, considérer LVM mirroring ou mdadm + systemd-boot/GRUB2 selon la distribution.

Heuristique de décision (mental model)

  • Si /boot < 1 Go et simple : utiliser RAID1 logiciel pour /boot et LVM pour racine.
  • Si besoin de souplesse en ligne : utiliser pvmove pour migrer sans downtime (mais prévoir fenêtre et sauvegarde).
  • Toujours vérifier la redondance du chargeur d’amorçage (installer GRUB sur tous les disques physiques).

Critères d’acceptation

  • Les deux arrays RAID sont synchronisés et affichent [UU] dans /proc/mdstat.
  • VolGroup00 contient toutes les PV attendues, avec Alloc PE correspondant aux volumes actifs.
  • /boot est monté depuis /dev/md0 et contient vmlinuz et initrd compatibles.
  • Le système démarre correctement depuis sdb si sda est retiré (test de basculement effectué).

Dépannage fréquent et commandes utiles

  • Afficher l’état RAID : cat /proc/mdstat
  • Examiner un disque : mdadm –examine /dev/sda1
  • Regénérer mdadm.conf : mdadm –examine –scan > /etc/mdadm.conf
  • Forcer ré-assemblage d’un array : mdadm –assemble –force /dev/md1 /dev/sda2 /dev/sdb2
  • Regénérer initrd : mkinitrd /boot/initrd-uname -r.img uname -r
  • Surveiller pvmove : pvmove affiche son propre état ou voir dmesg pour erreurs.

Checklist par rôle

Administrateur système :

  • Vérifier backups.
  • Coordonner la fenêtre de maintenance.
  • Exécuter les commandes mdadm, pvmove, vgextend, vgreduce.

Ingénieur de stockage :

  • Vérifier l’intégrité des disques et SAS/SATA.
  • Contrôler la vitesse de reconstruction et I/O.

Opérateur de production :

  • Planifier basculement manuel si nécessaire.
  • Alerter équipes en cas de dégradation prolongée.

Arbre de décision (récapitulatif visuel)

flowchart TD
  A[Début: disque secondaire prêt ?] -->|Oui| B[Créer md0 & md1 'missing']
  A -->|Non| Z[Préparer disque secondaire]
  B --> C[pvcreate /dev/md1]
  C --> D[vgextend VolGroup00 /dev/md1]
  D --> E[Mettre à jour mdadm.conf, fstab, mtab, GRUB]
  E --> F[mkinitrd / mise à jour initrd]
  F --> G[pvmove /dev/sda2 /dev/md1]
  G --> H[vgreduce && pvremove /dev/sda2]
  H --> I[Changer type partition sda2, mdadm --add]
  I --> J[Surveiller /proc/mdstat jusqu'à UU]
  J --> K[Copier /boot -> /mnt/md0 et tester reboot]

Matrice de risques et mitigations (qualitative)

  • Perte de données (élevé si pas de sauvegarde) → mitigation : sauvegarde complète et test de restauration.
  • Non-amorçage après migration → mitigation : conserver copie originale de /boot et installer GRUB sur chaque disque.
  • Synchronisation lente/IO saturé → mitigation : lancer opérations en fenêtre hors-pointe, limiter I/O si besoin.

1‑ligne glossaire

  • mdadm : outil de gestion RAID logiciel sous Linux.
  • pvcreate / vgextend / pvmove : commandes LVM pour provisionner, étendre et migrer des Physical Volumes.
  • /proc/mdstat : interface kernel indiquant l’état des arrays md.

Résumé

  • Créez les arrays RAID en mode dégradé (placeholder missing), préparez l’un pour LVM et étendez le VG.
  • Mettez à jour mdadm.conf, fstab, mtab et GRUB (fallback), regénérez l’initrd.
  • Déplacez les données LVM avec pvmove, retirez l’ancien PV et ajoutez physiquement le disque au RAID puis attendez la synchronisation.
  • Testez le démarrage depuis le disque secondaire et conservez des sauvegardes.

Notes

  • Toujours vérifier les logs système (dmesg, /var/log/messages) en cas d’erreur.
  • Ne supprimez jamais une PV tant que pvmove n’a pas confirmé la migration complète.

Annonce courte (100–200 mots)

Nous avons documenté la procédure complète pour migrer un système CentOS avec partitions LVM vers des arrays RAID1 logiciels (mdadm) sans perte de service prolongée. Le guide explique la création des arrays, la préparation LVM, la mise à jour de mdadm.conf, fstab et GRUB (avec fallback), la migration avec pvmove puis l’ajout des disques physiques au RAID et la vérification finale. Ce playbook inclut checklists, critères d’acceptation, dépannage et bonnes pratiques pour sécuriser la migration. Idéal pour administrateurs systèmes souhaitant mettre en place une redondance disque tout en minimisant le risque d’indisponibilité.

Auteur
Édition

Matériaux similaires

Sauvegarder et restaurer le Registre Windows
Windows

Sauvegarder et restaurer le Registre Windows

Voir les publications aimées sur Instagram
Réseaux sociaux

Voir les publications aimées sur Instagram

Saisie vocale WhatsApp : guide Gboard & SwiftKey
Messagerie

Saisie vocale WhatsApp : guide Gboard & SwiftKey

Rechercher collaborations sur IMDb
Cinéma

Rechercher collaborations sur IMDb

Citation sur le bureau avec Rainmeter
Tutos

Citation sur le bureau avec Rainmeter

Installer et sécuriser NFS sur AlmaLinux 9
Administration

Installer et sécuriser NFS sur AlmaLinux 9