Le problème
Des "erreurs de somme de contrôle" sont signalées lors de l'exécution de commandes LVM sur le serveur 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
Solution
Une somme de contrôle est stockée dans les métadonnées LVM2 afin que la présence de corruption puisse être détectée avant que les données ne puissent être réellement endommagées. Ce problème se produit généralement lorsque cette somme de contrôle ne correspond pas à une somme de contrôle calculée après le traitement des métadonnées.
Il peut y avoir de nombreuses causes différentes de l'erreur de somme de contrôle, dont certaines sont les suivantes :
- Si 2 hôtes tentent indépendamment de mettre à jour les métadonnées LVM2 en même temps (c'est-à-dire comme une situation de cluster) et que LVM en cluster (clvm) n'est pas utilisé.
- Erreurs d'E/S qui se produisent lors de la mise à jour des métadonnées (les mises à jour LVM2 ne sont pas journalisées, les interruptions des mises à jour d'E/S peuvent donc entraîner une corruption).
- Il existe un problème dans l'environnement SAN au cas où les chemins sous-jacents proviendraient du SAN.
Afin de résoudre cette erreur, suivez les étapes ci-dessous :
1. Sauvegardez toutes vos données sur les volumes logiques.
2. Arrêtez tous les services contenant des ressources LVM (afin que les volumes puissent être démontés et les groupes de volumes désactivés). Le service ne doit s'exécuter sur aucun nœud du cluster (si l'erreur est signalée sur le cluster).
3. Restaurez les métadonnées à l'aide de la commande 'vgcfgrestore ‘. Les fichiers de sauvegarde des métadonnées LVM sont stockés dans /etc/lvm/backup et /etc/lvm/archive. La commande vgcfgrestore utilise par défaut le fichier de sauvegarde dans /etc/lvm/backup. Exécutez vgcfgrestore pour restaurer les métadonnées LVM. Par exemple,
# vgcfgrestore vg_os /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error Restored volume group vg_os
4. Activez le groupe de volumes.
# vgchange -ay vg_os 1 logical volume(s) in volume group "vg_os" now active
5. Exécutez la commande "pvscan" pour vérifier si vous pouvez voir les "erreurs de somme de contrôle" maintenant.
# pvscan
6. Réactivez tous les services qui ont été arrêtés avant le vgcfgrestore.
Conclusion
L'utilisation de vgcfgrestore peut restaurer une sauvegarde des métadonnées LVM sur les volumes physiques LVM avant que la corruption ne se produise. Vous pouvez utiliser le fichier de sauvegarde par défaut dans /etc/lvm/backup pour restaurer les métadonnées d'une ancienne sauvegarde. Si vous avez un fichier de sauvegarde à un autre emplacement, vous pouvez également spécifier le fichier de sauvegarde avec la commande vgcfgrestore comme indiqué ci-dessous.
# vgcfgrestore -f /path/to/backup/file vgname