Das Problem
Beim Ausführen von LVM-Befehlen auf dem CentOS/RHEL-Server werden „Prüfsummenfehler“ gemeldet.
# 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
Lösung
In den LVM2-Metadaten wird eine Prüfsumme gespeichert, sodass das Vorhandensein einer Beschädigung erkannt werden kann, bevor Daten tatsächlich beschädigt werden können. Dieses Problem tritt im Allgemeinen auf, wenn diese Prüfsumme nicht mit einer Prüfsumme übereinstimmt, die nach der Verarbeitung der Metadaten berechnet wurde.
Es kann viele verschiedene Ursachen für den Prüfsummenfehler geben, darunter einige:
- Wenn 2 Hosts unabhängig voneinander versuchen, die LVM2-Metadaten gleichzeitig zu aktualisieren (z. B. wie in einer Cluster-Situation) und kein geclusterter LVM (clvm) verwendet wird.
- E/A-Fehler, die auftreten, während die Metadaten aktualisiert werden (LVM2-Aktualisierungen werden nicht aufgezeichnet, sodass Unterbrechungen bei E/A-Aktualisierungen zu Beschädigungen führen können).
- Es gibt ein Problem in der SAN-Umgebung, falls die zugrunde liegenden Pfade aus dem SAN kommen.
Führen Sie die folgenden Schritte aus, um diesen Fehler zu beheben:
1. Sichern Sie alle Ihre Daten auf den logischen Volumes.
2. Stoppen Sie alle Dienste, die LVM-Ressourcen enthalten (damit die Datenträger ausgehängt und die Datenträgergruppen deaktiviert werden können). Der Dienst sollte auf keinem Knoten im Cluster ausgeführt werden (wenn der Fehler im Cluster gemeldet wird).
3. Stellen Sie die Metadaten mit dem Befehl „vgcfgrestore wieder her ‘. LVM-Metadaten-Sicherungsdateien werden in /etc/lvm/backup und /etc/lvm/archive gespeichert. Der Befehl vgcfgrestore verwendet standardmäßig die Sicherungsdatei in /etc/lvm/backup. Führen Sie vgcfgrestore aus, um die LVM-Metadaten wiederherzustellen. Zum Beispiel
# vgcfgrestore vg_os /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error Restored volume group vg_os
4. Aktivieren Sie die Volume-Gruppe.
# vgchange -ay vg_os 1 logical volume(s) in volume group "vg_os" now active
5. Führen Sie den Befehl „pvscan“ aus, um zu überprüfen, ob Sie die „Prüfsummenfehler“ jetzt sehen können.
# pvscan
6. Reaktivieren Sie alle Dienste, die vor dem vgcfgrestore gestoppt wurden.
Schlussfolgerung
Die Verwendung von vgcfgrestore kann eine Sicherung der LVM-Metadaten auf den physischen LVM-Volumes wiederherstellen, bevor die Beschädigung auftrat. Sie können die Standardsicherungsdatei in /etc/lvm/backup verwenden, um die Metadaten aus einer alten Sicherung wiederherzustellen. Wenn Sie eine Sicherungsdatei an einem anderen Speicherort haben, können Sie die Sicherungsdatei auch mit dem Befehl vgcfgrestore angeben, wie unten gezeigt.
# vgcfgrestore -f /path/to/backup/file vgname