Il problema
Dopo un riavvio il sistema non si avvierà né attiverà uno dei gruppi di volumi LVM. Il tentativo di attivazione manuale del gruppo produce il messaggio:
Couldn't find device with uuid '[UUID]'
La soluzione
La stringa ETICHETTA nella posizione dei metadati contrassegna il dispositivo come parte di un dispositivo LVM. Senza questa stringa, lvm3 non tenterà di utilizzare il dispositivo come volume fisico. I metadati del dispositivo fisico possono essere sovrascritti a causa di un errore di sistema o di un'azione manuale deliberata.
Per Linux versioni 4 o 5, l'area dei metadati predefinita è 192 Kb. Per Linux versione 6, i metadati predefiniti sono 1Mb. Prima di tentare qualsiasi attività di ripristino o riparazione, ti consigliamo vivamente di fare una copia di backup di quest'area:
# /bin/dd if=/dev/xvdd of=/root/xvdd.metadata bs=1K count=[192_or_1024]
Per verificare la firma LVM, procedere come segue:
# /bin/strings /root/xvdd.metadata | /bin/fgrep LABELONE
Se non viene prodotto alcun output, i metadati sono danneggiati.
Rivedi le informazioni in:
/etc/lvm/backup /etc/lvm/archives
per le modifiche. Se questi sono stati modificati o sono incoerenti, è possibile che l'attività di ripristino danneggi l'intero volume di dati. Verifica che il dispositivo fisico o LUN sia ancora disponibile o ancora presentato a questo server.
Sii diligente nell'effettuare backup regolari per tutti i volumi LVM. Sebbene possano essere recuperabili, è anche possibile che un'errata configurazione danneggi completamente l'intero set di dati.
1. Tieni presente che questo elemento è importante solo se sul tuo sistema sono presenti anche dispositivi con percorsi multipli. Se non utilizzi LVM e il multipathing sullo stesso server, puoi tranquillamente saltare questo elemento.
Durante l'avvio del sistema, il sottosistema LVM riceve una notifica ogni volta che un dispositivo a blocchi, come un'unità disco o un LUN, in modo che il dispositivo possa essere utilizzato per costruire un volume LVM. Questo è un processo asincrono; non vi è alcuna garanzia che i dispositivi vengano rilevati nello stesso ordine ogni volta che il sistema viene avviato. Ciò significa che è probabile che i percorsi fisici di un dispositivo multipath vengano scoperti prima che il dispositivo logico composito sia completo, portando al percorso fisico richiesto dal sottosistema LVM prima che al sottosistema multipath venga offerto il dispositivo. Ci sono due risultati indesiderati di questa condizione:
un. Solo un singolo percorso per il dispositivo multipath viene utilizzato e rivendicato da LVM, lasciando il sistema vulnerabile a un errore single-point che causa una catastrofica perdita di connettività allo storage.
b. Poiché LVM ottiene la proprietà esclusiva del percorso fisico, il livello multipath segnala il dispositivo come occupato e non può creare il dispositivo multipath. Ciò lascia lo spazio di archiviazione soggetto a un errore in un singolo punto che impedisce l'accesso allo spazio di archiviazione. La soluzione è forzare l'LVM a considerare solo quei dispositivi a blocchi che devono effettivamente contenere parte di un volume LVM. Il modo per farlo è esaminare il file /etc/lvm/lvm.conf:
# /bin/fgrep -n -e 's/#.*//' -e '/filter/p' /etc/lvm/lvm.conf filter = [ "a/.*/" ]
Se il tuo output è simile a quello sopra, hai un problema di configurazione LVM che probabilmente interromperà tutti i dispositivi multipath, se li usi sul tuo sistema. La modifica di questo parametro non rientra nell'ambito di questa nota. Procederemo presumendo che tu abbia corretto questo valore.
2. A volte la memoria che contiene i dati LVM è lenta da riconoscere e può essere montata correttamente se si accede dopo che il sistema si è stabilizzato. Per iniziare, faremo l'inventario dei dispositivi a blocchi disponibili e determineremo gli 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
Ora che abbiamo l'UUID che causa il problema, dobbiamo trovare il dispositivo associato:
# /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. Possiamo visualizzare la distribuzione dei volumi logici sui dispositivi fisici in questo modo:
# /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. Prova ad attivare il gruppo di volumi:
# /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. Prova a ridurre il gruppo del volume e rimuovere il dispositivo mancante:
# /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. Con il dispositivo mancante eliminato dal gruppo, il dispositivo LVM dovrebbe attivarsi:
# /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. Possiamo provare a ripristinare il gruppo di volumi utilizzando le informazioni memorizzate nella directory /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. Tentativo di sovrascrivere o reimpostare le informazioni sul dispositivo in base alle impostazioni UUID derivate dalle informazioni sul gruppo di volumi:
# /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. Apri le informazioni sul gruppo di volumi, ad esempio /etc/lvm/archive/data_vg_00003-1023778751.vg utilizzando un editor di testo e rimuovi la stringa "MANCANTE" dalla voce flag in modo che appaia così:
flags = [ ]
10. Ripristinare LVM utilizzando questa voce modificata:
# /sbin/ vgcfgrestore -f /etc/lvm/archive/data_vg_00003-1023778751.vg data_vg Restored volume group data_vg
11. Verifica l'ambiente:
# /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. Verifica la disponibilità di 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)