我有一个从 VMWare 迁移来的虚拟机,我已经通过启动到 Live CD、安装和检查文件系统确认磁盘符合预期。
系统确实也启动了一定程度,但过了一会儿它就放弃尝试,掉到“dracut”终端,我读了日志/run/initramfs/rdsosreport.txt
并看到了以下内容:
Hyper-V Virtual Machine detected, ATA device ignore set
在终端中,我还看到一条错误,提示/dev/disk/by-uuid/{uuid here}
不可用。当我在 Ubuntu 中时,我确实检查了错误中列出的 UUID,/etc/fstab
所有内容都与 的输出相匹配blkid
。
我还完成了 CentOS 的全新安装,它启动正常,因此几乎肯定是与迁移安装有关的问题。
抱歉,如果这还不够,如果有人需要任何具体的信息,我会尽力更新问题。
如果有帮助的话,我正在运行 Windows 10,版本 1903,内部版本 10.0.18941.1001(这是 Hyper-V 报告的版本)。
答案1
我相信您需要重建 initramfs 文件/boot/initramfs-(kernel version).img
,因为虚拟硬件发生了变化。CentOS 内核用于虚拟磁盘访问的模块可能不同。请按照以下说明操作:
- 将 CentOS 7 安装 ISO 附加到虚拟机
- 启动到 Anaconda 救援模式(指示)(替代指令)
- 确保虚拟磁盘内的文件系统已正确安装在
/mnt/sysimage
- 用于
dracut
重建 initramfs:# chroot /mnt/sysimage dracut --no-hostonly --force --regenerate-all --verbose
- 编写一个 SELinux 重新标签程序:
# touch /mnt/sysimage/.autorelabel
- 退出 Anaconda 救援模式
Initramfs 是一个文件系统映像,引导加载程序会在加载内核之后、切换执行上下文之前将其提取到内存中。此类映像应包含内核查找包含根文件系统的块设备所需的所有模块。我不知道 Hyper-V 虚拟机需要哪些模块;如果您能够自己找到它们,您可以使用dracut
参数将它们添加到重建的 initramfs 中--add-drivers
。
答案2
此问题是由 ata_piix 中的默认设置引起的。
如果检测到 HyperV 硬盘,驱动程序会认为 IDE 是不必要的,并禁用该端口。要覆盖此问题,您可以设置内核参数:ata_piix.prefer_ms_hyperv=0
来源:https://github.com/torvalds/linux/blob/master/drivers/ata/ata_piix.c#L1572
此后,操作系统应该启动,您可以重建 Linux 映像以包含 HyperV 驱动程序。