Linux虚拟机改virtio之后进紧急模式解决方法

如果改回 IDE 能正常进系统,这是最安全、最便捷的修复方式,步骤如下:

1. 先将虚拟机磁盘接口改回 IDE

在虚拟机管理界面(如 VMware/VirtualBox/Proxmox),把磁盘控制器从 virtio 改回 IDE,然后启动系统,正常登录。

2. 在系统内重新生成 initramfs(核心步骤)

打开终端,执行以下命令,强制将 virtio 驱动打包进 initramfs:

# 备份原有 initramfs(防止意外)
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak

# 重新生成 initramfs,包含 virtio 驱动
dracut -f -v --add-drivers "virtio_blk virtio_pci" /boot/initramfs-$(uname -r).img $(uname -r)
  • -f:强制覆盖现有 initramfs
  • -v:显示详细输出
  • --add-drivers:明确添加 virtio_blkvirtio_pci 驱动

3. (可选)更新 grub 配置

grub2-mkconfig -o /boot/grub2/grub.cfg

这一步能确保 grub 识别到新的 initramfs 文件。

4. 关机,切换回 virtio 接口

  1. 正常关机
  2. 在虚拟机设置里,将磁盘接口改回 virtio
  3. 启动虚拟机,系统将能正常识别 virtio 磁盘并启动

💡 预防措施

  • 以后修改磁盘接口前,先执行 dracut -f --add-drivers "virtio_blk virtio_pci" 预先生成包含对应驱动的 initramfs,可避免此类问题。

  • 也可以在 /etc/dracut.conf.d/virtio.conf 中添加:

    • add_drivers+="virtio_blk virtio_pci"
      
    • 让后续所有 initramfs 都自动包含 virtio 驱动。

📌 关键说明

  • 之所以之前在 dracut shell 里加载 virtio_blk 失败,是因为 initramfs 本身就没包含这个驱动,必须在完整系统环境下重新生成 initramfs 才能解决。
  • 改回 IDE 是为了进入完整系统,完成驱动打包,这是最稳妥的路径。