Créer les volumes RAID et déplacer les données
Ce guide explique comment créer deux volumes RAID logiciels (/dev/md0 et /dev/md1) avec mdadm, préparer LVM, mettre à jour la configuration du système (mdadm.conf, fstab, mtab, GRUB), reconstruire l’initrd, puis migrer les données de /dev/sda vers /dev/sdb. Suivez les étapes, surveillez la synchronisation via /proc/mdstat et vérifiez les points de montage avant de redémarrer.
Important: les commandes et les sorties système sont conservées telles quelles. Exécutez-les en tant que root et sauvegardez vos données avant toute modification de partition.
Contexte et objectif
Nous créons deux arrays RAID logiciels : /dev/md0 (non-LVM, destiné à /boot) et /dev/md1 (préparé pour LVM). /dev/sdb1 et /dev/sdb2 sont immédiatement disponibles ; /dev/sda1 et /dev/sda2 sont actuellement utilisés par le système et seront ajoutés plus tard.
Définitions rapides
- mdadm : utilitaire de gestion du RAID logiciel sous Linux.
- LVM : Logical Volume Manager, gestion logique des volumes.
1. Création des arrays RAID (mdadm)
Nous créons deux arrays RAID1 en utilisant un emplacement ‘missing’ pour la partition non disponible (les partitions sur /dev/sda). Les commandes suivantes restent inchangées :
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2
Vérifiez l’état des arrays via /proc/mdstat :
cat /proc/mdstat
Exemple de sortie attendue (deux arrays en état dégradé) :
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
5036288 blocks [2/1] [_U]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
Note: [U] ou [U] indique un array dégradé ; [UU] indique que l’array est sain.
2. Créer le système de fichiers pour /dev/md0
Formater /dev/md0 en ext3 :
mkfs.ext3 /dev/md0
3. Préparer /dev/md1 pour LVM
Initialiser /dev/md1 en tant que physical volume LVM :
pvcreate /dev/md1
Ajouter /dev/md1 au groupe de volumes existant (VolGroup00) :
vgextend VolGroup00 /dev/md1
Vérifiez les PV et VG :
pvdisplay
Exemple de sortie attendue :
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.34 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0
--- Physical volume ---
PV Name /dev/md1
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.25 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 153
Allocated PE 0
PV UUID pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg
[root@server1 ~]#
vgdisplay
Exemple de sortie :
[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 9.56 GB
PE Size 32.00 MB
Total PE 306
Alloc PE / Size 152 / 4.75 GB
Free PE / Size 154 / 4.81 GB
VG UUID jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1
[root@server1 ~]#
4. Mettre à jour mdadm.conf, fstab et mtab
Générez /etc/mdadm.conf avec les arrays détectés :
mdadm --examine --scan > /etc/mdadm.conf
Affichez le fichier :
cat /etc/mdadm.conf
Vous devriez voir les entrées ARRAY pour /dev/md0 et /dev/md1, par exemple :
| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=7d2bf9c3:7cd9df21:f782dab8:9212d7cb ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96
|
Modifier /etc/fstab : remplacez LABEL=/boot par /dev/md0 pour que /boot utilise l’array RAID :
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
|
Modifier /etc/mtab : remplacez /dev/sda1 par /dev/md0 afin que le système reflète le nouveau montage :
vi /etc/mtab
| /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
|
5. Mettre à jour GRUB pour basculer sur sdb si nécessaire
Éditez /boot/grub/menu.lst et ajoutez fallback=1 juste après default=0 :
vi /boot/grub/menu.lst
| [...] default=0 fallback=1 [...]
|
Copiez ensuite la première strophe du noyau et collez-la avant la première entrée existante, en changeant root (hd0,0) en root (hd1,0) pour que GRUB puisse démarrer depuis /dev/sdb :
| [...] title Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img
|
Exemple de fichier final :
| # 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 Fedora (2.6.23.1-42.fc8) root (hd1,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img title Fedora (2.6.23.1-42.fc8) root (hd0,0) kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.23.1-42.fc8.img
|
Explication : root (hd1,0) référence /dev/sdb. Avec fallback=1, si le premier noyau ne démarre pas, GRUB essaiera l’entrée suivante.
6. Régénérer l’initrd
Sauvegardez l’ancien initrd puis régénérez-en un adapté à la nouvelle configuration RAID :
mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`
7. Déplacer les données LVM vers /dev/md1
Déplacer physiquement les données de /dev/sda2 vers /dev/md1 :
pvmove /dev/sda2 /dev/md1
Cette opération peut durer longtemps selon la taille et l’activité du disque. Patientez.
Retirer ensuite /dev/sda2 du VG :
vgreduce VolGroup00 /dev/sda2
Indiquer au système de ne plus considérer /dev/sda2 comme PV :
pvremove /dev/sda2
Vérifiez pvdisplay :
pvdisplay
Sortie attendue :
[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.25 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg
[root@server1 ~]#
8. Ajouter /dev/sda2 à l’array et reconstruire
Changez le type de partition de /dev/sda2 en “Linux raid autodetect” et ajoutez-la à /dev/md1 :
fdisk /dev/sda
Exemple d’interaction :
[root@server1 ~]# fdisk /dev/sda
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
Consultez l’état de synchronisation :
cat /proc/mdstat
Exemple de synchronisation en cours :
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
5036288 blocks [2/1] [_U]
[=====>...............] recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
Vous pouvez suivre en continu :
watch cat /proc/mdstat
Quittez watch avec CTRL+C.
Attendez la fin de la synchronisation. La sortie finale devrait montrer [UU] :
[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
5036288 blocks [2/2] [UU]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]
unused devices:
[root@server1 ~]#
9. Monter /dev/md0 et copier /boot
Créez le point de montage et montez l’array :
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Vérifiez le montage :
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 ~]#
Copiez ensuite le contenu de /boot vers /mnt/md0 :
cd /boot
cp -dpRx . /mnt/md0
Important: conservez les permissions et attributs (-p), copiez récursivement (-R), conservez les liens (-d) et suivez les options pour la robustesse (-x pour rester sur le même système de fichiers si nécessaire).
10. Vérifications finales et redémarrage
- Vérifiez que /etc/fstab contient bien /dev/md0 pour /boot.
- Vérifiez que GRUB contient une entrée root (hd1,0) et fallback=1.
- Assurez-vous que /dev/md1 est intégré au VG et que les PV ne contiennent plus /dev/sda2.
Quand tout est correct, redémarrez le serveur et surveillez le démarrage. Si le boot depuis /dev/sdb échoue, GRUB utilisera la ligne de fallback et démarrera depuis /dev/sda.
Contre-exemples et cas d’échec courants
- Si vous oubliez d’ajouter /dev/md1 au VG (vgextend), les volumes logiques resteront sur l’ancien PV et pvmove échouera.
- Si /etc/fstab n’est pas mis à jour, le système risque de monter /boot depuis l’ancien disque au redémarrage, entraînant une incohérence avec le GRUB configuré pour /dev/md0.
- Si l’initrd n’est pas régénéré, le noyau peut ne pas détecter l’array RAID au démarrage et échouer à monter la racine.
- Si la partition table n’est pas relue (warning ioctl), un redémarrage peut être nécessaire pour que le kernel prenne en compte la nouvelle table.
Approches alternatives
- Utiliser rsync pour la synchronisation de /boot au lieu de cp pour gérer les fichiers ouverts et reprendre après interruption.
- Pour des configurations modernes : utiliser systemd-boot ou grub2 (selon distro) au lieu d’un menu.lst legacy. Ajustez les commandes GRUB en conséquence.
- Pour des environnements très critiques, tester l’ensemble sur une VM clonée avant d’appliquer en production.
Mini-méthodologie (checklist rapide)
- Sauvegarde complète.
- Créer md0/md1 avec missing.
- mkfs.ext3 /dev/md0.
- pvcreate /dev/md1 et vgextend.
- Mettre à jour /etc/mdadm.conf, /etc/fstab, /etc/mtab.
- Mettre à jour GRUB (root hd1,0 + fallback=1).
- Regénérer initrd.
- pvmove /dev/sda2 -> /dev/md1.
- changer type de partition sda2 et mdadm –add.
- Attendre synchronisation, monter md0, copier /boot.
- Redémarrer et vérifier.
Rôles et tâches (checklist par rôle)
- Administrateur système : planification, sauvegarde, validation de la procédure, modifications GRUB.
- Opérateur/Ingénieur stockage : création des arrays, monitor /proc/mdstat, pv/vg operations.
- Responsable sauvegarde : vérifier que les sauvegardes peuvent restaurer /boot et volumes LVM.
Critères de réussite
- /proc/mdstat montre [UU] pour les arrays importants.
- /boot est monté depuis /dev/md0 après redémarrage.
- Les volumes logiques fonctionnent et n’utilisent plus /dev/sda2.
- L’initrd contient les modules nécessaires pour monter RAID au démarrage.
Glossaire en une ligne
- RAID1 : miroir logiciel des données sur deux disques.
- mdadm : outil de gestion des arrays RAID sous Linux.
- pvmove : déplace des extents LVM d’un PV à un autre.
Résumé
- Créez les arrays RAID avec mdadm en utilisant le placeholder missing pour les disques occupés.
- Préparez /dev/md1 pour LVM et étendez le VG.
- Mettez à jour mdadm.conf, fstab, mtab et GRUB, puis régénérez l’initrd.
- Déplacez les données avec pvmove, ajoutez l’ancienne partition au RAID et attendez la synchronisation.
- Montez /dev/md0 et copiez /boot ; vérifiez puis redémarrez.
Notes: testez la procédure dans un environnement non critique avant de l’appliquer en production. Toujours garder une sauvegarde complète.
Matériaux similaires

Désactiver la notification macOS High Sierra

Créer un poster percutant en 6 étapes

Voir les dislikes YouTube — Chrome & Android

Convertir Spotify en MP3 avec TuneFab
Créer RAID logiciel (mdadm) et migrer les données
