0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LVMメタデータの消失と復旧

Posted at

LVMをリサイズする過程で、手順をミスして「データ消失した!?」とパニクったけど、なんとか復旧できてホッとした話(雑な説明)。

RedHatの公式サイトにも書いてあるけど、

警告
機能している LVM 論理ボリュームについては、この手順を試みないでください。間違った UUID を指定するとデータ損失の原因となります。

ということなので、試すならSnapshotやバックアップ推奨。

環境

OS: Red Hat Enterprise Linux 8.6
PV: /dev/sdb1
VG: vg1
LV: lv1
mount point: /mnt

手順ミス

LVMをリサイズする手順のなかで、ディスクは容量拡張済み、というところからスタート。
まずは、現状の物理ボリュームとパーティションをチェック。

[root@testsrv ~]# pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize     PFree
  /dev/sdb1  vg1  lvm2 a--  <1000.00g    0

[root@testsrv ~]# fdisk -l /dev/sdb
デバイス   起動 開始位置   終了位置     セクタ  サイズ Id タイプ
/dev/sdb1        2048 2097151999 2097149952  1000G 8e Linux LVM

OK、じゃ次はパーティション情報を一旦削除してっと…

[root@testsrv ~]# fdisk /dev/sdb
(対話モード: p -> d -> ... w の手順)

[root@testsrv ~]# fdisk -l /dev/sdb
デバイス   起動 開始位置   終了位置     セクタ  サイズ Id タイプ
/dev/sdb1        2048 2097151999 2097149952  1000G 83 Linux

よし。…ん?! あああ!

タイプ
Linux ← !!!

しまった、LVMにするの忘れてた!!

やらかした結果

おおう… なんかおかしくなってしまったぞ…

[root@testsrv ~]# pvs /dev/sdb1
  Cannot use /dev/sdb1: device not found

物理ボリュームはもちろん、VG/LVともなくなってしまった。
…これはまずい。データはどこへいった?!

しかも再起動すると、

You are in emergency mode.

OSが正常起動しない!
ただし、これはサクッと /etc/fstab から /mnt のエントリーをコメントアウト、OS再起動して復旧。

復旧への道

助けてRedHat!
(rhel8用のドキュメントより、なぜかrhel6用の方がわかりやすい)

上記を参考に…
まずは、おかしくなる前のLVMメタデータ、そしてPVのUUIDを探す。

[root@testsrv ~]# ls -l /etc/lvm/archive/vg1*
-rw------- 1 root root 1320  6月 17 20:52 vg1_00000-4567891230.vg ← 多分これだ!
-rw------- 1 root root  894  6月 17 22:01 vg1_00001-1234567890.vg

[root@testsrv ~]# grep -i id -B 1 /etc/lvm/archive/vg1_00000-4567891230.vg
vg1 {
        id = "FJKdi3-aFVi-emff-maia-Vndd-IEkd-KDIVJ0"
--
                pv0 {
                        id = "Effvcc-Ca34-W32U-ftsp-B4FP-Tvde-dVC231" ← PVのUUID

そして、PVを復旧。
pvcreate はメタデータ領域だけを上書きして、既存データには影響しないそうだ。

pvcreate --uuid [PV UUID] --restorefile [xxx.vg] [partition] ※"-t" でテスト実行可能
[root@testsrv ~]# pvcreate --uuid "Effvcc-Ca34-W32U-ftsp-B4FP-Tvde-dVC231" --restorefile /etc/lvm/archive/vg1_00000-4567891230.vg /dev/sdb1
  WARNING: Couldn't find device with uuid Effvcc-Ca34-W32U-ftsp-B4FP-Tvde-dVC231.
  Physical volume "/dev/sdb1" successfully created.

[root@testsrv ~]# pvs /dev/sdb1
  PV         VG   Fmt  Attr PSize     PFree
  /dev/sdb1       lvm2 a--  <1000.00g    0

よし!戻ってきた!!

お次は、VGの復旧。

vgcfgrestore [VG] -f [xxx.vg] ※"--test" でテスト実行可能
[root@testsrv ~]# vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00000-4567891230.vg
  Restored volume group vg1.

[root@testsrv ~]# vgs vg1
  VG  #PV #LV #SN Attr   VSize     VFree
  vg1   1   1   0 wz--n- <1000.00g    0

[root@testsrv ~]# lvs vg1
  LV  VG  Attr       LSize     Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1 vg1 -wi------- <1000.00g

よしよし!

でも、まぁだまだ。

[root@testsrv ~]# mount /mnt
mount: /mnt: スペシャルデバイス /dev/mapper/vg1-lv1 が存在しません.

[root@testsrv ~]# lvdisplay vg1 | grep -i status
  LV Status              NOT available

LVがアクティブ化されてないので、vgchange でアクティブ化!

[root@testsrv ~]# vgchange -ay vg1
  1 logical volume(s) in volume group "vg1" now active

[root@testsrv ~]# lvdisplay vg1 | grep -i status
  LV Status              available

[root@testsrv ~]# lvs vg1
  LV  VG  Attr       LSize     Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1 vg1 -wi-a----- <1000.00g

よかった… もとに戻った!!

教訓
LVMディスクの容量拡張前に、スナップショットを取ってたらよかったんだよ!!

ほんとそれ。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?