逻辑卷在启动时处于非活动状态

逻辑卷在启动时处于非活动状态

我调整了逻辑卷和文件系统的大小,一切顺利。我安装了新内核,但重启后无法启动当前内核和前一个内核。选择 grub(2) 选项后,出现未找到卷组错误。从忙碌框中检查发现,这些卷未在设备映射器中注册,并且处于非活动状态。激活后我无法挂载它们,出现未找到文件错误(挂载 /dev/mapper/all-root /mnt)。

有什么想法可以继续操作或使它们在启动时处于活动状态吗?或者为什么这些卷在启动时突然处于非活动状态?

问候,

马立克

编辑:进一步调查显示,这与逻辑卷大小调整无关。启动失败后必须在 ash shell 中手动激活逻辑卷的事实以及此问题的可能解决方案已在以下回复中介绍。

答案1

所以我最终设法解决了这个问题。检测逻辑卷时存在问题(错误),这是一种竞争条件(可能在我的情况下,这种情况发生在 KVM 内部)。这在讨论在我的特定情况下 (Debian Squeeze),解决方案如下:

  • 备份脚本 /usr/share/initramfs-tools/scripts/local-top/lvm2
  • 应用错误报告中提到的补丁
  • 运行更新-initramfs -u

这对我有帮助,希望它也能帮助其他人(奇怪的是,这还不是主流的一部分)。

补丁链接:http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=10;filename=lvm2_wait-lvm.patch;att=1;bug=568838

以下是供后人参考的副本。

--- /usr/share/initramfs-tools/scripts/local-top/lvm2 2009-08-17 19:28:09.000000000 +0200
+++ /usr/share/initramfs-tools/scripts/local-top/lvm2 2010-02-19 23:22:14.000000000 +0100
@@ -45,12 +45,30 @@

  eval $(dmsetup splitname --nameprefixes --noheadings --rows "$dev")

- if [ "$DM_VG_NAME" ] && [ "$DM_LV_NAME" ]; then
-   lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
-   rc=$?
-   if [ $rc = 5 ]; then
-     echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
-   fi
+ # Make sure that we have non-empty volume group and logical volume
+ if [ -z "$DM_VG_NAME" ] || [ -z "$DM_LV_NAME" ]; then
+   return 1
+ fi
+
+ # If the logical volume hasn't shown up yet, give it a little while
+ # to deal with LVM on removable devices (inspired from scripts/local)
+ fulldev="/dev/$DM_VG_NAME/$DM_LV_NAME"
+ if [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; then
+   # Use default root delay
+   slumber=$(( ${ROOTDELAY:-180} * 10 ))
+
+   while [ -z "`lvm lvscan -a --ignorelockingfailure |grep $fulldev`" ]; do
+     /bin/sleep 0.1
+     slumber=$(( ${slumber} - 1 ))
+     [ ${slumber} -gt 0 ] || break
+   done
+ fi
+
+ # Activate logical volume
+ lvm lvchange -aly --ignorelockingfailure "$DM_VG_NAME/$DM_LV_NAME"
+ rc=$?
+ if [ $rc = 5 ]; then
+   echo "Unable to find LVM volume $DM_VG_NAME/$DM_LV_NAME"
  fi
 }

答案2

/etc/init.d/lvm创建包含以下内容的启动脚本:

#!/bin/sh

case "$1" in
 start)
    /sbin/vgscan
    /sbin/vgchange -ay
    ;;
  stop)
    /sbin/vgchange -an
    ;;
  restart|force-reload)
    ;;
esac

exit 0

然后执行命令:

chmod 0755 /etc/init.d/lvm
update-rc.d lvm start 26 S . stop 82 1 .

应该可以解决 Debian 系统的问题。

答案3

如果vgscan“找到”了卷,你应该能够使用以下命令激活它们vgchange -ay /dev/volumegroupname

$ sudo vgscan
[sudo] password for username: 
  Reading all physical volumes.  This may take a while...
  Found volume group "vg02" using metadata type lvm2
  Found volume group "vg00" using metadata type lvm2

$ sudo vgchange -ay /dev/vg02
  7 logical volume(s) in volume group "vg00" now active

不过我不确定是什么原因导致它们在重启后变得不活动。

答案4

我们遇到了这个问题,发现lvmetad通过设置禁用可以强制在启动use_lvmetad=0/etc/lvm/lvm.conf找到并访问卷。

相关内容