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


10

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

有什么想法如何在引导时继续进行或使其处于活动状态?还是为什么卷在启动时突然变得不活动?

问候,

马雷克

编辑:进一步的调查表明,这与调整逻辑卷的大小无关。我下面的答复涵盖了在引导失败后必须在ash shell中手动激活逻辑卷的事实以及对此问题的可能解决方案。



到目前为止,我已经尝试了以下操作:1)您的补丁2)差异化/etc/lvm/lvm.conf 3)GRUB_PRELOAD_MODULES="lvm"4)GRUB_CMDLINE_LINUX="scsi_mod.scan=sync"5)sudo grub-install /dev/sda && sudo grub-install /dev/sdb && sudo update-grub && sudo update-initramfs -u -k all6)sudo apt-get install --reinstall lvm2 grub-pc grub-common7)lvm vgchange -ay最后,/usr/share/initramfs-tools/scripts/local-top/lvm2 我很快就没办法尝试了。
isaaclw 2014年

Answers:


6

所以我设法最终解决了这个问题。检测逻辑卷存在一个问题(错误),这是某种竞争条件(在我看来,这可能是在KVM内部发生的事实)。在下面的讨论中将对此进行介绍。在我的特殊情况下(Debian Squeeze),解决方案如下:

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

这对我有所帮助,希望对其他人有所帮助(奇怪的是,这还不是主流)。

修补程序链接:_http://bugs.debian.org/cgi-bin/bugreport.cgi?msg = 10;文件名= 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
 }

应该注意的是,在debian错误讨论中,该问题尚未解决。因此,此处提供的解决方案可能不是正确的解决方案
-eMBee

如果这是9年的bug,并在8年的发行版上测试了解决方案,我会感到惊讶。我不明白三年后如何发现该错误。
zeratul021

5

创建一个/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系统解决问题。


1
对于像我一样想知道的人,vgscan搜索系统上的卷组,vgchange -a并使卷组可用(-ay)或不可用(-an)。
丹·普里兹

1

我也有这个问题。最后,这似乎是要解决的问题:

diff -u /usr/share/initramfs-tools/scripts/local-top/lvm2-backup /usr/share/initramfs-tools/scripts/local-top/lvm2
--- /usr/share/initramfs-tools/scripts/local-top/lvm2-backup    2014-06-06 19:55:19.249857946 -0400
+++ /usr/share/initramfs-tools/scripts/local-top/lvm2   2014-06-21 01:26:01.015289945 -0400
@@ -60,6 +60,7 @@

 modprobe -q dm-mod

+lvm vgchange -ay
 activate_vg "$ROOT"
 activate_vg "$resume"

我尝试过的其他方法:

  1. 你的补丁
  2. 差异/etc/lvm/lvm.conf
  3. GRUB_PRELOAD_MODULES="lvm"
  4. GRUB_CMDLINE_LINUX="scsi_mod.scan=sync"
  5. sudo grub-install /dev/sda && sudo grub-install /dev/sdb && sudo update-grub && sudo update-initramfs -u -k all
  6. sudo apt-get install --reinstall lvm2 grub-pc grub-common

我经历并取消了其他更改,尽管这可能是最不优雅的,但这对我来说是唯一重要的更改。


0

如果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

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


嗨,谢谢,我之前确实做到了。但是,如果我重新启动,我们将回到非活动状态。激活它们后,我尝试立即挂载,但由于找不到文件错误而关闭了我。
zeratul021 2010年

可能是/etc/lvm/lvm.conf的问题,请备份当前文件,然后尝试从其他系统复制lvm.conf并查看是否可以解决问题
Saurabh Barjatiya 2010年

0

在没有任何配置细节或错误消息的情况下,我们需要给出实际答案,我将在暗中grub-mkdevicemap解决问题。


0

假设您的系统使用initramfs,则可能存在配置问题。您应该通过grub更新在启动时启动的initramfs映像(在Debian中,您可以使用update-initramfs进行此操作,不了解其他发行版)。

您也可以通过解压缩initramfs并在initramfs映像中更改/etc/lvm/lvm.conf(或类似的东西)来手动完成此操作,然后再次将其重新打包。


嗨,感谢您的建议,我将在今晚晚些时候尝试检查它们。奇怪的是,在安装了新的内核deb之后,立即更新initramfs和grub。
zeratul021 2010年

发生了同样的事,我需要引导两个RAID阵列。尽管update-initramfs运行良好,但它们不再在initramfs中启动。我必须手动更改mdadm在mdadm.conf中查找RAID阵列的方式,然后重新运行initupdate-ramfs。
贾斯珀

我在下面有关lvm.conf的帖子上发表了评论。我发现,当我运行命令lvm,然后运行vgscan和vgchange -ay并退出initramfs shell时,我启动了,就像我应该的那样。因此问题出在initramfs中,它无法激活LVM。仅作记录,/ boot在单独的分区上。
zeratul021 2010年

您的问题仍然是update-initramfs无法正常工作。也许您应该查看initramfs-tools是否有更新,然后尝试update-initramfs。如果这不起作用,您仍然应该在lvm.conf的initramfs映像中查看。
贾斯珀,2010年

可悲的是,我不知道如何配置LVM,我所做的只是在安装过程中。下一个提示是,具有完全相同的磁盘布局的其他虚拟机也会以完全相同的方式发生故障,因此我需要分析为什么在启动时未激活LVM。
zeratul021

0

在作为KVM来宾运行Red Hat 7.4的环境中,我遇到了同样的问题。我正在运行qemu-kvm-1.5.3-141和virt-manager 1.4.1。最初,我以访客身份运行Red Hat 7.2时没有任何问题,但是在将次要发行版从7.2升级到7.4并将内核升级到最新版本3.10.0-693.5.2之后,出现了问题,无法引导我的/ var LV分区。更多。系统进入紧急模式,要求输入root密码。输入root密码并运行命令lvm vgchange -aysystemctl default我便可以激活/varLV并引导系统。

我还没有想出什么原因导致这个问题,但我的解决方法是包括LV /var/etc/default/grub你见下文:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=vg_local/root rd.lvm.lv=vg_local/var rd.lvm.lv=vg_local/swap rhgb quiet biosdevname=0 net.ifnames=0 ipv6.disable=1"

然后,我必须运行grub2-mkconfig -o /boot/grub2/grub.cfg并检查的rd.lvm.lv=vg_local/varvmlinuz行中是否包含/boot/grub2/grub.cfg。重新启动系统后,我再也没有收到激活我的/varLV 的错误,并且系统成功完成了启动过程。


0

在我的案例中发现grub的根是root = / dev / vgname / root

因此测试在/ usr / share / initramfs-tools / scripts / local-top / lvm2中

  # Make sure that we have a d-m path
  dev="${dev#/dev/mapper/}"          
  if [ "$dev" = "$1" ]; then         
    return 1                         
  fi      

总是错误的。和根卷从未激活。

从/ etc / fstab更新

/dev/vgname/root        /

/dev/mapper/vgname-root   /

并做了:

update-grub
grub-install /dev/sda

解决了我的问题


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.