昨天我们的 Ubuntu 18.04 服务器上发生了一个奇怪的问题。团队中的一个人试图向这个 LV 添加 30G 的空间:
Disk /dev/mapper/rootvg-pgexecstsqllv: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
系统应该有一个卷组 (rootvg),但在执行 lvextend 和 resize2fs 命令后,系统停止显示 pvscan、vgscan、lvscan 的所有值。以下是启用详细功能的 vgscan 示例。该系统应该有一个名为 rootvg 的卷组。读取缓存报告“未找到卷组”。
vgscan -vv
devices/global_filter not found in config: defaulting to global_filter = [ "a|.*/|" ]
Setting global/locking_type to 1
Setting global/use_lvmetad to 1
global/lvmetad_update_wait_time not found in config: defaulting to 10
Setting response to OK
Setting protocol to lvmetad
Setting version to 1
Setting global/use_lvmpolld to 1
Setting devices/sysfs_scan to 1
Setting devices/multipath_component_detection to 1
Setting devices/md_component_detection to 1
Setting devices/fw_raid_component_detection to 0
Setting devices/ignore_suspended_devices to 0
Setting devices/ignore_lvm_mirrors to 1
devices/filter not found in config: defaulting to filter = [ "a|.*/|" ]
Setting devices/cache_dir to /run/lvm
Setting devices/cache_file_prefix to
devices/cache not found in config: defaulting to /run/lvm/.cache
Setting devices/write_cache_state to 1
Setting global/use_lvmetad to 1
Setting activation/activation_mode to degraded
metadata/record_lvs_history not found in config: defaulting to 0
Setting activation/monitoring to 1
Setting global/locking_type to 1
Setting global/wait_for_locks to 1
File-based locking selected.
Setting global/prioritise_write_locks to 1
Setting global/locking_dir to /run/lock/lvm
Setting global/use_lvmlockd to 0
Locking /run/lock/lvm/P_global WB
Wiping cache of LVM-capable devices
Wiping internal VG cache
Setting response to OK
Setting token to filter:3239235440
Setting daemon_pid to 665
Setting response to OK
Setting global_disable to 0
Reading volume groups from cache.
Setting response to OK
Setting response to OK
Setting response to OK
No volume groups found.
Unlocking /run/lock/lvm/P_global
Setting global/notify_dbus to 1
命令报告称无法再看到 PV、LV 和 VG。尽管系统仍在运行,设备文件似乎完好无损。
ls -ld /dev/rootvg /dev/rootvg/* /dev/mapper/root* /dev/dm*
brw-rw---- 1 root disk 253, 0 Jul 13 22:07 /dev/dm-0
brw-rw---- 1 root disk 253, 1 Jul 13 22:07 /dev/dm-1
brw-rw---- 1 root disk 253, 10 Jul 13 22:07 /dev/dm-10
brw-rw---- 1 root disk 253, 11 Jul 13 22:07 /dev/dm-11
brw-rw---- 1 root disk 253, 2 Jul 13 22:07 /dev/dm-2
brw-rw---- 1 root disk 253, 3 Jul 13 22:07 /dev/dm-3
brw-rw---- 1 root disk 253, 4 Jul 13 22:07 /dev/dm-4
brw-rw---- 1 root disk 253, 5 Jul 13 22:07 /dev/dm-5
brw-rw---- 1 root disk 253, 6 Jul 13 22:07 /dev/dm-6
brw-rw---- 1 root disk 253, 7 Jul 13 22:07 /dev/dm-7
brw-rw---- 1 root disk 253, 8 Jul 13 22:07 /dev/dm-8
brw-rw---- 1 root disk 253, 9 Jul 13 22:07 /dev/dm-9
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-appslv -> ../dm-2
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-execdirstsqllv -> ../dm-6
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-execstsqlddlv -> ../dm-8
lrwxrwxrwx 1 root root 8 Jul 13 22:07 /dev/mapper/rootvg-inbacklv -> ../dm-10
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-nodeapplv -> ../dm-9
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-pgarcloglv -> ../dm-4
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-pgbackuplv -> ../dm-3
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-pgexecstsqllv -> ../dm-5
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-rootlv -> ../dm-0
lrwxrwxrwx 1 root root 8 Jul 13 22:07 /dev/mapper/rootvg-tempfslv -> ../dm-11
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-tmplv -> ../dm-1
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/mapper/rootvg-workdirlv -> ../dm-7
drwxr-xr-x 2 root root 280 Jul 13 20:32 /dev/rootvg
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/appslv -> ../dm-2
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/execdirstsqllv -> ../dm-6
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/execstsqlddlv -> ../dm-8
lrwxrwxrwx 1 root root 8 Jul 13 22:07 /dev/rootvg/inbacklv -> ../dm-10
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/nodeapplv -> ../dm-9
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/pgarcloglv -> ../dm-4
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/pgbackuplv -> ../dm-3
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/pgexecstsqllv -> ../dm-5
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/rootlv -> ../dm-0
lrwxrwxrwx 1 root root 8 Jul 13 22:07 /dev/rootvg/tempfslv -> ../dm-11
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/tmplv -> ../dm-1
lrwxrwxrwx 1 root root 7 Jul 13 22:07 /dev/rootvg/workdirlv -> ../dm-7
看起来好像 LVM 缓存或类似内容已损坏或丢失。看来以前其他人也遇到过这种情况,因为我发现了一系列类似的问题。这个问题看起来很有希望: https://superuser.com/questions/421896/vgdisplay-and-lvdisplay-no-volume-groups-found
不幸的是,它没有解决问题。有人知道如何重建 LVM 缓存吗?除了重新安装之外,还有其他方法可以解决这个问题吗?
谢谢,
史蒂夫
答案1
重新启动(即使进入恢复模式)仍会让我们进入维护 shell,并显示“rootvg 不存在”的消息,尽管 /dev 文件全部显示正常。缺少的是与 /dev/mapper 关联的所有 /dev/dm* 文件。
我怀疑操作员执行的 lvextend 可能覆盖了存储 rootvg 卷组信息的 O/S 磁盘存储的另一部分。检查历史记录,他们执行的命令似乎很正常。我注意到的唯一错误是尝试以非 root 用户身份执行 lvextend 和 resize2fs(没有 sudo)。
长话短说,我们再次无法恢复此系统。 pvscan/vgscan 几乎是所建议的全部内容,并且使用 -vvv 标志,它表明问题很可能是缓存。这种情况之前发生过两次,这让我对 Ubuntu 16、18 和 20 中的 LVM 的可靠性产生了怀疑。
我们用 Ubuntu 22.04 重建了这个系统,然后从夜间备份中恢复了该系统上使用的 PostgreSQL 数据库。我希望我们能找出导致这种情况的原因,因为据我从谷歌搜索中观察到,这种情况似乎至少被报告过 3-4 次。只是没有人有解决方案,甚至没有人建议检查什么,这台服务器不能保持原样。一天结束前就需要它。
我们现在将拥有两台配备 PostgreSQL 流复制的服务器(早就应该有了!),因此,如果再次发生这种情况,我们可以让机器停止服务并尝试进行更多分析,同时不会影响我们的用户。