Il problema
Gli "errori di checksum" vengono segnalati durante l'esecuzione di comandi LVM sul server CentOS/RHEL.
# vgs /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error VG #PV #LV #SN Attr VSize VFree vg00 1 7 0 wz--n- 279.12G 159.12G vgcommrmandb 1 6 0 wz--n- 20.00G 44.00M vgcotsoracle 1 1 0 wz--n- 20.00G 4.00M vgcotsorapit 1 1 0 wz--n- 50.00G 4.00M ...
# lvs /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error LV VG Attr LSize Origin Snap% Move Log Copy% Convert crashvol vg00 -wi-ao 64.00G homevol vg00 -wi-ao 4.00G oemagentvol vg00 -wi-ao 10.00G rootvol vg00 -wi-ao 10.00G swapvol vg00 -wi-ao 16.00G tmpvol vg00 -wi-ao 8.00G ...
# pvs /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error PV VG Fmt Attr PSize PFree /dev/cciss/c0d0p2 vg00 lvm2 a-- 279.12G 159.12G /dev/mapper/cx0008_lun37 vgeflxwmq lvm2 a-- 5.00G 1.00G /dev/mapper/cx0009_lun30 vgeflxjvastb lvm2 a-- 40.00G 8.04G /dev/mapper/cx0009_lun31 vgeflxhdb1arch lvm2 a-- 60.00G 20.00M
Soluzione
Un checksum viene archiviato nei metadati LVM2 in modo che la presenza di danneggiamento possa essere rilevata prima che i dati possano essere effettivamente danneggiati. Questo problema si verifica generalmente quando il checksum non corrisponde a un checksum calcolato dopo l'elaborazione dei metadati.
Potrebbero esserci molte diverse cause dell'errore di checksum, alcune di queste includono le seguenti:
- Se 2 host stanno tentando indipendentemente di aggiornare i metadati LVM2 contemporaneamente (ad es. come una situazione di cluster) e LVM in cluster (clvm) non è in uso.
- Errori di I/O che si verificano durante l'aggiornamento dei metadati (gli aggiornamenti di LVM2 non vengono registrati nel journal, quindi le interruzioni negli aggiornamenti di I/O possono causare danni).
- Si è verificato un problema nell'ambiente SAN nel caso in cui i percorsi sottostanti provengano da SAN.
Per risolvere questo errore, segui i passaggi indicati di seguito:
1. Eseguire il backup di tutti i dati sui volumi logici.
2. Arrestare tutti i servizi che contengono risorse LVM (in modo che i volumi possano essere smontati e i gruppi di volumi disattivati). Il servizio non deve essere in esecuzione su nessun nodo del cluster (se l'errore viene segnalato nel cluster).
3. Ripristina i metadati utilizzando il comando 'vgcfgrestore '. I file di backup dei metadati LVM sono archiviati in /etc/lvm/backup e /etc/lvm/archive. Il comando vgcfgrestore per impostazione predefinita utilizza il file di backup in /etc/lvm/backup. Eseguire vgcfgrestore per ripristinare i metadati LVM. Ad esempio,
# vgcfgrestore vg_os /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error Restored volume group vg_os
4. Attiva il gruppo di volumi.
# vgchange -ay vg_os 1 logical volume(s) in volume group "vg_os" now active
5. Esegui il comando "pvscan" per verificare se puoi vedere gli "errori di checksum" ora.
# pvscan
6. Riattiva tutti i servizi che sono stati interrotti prima di vgcfgrestore.
Conclusione
L'uso di vgcfgrestore può ripristinare un backup dei metadati LVM sui volumi fisici LVM da prima che si verificasse il danneggiamento. È possibile utilizzare il file di backup predefinito in /etc/lvm/backup per ripristinare i metadati da un vecchio backup. Se hai un file di backup in un'altra posizione, puoi anche specificare il file di backup con il comando vgcfgrestore come mostrato di seguito.
# vgcfgrestore -f /path/to/backup/file vgname