Le problème
Après un redémarrage, le système ne démarre pas ou n'active pas l'un des groupes de volumes LVM. Essayer d'activer le groupe manuellement produit le message :
Couldn't find device with uuid '[UUID]'
La solution
La chaîne LABELONE à l'emplacement des métadonnées marque le périphérique comme faisant partie d'un périphérique LVM. Sans cette chaîne, lvm3 ne tentera pas d'utiliser le périphérique en tant que volume physique. Les métadonnées de l'appareil physique peuvent être écrasées en raison d'une erreur système ou d'une action manuelle délibérée.
Pour les versions Linux 4 ou 5, la zone de métadonnées par défaut est de 192 Ko. Pour Linux version 6, les métadonnées par défaut sont de 1 Mo. Avant de tenter toute activité de récupération ou de réparation, nous vous encourageons fortement à faire une copie de sauvegarde de cette zone :
# /bin/dd if=/dev/xvdd of=/root/xvdd.metadata bs=1K count=[192_or_1024]
Pour vérifier la signature LVM, procédez comme suit :
# /bin/strings /root/xvdd.metadata | /bin/fgrep LABELONE
Si aucune sortie n'est produite, les métadonnées sont corrompues.
Vérifiez les informations dans :
/etc/lvm/backup /etc/lvm/archives
pour les changements. Si ceux-ci ont été modifiés ou sont incohérents, il est possible que l'activité de restauration corrompe l'intégralité des données du volume. Vérifiez que le périphérique physique ou le LUN est toujours disponible ou toujours présenté à ce serveur.
Faites preuve de diligence pour effectuer une sauvegarde régulière de tous les volumes LVM. Bien qu'ils puissent être récupérés, il est également possible qu'une mauvaise configuration corrompe complètement l'ensemble de données.
1. Notez que cet élément n'est important que si vous avez également des périphériques à chemins multiples sur votre système. Si vous n'utilisez pas LVM et le multipathing sur le même serveur, vous pouvez ignorer cet élément en toute sécurité.
Lors du démarrage du système, le sous-système LVM est averti chaque fois qu'un périphérique bloc, tel qu'un lecteur de disque ou un LUN, est utilisé pour construire un volume LVM. Il s'agit d'un processus asynchrone; il n'y a aucune garantie que les périphériques seront découverts dans le même ordre à chaque démarrage du système. Cela signifie que les chemins physiques d'un périphérique à chemins multiples sont susceptibles d'être découverts avant que le périphérique logique composite ne soit terminé, ce qui conduit à ce que le chemin physique soit revendiqué par le sous-système LVM avant que le sous-système à chemins multiples ne se voie offrir le périphérique. Il y a deux résultats indésirables à cette condition :
un. Un seul chemin vers le périphérique multichemin est utilisé et réclamé par LVM, laissant le système vulnérable à une défaillance en un seul point entraînant une perte catastrophique de connectivité au stockage.
b. Étant donné que LVM acquiert la propriété exclusive du chemin physique, la couche multivoie signale que le périphérique est occupé et ne peut pas créer le périphérique multichemin. Cela laisse le stockage soumis à une défaillance en un seul point empêchant l'accès au stockage. La solution consiste à forcer le LVM à ne prendre en compte que les périphériques de bloc qui doivent réellement contenir une partie d'un volume LVM. Pour ce faire, consultez le fichier /etc/lvm/lvm.conf :
# /bin/fgrep -n -e 's/#.*//' -e '/filter/p' /etc/lvm/lvm.conf filter = [ "a/.*/" ]
Si votre sortie ressemble à ce qui précède, vous avez un problème de configuration LVM qui cassera probablement tous les périphériques multivoies, si vous les utilisez sur votre système. La modification de ce paramètre sort du cadre de cette note. Nous continuerons en supposant que vous avez corrigé cette valeur.
2. Parfois, le stockage qui contient les données LVM est lent à être reconnu et peut être monté avec succès s'il est accédé après la stabilisation du système. Pour commencer, nous allons inventorier les périphériques de bloc disponibles et déterminer les UUID :
# /sbin/vgscan Reading all physical volumes. This may take a while... Couldn't fine device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. Found volume group "data_vg" using metadata type lvm2
Maintenant que nous avons l'UUID à l'origine du problème, nous devons trouver l'appareil associé :
# /sbin/pvs -o +uuid Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. PV VG Fmt Attr PSize PFree PV UUID /dev/xvdc data_vg lvm2 a-- 996.00M 0 VrVT1L-CTcT-9Nn9-oIAx-BnEA-X7sv-vJO6RE /dev/xvde data_vg lvm2 a-- 996.00M 428.00M tGIqvd-lsYv-7JmV-1bfD-t7BL-HaGi-rmIYW0 unknown device data_vg lvm2 a-m 996.00M 0 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt
3. Nous pouvons voir la distribution des volumes logiques sur les appareils physiques comme ceci :
# /sbin/lvs -o +devices Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices data_vg_lv data_vg -wi-a- 2.50G /dev/xvdc(0) data_vg_lv data_vg -wi-a- 2.50G unknown device(0) data_vg_lv data_vg -wi-a- 2.50G /dev/xvde(0) =
4. Essayez d'activer le groupe de volumes :
# /sbin/vgchange -a y data_vg Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. Refusing activation of partial LV data_vg_lv. Use --partial to override. 1 logical volume(s) in volume group "data_vg" now active
5. Essayez de réduire le groupe de volumes et supprimez le périphérique manquant :
# /sbin/vgreduce --removemissing data_vg Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. WARNING: Partial LV data_vg_lv needs to be repaired or removed. WARNING: There are still partial LVs in VG data_vg. To remove them unconditionally use: vgreduce --removemissing --force. Proceeding to remove empty missing PVs.
# /sbin/vgreduce --removemissing data_vg --force Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. Removing partial LV data_vg_lv. Logical volume "data_vg_lv" successfully removed Wrote out consistent volume group data_vg
6. Une fois le périphérique manquant éliminé du groupe, le périphérique LVM doit s'activer :
# /sbin/pvs PV VG Fmt Attr PSize PFree /dev/xvdc data_vg lvm2 a-- 996.00M 996.00M /dev/xvde data_vg lvm2 a-- 996.00M 996.00M
# /sbin/lvs -o +devices #
# /sbin/vgscan Reading all physical volumes. This may take a while... Found volume group "data_vg" using metadata type lvm2
# /sbin/vgdisplay --- Volume group --- VG Name data_vg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 1.95 GB PE Size 4.00 MB Total PE 498 Alloc PE / Size 0 / 0 Free PE / Size 498 / 1.95 GB VG UUID yTOvvd-ZjUe-gXP0-41BT-qUIk-8uPR-lpr9Pw
7. Nous pouvons essayer de restaurer le groupe de volumes en utilisant les informations stockées dans le répertoire /etc/lvm/archive/ :
# /sbin/vgcfgrestore -f data_vg_00003-1023778751.vg data_vg Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. Cannot restore Volume Group data_vg with 1 PVs marked as missing. Restore failed.
8. Tentative d'écrasement ou de restauration des informations sur l'appareil en fonction des paramètres UUID dérivés des informations sur le groupe de volumes :
# /sbin/pvcreate --restorefile /etc/lvm/archive/data_vg_00003-1023778751.vg --uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt /dev/xvdd Couldn't find device with uuid 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt. Writing physical volume data to disk "/dev/xvdd" Physical volume "/dev/xvdd" successfully created
9. Ouvrez les informations sur le groupe de volumes, par exemple /etc/lvm/archive/data_vg_00003-1023778751.vg à l'aide d'un éditeur de texte et supprimez la chaîne "MISSING" de l'entrée flags pour qu'elle ressemble à ceci :
flags = [ ]
10. Restaurez le LVM en utilisant cette entrée modifiée :
# /sbin/ vgcfgrestore -f /etc/lvm/archive/data_vg_00003-1023778751.vg data_vg Restored volume group data_vg
11. Vérifiez l'environnement :
# /sbin/vgscan Reading all physical volumes. This may take a while... Found volume group "data_vg" using metadata type lvm2
# /sbin/ pvs -o +uuid PV VG Fmt Attr PSize PFree PV UUID /dev/xvdc data_vg lvm2 a-- 996.00M 0 VrVT1L-CTcT-9Nn9-oIAx-BnEA-X7sv-vJO6RE /dev/xvdd data_vg lvm2 a-- 996.00M 0 70FBaa-3QKh-HTAF-gUzZ-u3mu-2RRs-hI3BIt /dev/xvde data_vg lvm2 a-- 996.00M 428.00M tGIqvd-lsYv-7JmV-1bfD-t7BL-HaGi-rmIYW0
12. Vérifiez la disponibilité de LVM :
# /sbin/lvs -o +devices LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices data_vg_lv data_vg -wi--- 2.50G /dev/xvdc(0) data_vg_lv data_vg -wi--- 2.50G /dev/xvdd(0) data_vg_lv data_vg -wi--- 2.50G /dev/xvde(0)