Linux vDisk 文件启动插件
Ventoy 使用此插件来支持在物理机上直接启动安装了 Linux系统的 vdisk 文件 (vhd/vdi/raw 等)。这种模式的优点有:
- 系统是在真实物理机上运行,并不是在虚拟机里运行,没有性能损失。
- 同一个 vhd/vdi 文件既可以在 Legacy BIOS 模式下启动,也可以在 UEFI 模式下启动。
- Linux系统无需独占一个磁盘或者分区,相当于把一个完整的Linux系统放在一个文件里。
比如,你的主系统是 C 盘里的 Windows 系统,你可以在D盘里放一些
Deepin、UOS、Ubuntu、Arch 等系统的 VHD 文件,想启动哪个选哪个,不用了就把对应的 VHD 文件删除即可。
- 支持的 vdisk 格式
- 固定大小的 vhd (注意只能是vhd, 不支持vhdx)
- 固定大小的 vdi
- Raw Disk 镜像格式
- 支持的 Linux 发行版 (持续更新中)
发行版 | 测试 ISO | Legacy BIOS | UEFI | 备注 |
---|
- 使用说明
- 安装 Linux 系统到 vdisk
- 在系统下执行 vtoyboot 脚本
- 拷贝到U盘,改后缀名为 .vtoy 然后用 Ventoy 启动
- 关于启动后的系统升级
创建固定大小的 vhd/vdi,注意只支持静态大小的,不支持动态扩展类型的。然后把支持的 Linux 系统安装到 vhd/vdi 中即可。
安装过程和普通安装没有任何差别,可以借助 VirtualBox 来完成(创建硬盘时可以选择 vdi或vhd)。
注意:
1. 虚拟硬盘必须是全新创建的,不能使用之前用过的。
2. 新版本的 VirtualBox 在创建虚拟机时不要选择操作系统ISO文件,等创建完虚拟机之后再添加ISO文件进行安装。
注意,为了最终的 vhd/vdi 文件既能在 Legacy BIOS 模式下启动,也能在 UEFI 模式下启动。
安装系统时,VirtualBox 必须设置为 UEFI 模式!
安装系统时,VirtualBox 必须设置为 UEFI 模式!
安装系统时,VirtualBox 必须设置为 UEFI 模式!
!!! 注意 !!!
有一些系统安装完之后还需要再额外安装一个 grub 的包才可以,否则最终的 vhd/vdi 文件只能在 UEFI 模式下启动,无法在 Legacy BIOS 模式下启动。
对于这种,在前面表格最后的 "备注" 一栏有说明,没有特殊说明的就不需要。比如,对于 Deepin 系统,需要安装 grub-pc-bin_xxxx.deb 包。以 deepin-desktop-community-1010-amd64.iso 为例,
需要安装 grub-pc-bin_2.02.24.3-1+eagle_amd64.deb 这个包,它位于 ISO文件的 /pool/main/g/grub2/ 目录下,可以直接使用 dpkg -i 命令来安装。
另外,如果缺少这个包,在运行下面的 vtoyboot.sh 脚本时也会打印一个提示信息。当然,如果你只需要在 UEFI 模式下启动这个 vdisk 文件,不需要在 Legacy BIOS 模式下启动,那就不需要管它了。
注意,系统安装完之后不能对虚拟机创建快照,否则会导致 vdi/vhd 无法识别。
安装完成并启动到 Linux 系统中之后,执行 vtoyboot 脚本。这一步是为了在系统中做一些处理,以支持Ventoy启动。
vtoyboot 是配套 Ventoy 开发的一个项目,单独发布。从 https://github.com/ventoy/vtoyboot/releases 下载压缩包即可。
下载到 Linux 系统中,解压,然后以root权限执行里面的脚本 sudo bash vtoyboot.sh
脚本执行完之后,使用 poweroff
命令关机。
注意 vtoyboot 会经常更新以支持更多的 Linux 版本以及修复 BUG,所以请使用最新版本。
完成前面2步之后,就可以把 vdi/vhd 文件拷贝到 U盘中,重启电脑,然后通过Ventoy启动它了。
注意,必须把文件后缀名改为 .vtoy 才可以正常启动。
推荐保留原来的后缀名,同时增加一个 .vtoy 后缀。比如:
CentOS7.vhd.vtoy
ubuntu20.04.vdi.vtoy
Manjaro.vhd.vtoy
vDisk文件在物理机环境下启动之后,普通软件的安装、升级可以正常操作,没有限制。如果是对内核、驱动进行了升级、或者类似于通过 dnf update 命令进行了系统的大升级之后, 建议再重新执行一次 vtoyboot 脚本,防止下次重启之后vDisk文件无法启动。
- 使用Ventoy启动本地硬盘上的 vDisk
上面的使用说明是针对把 vdisk 文件拷贝到 Ventoy U盘中启动的场景。也可以把 vdisk 文件放在本地硬盘中进行启动。
方法1
请参考 Ventoy启动本地硬盘中的镜像文件
方法2
使用 Ventoy 的自定义菜单来启动,关于自定义启动菜单 ventoy_grub.cfg 的说明,请参考 Ventoy 自定义菜单插件
在上述 ventoy_grub.cfg 中增加如下一个菜单用于启动 vdisk 文件,只需要把 my_vdisk_path
设置为实际文件的绝对路径即可(从所在分区的根目录开始)。
menuentry "Boot My Linux VHD" { set my_vdisk_path="/VhdDir/Ubuntu.vhd.vtoy" if search -n -s vdiskhd -f "$my_vdisk_path"; then vtoyboot_common_func "($vdiskhd)$my_vdisk_path" else echo "$my_vdisk_path not found" fi }
在这个例子中,my_vdisk_path 被设置为 /VhdDir/Ubuntu.vhd.vtoy
你可以按照你实际的路径修改,(比如 set my_vdisk_path="/images/LinuxMint.vdi.vtoy"
)。
你不需要像 hd0/hd1 这样指定到具体哪个硬盘,因为脚本里会使用 search
命令去遍历所有磁盘搜索这个文件。
你只需要确保这个路径是唯一的即可。比如,你有一个 C:\VhdDir\Ubuntu.vhd.vtoy
同时还有一个 D:\VhdDir\Ubuntu.vhd.vtoy
这种情况可能会找错文件。
注意以下格式都是错误的:
set my_vdisk_path="(hd1,1)/VhdDir/Ubuntu.vhd.vtoy"
set my_vdisk_path="E:\VhdDir\Ubuntu.vhd.vtoy"
set my_vdisk_path="\VhdDir\Ubuntu.vhd.vtoy"
- 使用其他 bootloader 启动 vDisk 文件
通过前面的说明我们知道,Ventoy 可以启动 Ventoy 所在的磁盘上的 vdisk 文件,也可以启动非 Ventoy 盘(本地磁盘)上的 vdisk 文件。 但是这两者都必须要通过 Ventoy 才可以启动。
实际上 vdisk 启动这个功能是可以独立出来的。 可以集成到其他 bootloader 中来启动,比如 grub4dos/grub2/rEFInd/Systemd-boot
等。
唯一的要求是 vdisk 文件所在的分区文件系统只能是 FAT32/NTFS/exFAT/XFS/Ext2/Ext3/Ext4/UDF 中的一种。使用方法如下:
================== i386-pc ====================== GRUB4DOS: kernel /ipxe.krn vdisk=/MyVdiskDir/Deepin.vdi.vtoy initrd /vdiskchain GRUB2: linux16 (hd0,1)/test123/ipxe.krn vdisk=/MyVdiskDir/Deepin.vdi.vtoy initrd16 (hd0,1)/test123/vdiskchain ================== x86-64-efi ====================== GRUB2: chainloader (hd0,1)/test123/vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy rEFInd: loader /vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy Systemd-boot: efi /vdiskchain vdisk=/MyVdiskDir/Deepin.vdi.vtoy
这里的 ipxe.krn 和 vdiskchain 是两个文件,需要从 https://github.com/ventoy/vdiskchain/releases 下载最新版本。
vdisk 参数和上面的 my_vdisk_path 参数是一样的含义和要求。
已知问题:
1. i386-pc (Legacy BIOS) 模式下,grub4dos/grub2 必须是用磁盘启动的才可以 chainload 成功,从光驱启动的无法 chainload 成功。