Vous disposez sur votre système d’une batterie de disques configurés avec du RAID1 logiciel (/dev/md0
). L’espace de stockage est géré par LVM.
Vos deux disques étant en mirroir, il peut être utile de « casser » le RAID pour pouvoir disposer librement du stockage sur le deuxième disque, ou encore, dans le cadre d’une refonte, d’installer un tout nouveau système sur le deuxième disque, qui remplacera le premier à l’avenir.
En premier lieu, quelques commandes utiles en tout temps pour le diagnostic :
mdadm, le couteau suisse du RAID logiciel :
cat /proc/mdstat mdadm --detail /dev/md0
La batterie de commandes LVM2 :
pvdisplay pvs vgdisplay vgs lvdisplay lvs
La manipulation ne coule pas de source. En voici les étapes :
cat /proc/mdstat
montre les deux disques actifs (U pour Up). On marque le deuxième disque (/dev/hdc1
) comme défectueux puis on l’enlève de la séquence de RAID pour pouvoir l’utiliser librement :
mdadm --manage --set-faulty /dev/md0 /dev/hdc1 mdadm -r /dev/md0 /dev/hdc1
L’objectif maintenant est de remonter la deuxième moitié du RAID/LVM de manière indépendante, mais sans perdre les données dupliquées présentes.
Il faut donc créer une nouvelle séquence RAID identique à la première en partant du deuxième disque. L’initialisation de /dev/md1
se fait comme suit :
mdadm --create --verbose /dev/md1 --level=mirror --force --raid-devices=1 /dev/hdc1
cat /proc/mdstat
doit montrer les deux séquences.
La difficulté désormais est de faire en sorte que le système voie les deux VGs de manière indépendante, car toute commande LVM affiche désormais un avertissement du style :
Found duplicate PV LbpGyrR4uvsZivUwqnJQMYoZbCPTCpgu: using /dev/md1 not /dev/md0
Le soucis est que les deux PVs sur les deux raids possèdent le même UUID, du coup LVM utilise le PV qui n’est pas celui du système actuel. Le problème est ici assez insoluble. Le seul moyen de s’en sortir est d’utiliser la commande pvcreate
pour attribuer un nouveau UUID.
D’autre part, impossible d’utiliser cette commande sur un PV qui contient des LVs actifs (pvcreate
refuse).
Ajouter des filtres sur /dev/md0
ou /dev/md1
dans /etc/lvm/lvm.conf
ne donne rien non plus car pvcreate
ne les verra pas.
Voici donc la manipulation :
Vérifiez la présence d’un fichier /etc/lvm/backup/NOM_DU_VG
, ou faite en une sauvegarde à l’aide de la commande vgcfgbackup
.
Initialisez un volume physique (PV) vierge sur /dev/md1
en forçant la création :
pvcreate -ff /dev/md1
Puis un VG :
vgcreate vg2 /dev/md1
Copiez le fichier /etc/lvm/backup/NOM_DU_VG
et éditez le :
cp /etc/lvm/backup/vg /tmp/vg2 vi /tmp/vg2
Modifiez tous les UUID du fichier de sauvegarde. Il suffit par exemple, dans chaque UUID, de modifier un chiffre. Modifiez aussi le nom du vg. Pour le UUID du PV, mettez celui du PV récemment initialisé sur /dev/md1
(commande pvdisplay
).
Il est maintenant possible de restaurer la sauvegarde :
vgcfgrestore --file /tmp/vg2 vg2
Si tout s’est bien passé, on peut ensuite activer les LVs puis les monter :
vgchange -a y vg2 mount /dev/vg2/LV /mnt/test/