全新安装的Ubuntu Server 13.10(x64)从位于md + lvm的根卷启动时遇到问题。 现在我已经扼杀了一个解决scheme,但我想更多地了解正在发生的事情以及可能会有哪些更好的解决scheme。
由于这台机器的目的是为了试验Xen(为了更好地理解商用虚拟机托pipe),该机器是由我必须交付的零件组装而成的,特别是:Q6600 + Asus P5QL Pro,1 TB和500 GB SATA光盘(虽然500 GB的光盘在其他地方仍在使用,但稍后会添加。)
1TB光盘有三个分区:sda1与500 GB光盘上的sdb1大小相同,sda2交换,余额为sda3。 md0是由sda1 + sdb1组成的RAID1卷[1],是LVM可用的一个PV。
Ubuntu安装在这个VG(vg_mir)的两个LV(dom0_root和dom0_homes)中,而/ boot则位于dom0_root中。
具体问题在光盘初始化后立即显示以下消息:
kernel: [ 3.003506] md: bind<sda1> kernel: [ 3.007705] md/raid1:md0: active with 1 out of 1 mirrors kernel: [ 3.007768] md0: detected capacity change from 0 to 499972440064 kernel: [ 3.047284] md0: unknown partition table kernel: [ 3.124709] device-mapper: table: 252:0: linear: dm-linear: Device lookup failed kernel: [ 3.124759] device-mapper: ioctl: error adding target to table kernel: [ 3.125156] device-mapper: table: 252:1: linear: dm-linear: Device lookup failed kernel: [ 3.125196] device-mapper: ioctl: error adding target to table
暂停后,它放弃并下降到initramfsshell。 发出命令lvm vgchange -ay成功初始化LVM,/ dev / mapper按预期填充,系统在^ D之后正常启动。
通过在/ etc中创build/lib/udev/rules.d/85-lvm2.rules的副本并插入sleep 1 ,如下所示:
SUBSYSTEM=="block", ACTION=="add|change", ENV{ID_FS_TYPE}=="lvm*|LVM*", \ RUN+="watershed sh -c 'sleep 1; /sbin/lvm vgscan; /sbin/lvm vgchange -a y'"
(并重buildinitramfs)系统现在无辅助地启动,但这是一个相当可怕的解决scheme。 我已经尝试过在各种bug追踪器和博客文章中讨论的rootwait= , lvmwait=和scsi_mod.scan=sync内核参数,但没有一个是我尝试过的。 几页提示evms是一个问题,但似乎没有安装。 其他人build议在不相关的块设备上超时,甚至禁用DVD驱动器。
看来在md和lvm之间有某种竞争条件,在md0准备好之前lvm正在被udev调用。 那些内核参数似乎在 lvm运行后插入延迟,因此没有多less等待有帮助,因为vgchange已经运行(并失败),因此LV永远不会准备好。
就我所钻研的问题而言。 任何人都可以提出一个更好的解决scheme,或build议如何钻入以find更多的问题?
[1]因为sdb1在这个时候缺less,所以这个raid卷被手动configuration为1个设备的RAID1,因为Ubuntu不喜欢在降级的卷上引导。
我只是有同样的问题,显然是相同types的硬件和新鲜的13.10 x64安装。 由于缺乏经验,我花了几天的时间寻找缺less内核模块等的可能性,但是在阅读完您的报告后,我发现在initramfs busybox提示符下的vgchange -ay会显示系统可启动的状态。 我还没有试过你发布的1秒延迟解决方法(我会),但我也注意到下面的Debian错误报告可能是相关的:
我有同样的问题,search后,我发现这个解决scheme为我工作。 我只需将所有/dev/md/*设备重命名为/dev/md/*中的/dev/md*设备,然后运行update-initramfs -u以更新initramfs。