Créer et migrer des volumes RAID (mdadm + LVM)
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)
- Créer les arrays avec placeholder missing.
- Formater /dev/md0 et pvcreate /dev/md1.
- vgextend VolGroup00 /dev/md1.
- Mettre à jour /etc/mdadm.conf, /etc/fstab, /etc/mtab et GRUB.
- Regénérer l’initrd.
- pvmove /dev/sda2 /dev/md1.
- vgreduce /dev/sda2 et pvremove /dev/sda2.
- Changer type de partition de /dev/sda2 (fd) et mdadm –add /dev/md1 /dev/sda2.
- Surveiller cat /proc/mdstat jusqu’à synchronisation complète.
- 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
.imguname -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é.
Matériaux similaires

Sauvegarder et restaurer le Registre Windows

Voir les publications aimées sur Instagram

Saisie vocale WhatsApp : guide Gboard & SwiftKey

Rechercher collaborations sur IMDb

Citation sur le bureau avec Rainmeter
