問題
CentOS/RHEL サーバーで LVM コマンドを実行すると、「チェックサム エラー」が報告されます。
# 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
解決策
データが実際に破損する前に破損の存在を検出できるように、チェックサムが LVM2 メタデータに格納されます。この問題は通常、そのチェックサムがメタデータの処理後に計算されたチェックサムと一致しない場合に発生します。
チェックサム エラーにはさまざまな原因が考えられますが、次のようなものがあります:
<オール>
このエラーを解決するには、以下の手順に従ってください:
1. 論理ボリューム上のすべてのデータをバックアップします。
2. LVM リソースを持つすべてのサービスを停止します (ボリュームをアンマウントし、ボリューム グループを非アクティブ化できるようにします)。クラスター内のどのノードでもサービスが実行されていない必要があります (クラスターでエラーが報告された場合)。
3. コマンド「vgcfgrestore」を使用してメタデータを復元します '。 LVM メタ データ バックアップ ファイルは、/etc/lvm/backup および /etc/lvm/archive に保存されます。デフォルトでは、vgcfgrestore コマンドは /etc/lvm/backup のバックアップ ファイルを使用します。 vgcfgrestore を実行して、LVM メタ データを復元します。たとえば、
# vgcfgrestore vg_os /dev/mapper/cx0009_lun45: Checksum error /dev/mapper/cx0009_lun48: Checksum error Restored volume group vg_os
4. ボリューム グループをアクティブ化します。
# vgchange -ay vg_os 1 logical volume(s) in volume group "vg_os" now active
5. 「pvscan」コマンドを実行して、「チェックサム エラー」が表示されるかどうかを確認します。
# pvscan
6. vgcfgrestore の前に停止されたサービスを再度有効にします。
結論
vgcfgrestore を使用すると、破損が発生する前の LVM メタデータのバックアップを LVM 物理ボリュームに復元できます。 /etc/lvm/backup のデフォルトのバックアップ ファイルを使用して、古いバックアップからメタ データを復元できます。他の場所にバックアップ ファイルがある場合は、以下に示すように vgcfgrestore コマンドでバックアップ ファイルを指定することもできます。
# vgcfgrestore -f /path/to/backup/file vgname