zhangguanzhang's Blog

proxmox 开机 error: disk 'lvmid/[vg uuid]/[lv uuid]' not found

字数统计: 1.5k阅读时长: 7 min
2022/02/18

一次 proxmox 机器突然宕机,开机后进入 grub resuce 无法启动的处理过程

起因

上午 ssh 到 proxmox 上的虚机上做实验,突然机器断开了,以为是虚机的问题,结果发现是 proxmox 机器有问题了,接上显示器重启看到进入了 grub rescue 模式。

pve 版本信息为如下:

1
2
3
4
5
$ pveversion
pve-manager/6.2-4/9824574a (running kernel: 5.4.34-1-pve)
# 2022/04/06
# 帮别人一个 7.1-7 的这样问题也是按照文章步骤恢复的
# 并更新文章里部分命令和介绍

处理过程

错误信息

错误信息为如下,暂时看了下 lvm 是存在的。

1
2
3
4
error: disk `lvmid/ExzA22-yHkV-0ymE-XbMT-zrD6-69Wp-bboRVP/zbB3V2-Kg2Y-EdI6-dbs1-6uSo-e6wk-ZRBJdh' not found.
Entering rescue mode...
grub rescue> ls
(lvm/pve-root) (lvm/pve-swap) (hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1)

进入 rescue 模式

搞个 u 盘,把 CentOS 7.9 minimal 的 ISO 烧录进去后,插到 proxmox 的 USB 口子上,开机 F12 选择从 U 盘启动。
选择 Troubleshooting –> Rescue 选中 Rescue a CentOS system ,一直等待,有交互后,选择 3,也就是 3) Skip to shell

先看下 lvm 信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda1 pve lvm2 a-- <931.51g 697.50g
/dev/sdb3 pve lvm2 a-- <476.44g 0
$ vgs
VG #PV #LV #SN Attr VSize VFree
pve 2 23 0 wz--n- 1.37t 697.50g
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
base-101-disk-0 pve Vri---tz-k 10.00g data
base-106-disk-0 pve Vri---tz-k 20.00g data
data pve twi-aotz-- <550.29g 73.93 6.08
root pve -wi-ao---- 146.00g
snap_vm-102-disk-0_a20210429 pve Vri---tz-k 30.00g data vm-102-disk-0
swap pve -wi-ao---- 7.00g
vm-100-cloudinit pve Vwi-a-tz-- 4.00m data 9.38
vm-100-disk-0 pve Vwi-a-tz-- 10.00g data base-101-disk-0 16.65
vm-100-disk-1 pve Vwi-a-tz-- 7.00g data 0.17
vm-101-cloudinit pve Vwi-a-tz-- 4.00m data 0.00
vm-102-cloudinit pve Vwi-aotz-- 4.00m data 9.38
vm-102-disk-0 pve Vwi-aotz-- 100.00g data 73.78
vm-102-state-a20210429 pve Vwi-a-tz-- <8.49g data 44.03
vm-103-disk-0 pve Vwi-a-tz-- 25.00g data 99.98
vm-104-disk-0 pve Vwi-a-tz-- <2.02g data 99.31
vm-105-cloudinit pve Vwi-a-tz-- 4.00m data 9.38
vm-105-disk-0 pve Vwi-a-tz-- 10.00g data 85.13
vm-106-cloudinit pve Vwi-a-tz-- 4.00m data 0.00
vm-107-cloudinit pve Vwi-a-tz-- 4.00m data 9.38
vm-107-disk-0 pve Vwi-a-tz-- 30.00g data 65.94
vm-108-cloudinit pve Vwi-aotz-- 4.00m data 9.38
vm-108-disk-0 pve Vwi-aotz-- 250.00g data 99.21
vm-200-disk-0 pve Vwi-aotz-- <2.02g data 99.31

激活下 vg 看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ vgchange -a y
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
/usr/sbin/dmeventd: stat failed: No such file or directory
WARNING: Failed to monirot pve/data.
...
20 logical volume(s) in volume group "pve" now active

手动挂载下看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ mount /dev/mapper/pve-root /mnt/sysimage

# 如果报错
mount: wrong fs type, bad option, bad superblock on /dev/mapper/pve-root,
missing codepage or helper program, or other error

In some cases useful info is found in syslog - try
dmesg | tail or so.
# 建议 pve 的 iso 进入救援模式,去修复上面的分区路径,pve 的 root 分区一般是 ext4 文件系统,所以修复下试试
$ fsck.ext4 -y /dev/mapper/pve-root

# 如果是 centos 的 iso rescue 里使用 e2fsck ,可能会报错版本低:
e2fsck 1.42.9 (28-Dec-2013)
/dev/mapper/pve-root has unsupported feature(s): metadata_csum
e2fsck: Get a newer version of e2fsck!
1
2
3
4
5
6
7
8
9
10
11
12
13
$ cd /mnt/sysimage
$ ls -l boot/
total 58496
-rw-r--r-- 1 root root 237698 May 7 2020 config-5.4.34-1-pve
drwxr-xr-x 3 root root 4096 Jan 1 1970 efi
drwxr-xr-x 6 root root 4096 Feb 18 12:59 grub
-rw-r--r-- 1 root root 42573458 Aug 18 2021 initrd.img-5.4.34-1-pve
-rw-r--r-- 1 root root 182704 Jun 26 2015 memtest86+.bin
-rw-r--r-- 1 root root 184840 Jun 26 2015 memtest86+_multiboot.bin
drwxr-xr-x 2 root root 4096 Sep 9 2020 pve
-rw-r--r-- 1 root root 4795341 May 7 2020 System.map-5.4.34-1-pve
-rw-r--r-- 1 root root 11901312 May 7 2020 vmlinuz-5.4.34-1-pve
$ cp etc/lvm/backup/pve root/pve

然后 chroot 进去

1
2
3
4
5
6
mount -o bind /dev /mnt/sysimage/dev
mount -o bind /proc /mnt/sysimage/proc
mount -o bind /run /mnt/sysimage/run
mount -o bind /sys /mnt/sysimage/sys
# 上面如果在chroot之前不 mount 会导致一些lstat /dev /proc /sys 的命令报错无法读取这些目录
chroot /mnt/sysimage

里面去折腾了下,好像是 vg 和 lv 的 uuid 变了,尝试vgcfgrestore :

1
2
3
4
# 结尾 pve 是 root 所在的 vg 名字
vgcfgrestore --test -f /etc/lvm/backup/pve pve
# 输入 y 回车,失败了就下面的 --force 选项运行
vgcfgrestore --force -f /etc/lvm/backup/pve pve

重启还是不行,看了下 /etc/lvm/backup/pve 也没啥问题。

解决

lvm 信息和文件都在,可能是 grub 损坏了。尝试备份 grub.cfg 后 grub-mkconfig 了下, diff 对比了下也没变啥 uuid 相关的地方,然后重启再进 CentOS Rescue 模式里,选择 1 自动挂载。然后尝试 chroot 进去 grub-install:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 没选自动挂载的话记得下面这些命令
mount /dev/mapper/pve-root /mnt/sysimage
mount -o bind /dev /mnt/sysimage/dev
mount -o bind /proc /mnt/sysimage/proc
mount -o bind /run /mnt/sysimage/run
mount -o bind /sys /mnt/sysimage/sys


# 退出了 chroot 的话就再 chroot 进来
chroot /mnt/sysimage
cd /boot/grub
cp grub.cfg grub.cfg.bak
lvscan
vgscan
pvscan

/boot/efi 有些机器不是 uefi 启动的,这个时候先看下 /etc/fstab 里有 /boot/efi 的挂载没,有的话就需要下面这样挂载下

1
2
3
# cat /etc/fstab 找到 /boot/efi 的分区的 UUID,lsblk 找到该 UUID 的 dev 设备
# 例如我的是 /dev/sda2 执行下面命令挂载 /boot/efi
mount /dev/sda2 /boot/efi

grub-install

1
2
3
4
# pve 是 grub-install 不是 grub2 也没有 grub2-install
grub-install --debug --recheck --root-directory=/ /dev/mapper/pve-root
# 上面的 grub-install 没失败就可以了
reboot

然后就好了。

一些其他命令

1
2
3
4
5
6
grub-probe -d /dev/mapper/pve-root -t drive
# 如果下面命令报错就无法 grub-install
$ grub-probe -d /dev/mapper/pve-root
ext2
# 用于更新 grub 信息,但是一般对这种情况没多大用貌似
grup-update
CATALOG
  1. 1. 起因
  2. 2. 处理过程
    1. 2.1. 错误信息
    2. 2.2. 进入 rescue 模式
    3. 2.3. 解决
    4. 2.4. 一些其他命令