由于这台机器的目标是试验Xen(为了更好地理解商用VM托管),该机器由我必须配备的部件组装而成:特别是:Q6600华硕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
暂停后,它会放弃并丢弃到initramfs shell.发出命令lvm vgchange -ay成功初始化LVM,/ dev / mapper按预期填充,系统在^ D后正常启动.
通过在/ etc中制作/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'"
(并重建initramfs)系统现在无需辅助启动,但这是一个非常糟糕的解决方案.我试过摆弄rootwait =,lvmwait =和scsi_mod.scan =同步内核参数,正如各种bug跟踪器和博客文章中所讨论的那样,但我尝试过的都没有.一些页面表明evms是一个问题,但似乎没有安装.其他人建议在不相关的块设备上超时,我甚至禁用了DVD驱动器.
似乎在md和lvm之间存在某种竞争条件,并且在md0准备好之前udev正在调用lvm.这些内核参数似乎在lvm运行后插入延迟,因此没有任何等待有助于因为vgchange已经运行(并且失败),LV将永远不会准备好.
就我在钻探问题时所做的那样.任何人都可以提出更好的解决方案,或建议如何深入研究以找到更多问题?
[1]因为sdb1此时缺失,所以这个raid卷被手动配置为带有1个设备的RAID1,因为Ubuntu不喜欢在降级卷上启动.