客户端有许多旧的Linux系统,可追溯到5到15年前,并且仍在原始硬件上运行。由于担心磁盘的使用时间等,他们希望将它们全部虚拟化到VMware vHosts上。
到目前为止,我已经能够通过VMware的Standalone Converter虚拟化几乎任何21世纪的Windows机器,并且成功率达到100%。但是,尝试在Linux机器上执行相同操作总是会导致失败,并且无法启动的VM通常会出现“内核崩溃,无法启动/ init”的错误。
我发现,如果我安装了应急CD的ISO并启动它,然后选择“从硬盘启动Linux”,系统将启动并且我可以登录,但是这使它们只能运行应急CD的内核。 ,例如在半径服务器上重新添加虚拟接口时,这会导致失败-尝试运行“ modprobe dummy”,该进程将轰炸:
FATAL: Could not load /lib/modules/3.14.50-std460-amd64/modules.dep: No such file or directory
在检查/ lib / modules目录时,存在的文件为:
/lib/modules/2.6.27.7-9-pae/modules.dep
哪个匹配uname -r在原始物理计算机上返回的内容:
uname -r
2.6.27.7-9-pae
在从应急CD引导的P2V VM上,它提供
uname -r
3.14.50-std460-amd64
在物理机上,init在/ sbin / init中,而根文件系统在/ dev / sda2中:
rad02:~ # which init
/sbin/init
rad02:~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 3.2G 16G 17% /
udev 243M 7.6M 236M 4% /dev
/dev/sda3 52G 15G 35G 30% /home
/dev/sdb1 74G 7.1G 63G 11% /var/log
在VM上,我尝试从硬盘启动并root=/dev/sda2 init=/sbin/init
在引导加载程序时添加,并且我已经看到机器似乎试图同时启动/ init和/ sbin / init,但是仍然失败,并出现“内核崩溃,不能启动初始化”错误。
这台特定的原始计算机正在运行openSUSE 11.1 (i586)
,但是我希望有一个普遍的答案,因为我想为此客户端虚拟化各种RedHat,SuSE和openSUSE系统。
我需要做什么才能使P2V虚拟机启动并成功启动?
编辑:好的,感谢那些发表评论的人,我现在可以更好地理解问题了-Grub可以看到磁盘正常,但是实际的内核系统不能,而且很可能是由于/ etc / sysconfig /中缺少控制器驱动程序内核文件的initrd_modules行。
这是原始物理主机上的内容:
INITRD_MODULES="processor thermal ata_piix ata_generic piix ide_pci_generic fan jbd ext3 edd"
这是P2V转换已放入VM的文件中的内容:
INITRD_MODULES="mptscsih mptspi mptsas scsi_transport_spi scsi_transport_sas BusLogic ahci pcnet32 processor thermal ata_piix ata_generic piix ide_pci_generic fan jbd ext3"
在下载了openSUSE 11.1安装DVD并运行了“修复已安装的系统”选项之后,该选项已更改为:
INITRD_MODULES="ahci mptsas ata_piix ata_generic piix ide_pci_generic jbd ext3"
从较早的应急CD引导时,我在列出的所有模块上找到了一个位置,并且所有东西都存在ide_pci_generic驱动程序-鉴于VMware将SATA Lsi Logic作为标准磁盘类型,我假设它将使用IDE驱动程序?
我还有另一台运行openSUSE 10的P2V虚拟机,该虚拟机最初与拒绝启动存在相同的问题,但是在关闭电源数月后,却意外地正确启动了(并且已经多次重新启动,总是成功完成), / etc / sysconfig / kernel在那我得到:
INITRD_MODULES="mptscsih mptspi scsi_transport_spi BusLogic pcnet32 piix ata_piix processor thermal fan jbd ext3"
那我从这里去哪里呢?
编辑2:
下面的AB所打勾的答案解决了此问题。
按照给出的说明,并使用一个备用虚拟机,该虚拟机已使用与我们尝试p2v的计算机相同的Linux版本重新安装,我在/ tmp,物理,虚拟和组合下创建了三个目录。按照指示从物理机中提取initrd和System.map文件,然后将其解压缩到/ tmp / physical下,然后从我所在的VM(即同一操作系统的工作VM)中提取相同的文件并解压缩/ tmp / virtual中的那些。
出于好奇,我对每个目录的du输出进行了比较,因此:
cd /tmp/physical
du > /tmp/ph.txt
cd /tmp/virtual
du > /tmp/vi.txt
cd /tmp
cat ph.txt |cut -d'.' -f2,3,4,5,6 |sort > ph-sorted.txt
cat vi.txt |cut -d'.' -f2,3,4,5,6 |sort > vi-sorted.txt
diff ph-sorted.txt vi-sorted.txt
产生此输出的内容-差异很小,但有几个文件:
21,22d20
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/hid
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/hid/usbhid
26c24,25
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/input
---
> /lib/modules/2.6.27.7-9-pae/kernel/drivers/message
> /lib/modules/2.6.27.7-9-pae/kernel/drivers/message/fusion
29,31d27
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb/core
< /lib/modules/2.6.27.7-9-pae/kernel/drivers/usb/host
然后,我将/ tmp / physical和/ tmp / virtual的完整内容复制到了/ tmp / combo中(其中虚拟的是第二个,因此会覆盖所有冲突)。
然后我做了(按照下面的回答指示)
depmod -b /tmp/combo -F /tmp/combo/System.map-2.6.27.7-9-pae -v 2.6.27.7-9-pae
它抛出了依赖性错误的屏幕,但否则运行正常,随后
cd /tmp/combo
find . -print0 | cpio -o -0 -H newc |gzip -9 > /tmp/initrd-2.6.27.7-9-pae
我从应急CD上启动了失败的p2v,然后将其放到网络上,复制 initrd-2.6.27.7-9-pae
到/ boot上,分离了应急CD ISO并重新引导-它可以正常工作!openSUSE 11.1在p2v VM上愉快地运行,并且服务似乎正常工作-成功!