Featured image of post almalinux虚拟机读取不到pv

almalinux虚拟机读取不到pv

问题来由

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.3 (Shamrock Pampas Cat)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.3"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.3 (Shamrock Pampas Cat)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.3"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.3"
1
2
3
4
5
$ lvm version
  LVM version:     2.03.21(2) (2023-04-21)
  Library version: 1.02.195 (2023-04-21)
  Driver version:  4.48.0
  Configuration:   ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-default-dm-run-dir=/run --with-default-run-dir=/run/lvm --with-default-pid-dir=/run --with-default-locking-dir=/run/lock/lvm --with-usrlibdir=/usr/lib64 --enable-fsadm --enable-write_install --with-user= --with-group= --with-device-uid=0 --with-device-gid=6 --with-device-mode=0660 --enable-pkgconfig --enable-cmdlib --enable-dmeventd --enable-blkid_wiping --with-udevdir=/usr/lib/udev/rules.d --enable-udev_sync --with-thin=internal --with-cache=internal --enable-lvmpolld --enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol --enable-lvmlockd-sanlock --enable-dbus-service --enable-notify-dbus --enable-dmfilemapd --with-writecache=internal --with-vdo=internal --with-vdo-format=/usr/bin/vdoformat --with-integrity=internal --with-default-use-devices-file=1 --disable-silent-rules --enable-app-machineid --enable-editline --disable-readline

遇到一个很有意思的问题,我用的almalinux9.3 虚拟机,虚拟化是在本机有VMware做的,我创建了第一个虚拟机以后复制了三份,搞笑的是我三个机器都启动不了。系统报错:

a start job is running for /dev/mapper/almalinux-home

time out waiting for the device /dev/mapper/almalinux-home

然后我重启的时候,移除了相关的挂载配置,让 initramfs 跳过了 almalinux-home 的挂载,把这个:

1
2
3
4
5
load_video
set gfxpayload=keep
insmod gzio
linux ($root)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/almalinux-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap
initrd ($root)/initramfs-5.14.0-362.8.1.el9_3.x86_64.img

改成了这个:

1
2
3
4
5
load_video
set gfxpayload=keep
insmod gzio
linux ($root)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/almalinux-root ro
initrd ($root)/initramfs-5.14.0-362.8.1.el9_3.x86_64.img

系统就可以正常继续启动了

当然这个只是第一步,得搞清楚为啥挂载不了:

1
2
3
4
5
6
7
8
9
$ lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sr0                 11:0    1 10.2G  0 rom
nvme0n1            259:0    0   80G  0 disk
├─nvme0n1p1        259:1    0    1G  0 part /boot
└─nvme0n1p2        259:2    0   79G  0 part
  ├─almalinux-root 253:0    0 50.5G  0 lvm  /
  ├─almalinux-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─almalinux-home 253:2    0 24.6G  0 lvm  /home
1
2
$ lvs
  Devices file sys_wwid eui.4c79bebc62b2e44d000c29618525ffc6 PVID n1uvX9X9qsgXee8DeGfVyacLbQxi2St9 last seen on /dev/nvme0n1p2 not found.
1
2
$ vgs
  Devices file sys_wwid eui.4c79bebc62b2e44d000c29618525ffc6 PVID n1uvX9X9qsgXee8DeGfVyacLbQxi2St9 last seen on /dev/nvme0n1p2 not found.
1
2
$ pvs
  Devices file sys_wwid eui.4c79bebc62b2e44d000c29618525ffc6 PVID n1uvX9X9qsgXee8DeGfVyacLbQxi2St9 last seen on /dev/nvme0n1p2 not found.

好嘛,pv都找不到了。然后就是试图修复,用了一堆修复的工具,无果。google查,查到了这个:

RHEL 9下lvm-set-filter的bug , bug详情可以参考这里:​​https://bugzilla.redhat.com/show_bug.cgi?id=1965941​

处理方法

编辑lvm的配置文件 /etc/lvm/lvm.conf (大约在配置文件的129行),设置:

1
use_devicesfile=0

设置完直接使用pvs之类的软件就能看到了。

扩展

use_devicesfile配置项在RHEL9系统的/etc/lvm/lvm.conf配置文件中用于控制LVM是否使用devices文件。

其值及含义如下:

  • use_devicesfile = 0 表示LVM不使用devices文件。LVM将扫描系统全部块设备来搜索PV。

  • use_devicesfile = 1 表示LVM使用devices文件。LVM只扫描devices文件中列出的设备来搜索PV。

默认情况下,RHEL9系统中use_devicesfile被注释了,通过后期他的表现来看值应该是 1。使用devices文件可以提高LVM的扫描性能,因为它只需要扫描列在devices文件中的设备,而不用扫描全部块设备。

但是如果devices文件配置错误,也可能导致LVM无法发现某些PV,所以通常在大容量存储服务器上会配置use_devicesfile=1来优化性能,而对于普通服务器,保留默认值 0 可以保证最大兼容性。