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/
Salut, merci pour ce tuto, je trouve ça bien utile :-)
Après les manips, je peux monter le lv qui est sur vg2 et ainsi consulter ma sauvegarde, par contre impossible de booter dessus.
La sequence de boot s’arrete sur ce message :
volume group “vg2″ not found.
J’ai ensuite un prompt rescue qui m’a permis de voir qu’à cet étape du boot md1 n’est pas dans la liste /dev. Pourtant j’ai ajouté md1 au fichier /etc/mdadm/mdadm.conf et dans le doute je l’ai meme ajouté sur le lv du vg2…As tu une idée?
C’est dommage que tu ne répondes pas…
J’ai constaté qu’en debranchant physiquement le 1er disque(celui que j’ai laissé sur MD0). La sequence de boot me fait une erreur disant impossible d’activer md0 mais active md1 et trouve vg2 :)
Ensuite lorsque je rebranche le disque 1. je peux booter au choix sur vg1(de md0) ou sur vg2(de md1).
C’est chouette ça fonctionne mais pourquoi? Pourquoi a-t il fallut que je passe par une phase de suppression physique du 1er raid(en debranchant le seul disque restant du raid)?
Autre chose etrange je n’avais pas modifier mon fstab. J’avais donc un montage avec vg1 vers / . la partition root a quand même été montée…par la suite je l’ai changé pour pouvoir booter au choix sur vg1 ou vg2. depuis VG1 est bien VG1 et VG2 est bien VG2. ce devait être un pb de metadata…
J’espere avoir ete clair.
Me voici… !
Tu utilises quoi comme chargeur d’OS ? Grub 1 ou grub 2 ?
Pour l’histoire du problème du boot sur le 2e vg, je sais que le support complet de LVM par Grub est assez récent. Par exemple, ça ne m’étonne pas que Grub 1 ne reconnaisse qu’un VG.
Enfin tant mieux si ton débranchement/rebranchement a corrigé le problème ! Je n’ai pas plus d’explication que toi là dessus.
Pour l’histoire du fstab, c’est tout à fait normal : tu avais quelquechose comme /dev/vg1/root comme slash dans ta fstab. Donc, même si Grub charge le noyau du vg2, ce dernier va monter comme slash le vg1 précisé dans la fstab.
Salut! Merci d’avoir repondu.
J’ai tout compris :-) ça fait 4 soirées que je passe dessus :p
1) Pourquoi a-t-il monté vg2/root alors que le fstab indiquait encore vg1/root?
Reponse : parce que grub a ordonné de monter vg2/root comme partition root :)
2) Pourquoi le fait d’avoir branché mon 2e disque seul a permis l’assemblage de md1 au boot et par la meme occasion le montage de vg2/root?
Reponse : parce que n’ayant pas trouvé de fichier mdadm.conf le systeme a tenté un reassemblage du raid à partir des metadonnés.
3) Pourquoi ne voyait-t-il qu’un disque raid au boot, et deux une fois le system lancé?
Reponse : Parce qu’à la phase de boot le kernel lit un fichier mdadm.conf dans le initrd. Une fois le système lancé lvm s’appuie sur le dossier /dev de la partition vg1/root qui contient tout les raids :-)
Es tu d’accord avec mes conclusions?
Enfin pour en être certain, j’ai changé le fichier mdadm.conf de mon initrd. ça fonctionne parfaitement.
NB : il s’agit d’une machine virtuelle(vbox). Grâce au snapshot j’ai pu retourner en arrière et faire d’autres essais.
Grâce à toi j’ai appris plein de choses :-) Merci
PS : j’utilise grub 1(enfin 0.97 je crois)
Un graaaand merci pour ce tuto. Je l’ai utilisé dans un autre cadre. Je bosse sur des problématiques de clone de VM (qui utilisent LVM)
Quand je faisait un pvcreate du nouveau disque, je me retrouvais avec des uuid en doubons, ce qui avait pour effet de désactiver l’ancien VG. Et j’ai du m’arracher les cheveux des heures pour tenter de restaurer le VG et les LV associés. Grâce à toi, je sais maintenant comment le restore fonctionne, et comment maintenant le clone sera fonctionnel; il suffira de changer les id :)
Grand merci