如何通过GRUB引导加载器直接从QCOW2镜像启动裸机系统且不破坏Proxmox环境
如何通过GRUB引导加载器直接从QCOW2镜像启动裸机系统且不破坏Proxmox环境
没问题,你完全可以通过GRUB直接引导QCOW2镜像启动裸机系统,不用每次转RAW格式,而且只要操作得当,绝对不会破坏你的Proxmox环境。下面我给你一步步拆解实现方法:
先做临时测试(避免直接改配置踩坑)
先别急着改GRUB配置,我们可以先在GRUB命令行临时测试,确保路径和参数都正确:
- 重启你的Proxmox主机,在GRUB菜单出现时按
c键进入命令行模式。 - 加载GRUB需要的模块(根据你的实际分区格式调整,比如用MBR就换
part_msdos,根分区是XFS就换xfs):insmod qcow2 insmod ext4 insmod part_gpt - 指定存放QCOW2镜像的磁盘分区,比如你的Proxmox存储在第一块磁盘的第3个GPT分区,就输入:
不确定的话可以用set root=(hd0,gpt3)ls命令查看所有磁盘:ls,再逐个查看分区内容:ls (hd0,gpt3)。 - 挂载QCOW2镜像为loop设备,替换成你实际的镜像路径(Proxmox默认镜像路径一般是
/var/lib/vz/images/VMID/xxx.qcow2):loopback loop /var/lib/vz/images/100/vm-100-disk-0.qcow2 - 指定镜像内Ubuntu系统的根分区,比如镜像里的第2个GPT分区:
同样可以用set root=(loop,gpt2)ls (loop,gpt2)/boot确认里面有内核文件。 - 加载Ubuntu的内核和initramfs,替换成你镜像内实际的内核版本号:
linux /boot/vmlinuz-6.8.0-31-generic root=/dev/loop0 ro quiet splash initrd /boot/initrd.img-6.8.0-31-generic - 最后输入
boot启动系统,如果能正常进入Ubuntu,说明参数没问题。
把配置加入GRUB永久菜单
测试成功后,我们可以把这个启动项加入GRUB菜单,下次重启直接选就行:
- 编辑GRUB的自定义配置文件:
nano /etc/grub.d/40_custom - 在文件末尾添加以下内容,记得替换成你自己的参数:
menuentry "Boot Ubuntu 24.04 from QCOW2" --class ubuntu --class gnu-linux --class gnu --class os { insmod qcow2 insmod ext4 insmod part_gpt # 替换成存放QCOW2的磁盘分区 set root=(hd0,gpt3) # 替换成你的QCOW2镜像实际路径 loopback loop /var/lib/vz/images/100/vm-100-disk-0.qcow2 # 替换成镜像内Ubuntu的根分区 set root=(loop,gpt2) # 替换成镜像内实际的内核版本 linux /boot/vmlinuz-6.8.0-31-generic root=/dev/loop0 ro quiet splash initrd /boot/initrd.img-6.8.0-31-generic } - 保存退出后,更新GRUB配置:
下次重启Proxmox,你就能看到这个新的启动菜单选项了。update-grub
重要注意事项(必看!)
- 启动前必须确保对应的VM已经完全关机,如果VM还在运行就启动镜像,会直接损坏QCOW2文件!
- 从KVM虚拟机转到裸机后,Ubuntu可能会因为硬件变化出现适配问题,比如网卡名称改变、缺少裸机硬件驱动,需要你手动调整网络配置或者安装对应驱动。
- 启动裸机系统后,绝对不要修改Proxmox所在的磁盘分区,只操作QCOW2镜像内的系统,避免破坏Proxmox环境。
- 如果启动失败,回到GRUB命令行用
ls命令排查路径是否正确,或者检查模块是否加载对了(比如MBR分区要加载part_msdos)。
备注:内容来源于stack exchange,提问作者Mario Bash
相关产品推荐
相关产品推荐

