因为日常工作中需要同时兼顾以上的两点,我一直在寻找一个合适的解决方法。最后发现了一个叫Ventoy的开源软件。作为新一代多系统启动U盘解决方案,我在使用了一段时间过后,觉得比较适合我,于是在这里做一个配置过程的记录。
先决条件
拥有一个足够大足够快的U盘*、准备好Ubuntu安装镜像、安装好Vmware Workstation或者VIrtualBox。*:为了保证安装到U盘的系统能够有较快的运行速度,你需要购买随机读写速度非常快的U盘,最好在购买之前询问卖家U盘是否支持WinToGo或者LinuxToGo。在这个例子中,我使用的是CHIPFANCIER的一款SSD颗粒的128G固态U盘,性能如下,仅供参考。
制作多系统启动U盘
进入到Ventoy的官网或者GitHub仓库,下载最新的软件。下载下来的文件一般是压缩包的格式,解压到任意文件位置。
点击 Ventoy2Disk.exe 打开软件,并在配置选项工具栏下面勾选上安全启动支持,之后选择你准备要安装系统的Upan并点击安装。
安装完成之后还需要去Ventoy官网的插件列表里面找到Linux vDisk 文件启动插件,确保你要安装的系统在支持的Linux发行版里面。之后拉到最下面下载vtoyboot脚本备用(该脚本在github中是以iso格式出现的)
准备虚拟磁盘文件
打开Windows的磁盘管理界面,在操作工具栏中选择创建VHD,之后指定VHD文件存放的位置和虚拟磁盘大小,此处我填入了30GB,之后非常重要的一步是将虚拟硬盘类型改为固定大小,因为截至撰写本文之前ventoy尚未支持动态扩展的磁盘类型。创建好了之后会提示你初始化磁盘,有两种模式:MBR,GPT,我选择了GPT模式。之后非常重要的一步是确认磁盘号,我这里是磁盘3,之后创建虚拟机的时候就是physicalDrive3.
在VMware中安装Ubuntu系统
创建虚拟机
打开vmware,选择新建虚拟机:经典模式,之后选择:稍后安装系统,之后选择客户机操作系统为Linux,并确保使用的版本是ubuntu64,我尝试过其他和ubuntu有关的选项,都会导致后面在启动模式中无法使用UEFI启动模式。之后定义虚拟机的名称和存放位置,这个随意。随意指定磁盘大小(这个新创建的磁盘后期会删掉)。
配置虚拟机
创建完虚拟机不要开机,马上编辑虚拟机设置,之后移除现有的磁盘,并添加新的硬盘。新的硬盘选择SCSI虚拟磁盘类型,之后选择使用物理磁盘(你是高级用户),在弹出的对话框的设备里面选择你之前在准备虚拟磁盘中看到的磁盘号,我这里是physicalDrive3,并选择使用整个磁盘
之后会让你选定储存分期信息的地方,随意。然后在CD/DVD一栏里面选择ubuntu的安装镜像文件,我这里是ubuntu-20.04.5.iso。之后进入到选项工具栏,在高级一栏里面的固件类型里面选择UEFI(如果在创建虚拟机的过程中没有选择ubuntu64版本,这里将不可选)。随后正常开机安装系统
系统安装及配置
在安装系统过程中会让你选择安装的磁盘,此时你还有一次检查的机会,如果发现磁盘大小和你之前划定的虚拟磁盘大小相差过大你需要警醒你是不是挂载错磁盘了(比如我这里清空磁盘的时候发现虚拟磁盘大小为32GB,这里ubuntu是以1000MB/GB来计算的,正常时1024MB/GB,所以是正常的)
安装完成之后,关机,之后把之前挂载的DVD改成vtoyboot的iso文件,打开之后将vtoyboot解压到桌面,然后以root权限执行里面的脚本 sudo bash vtoyboot.sh 脚本执行完之后,使用 poweroff 命令关机。
注意 vtoyboot 会经常更新以支持更多的 Linux 版本以及修复 BUG,所以请使用最新版本。
将系统往U盘迁移
重新打开磁盘管理器,右击虚拟磁盘,选择分离VHD,之后指定路径,将虚拟磁盘变成文件。之后,原本的文件名是.vhd现在需要改成.vhd.vtoy并拷贝到之前准备好的U盘之中。之后关机重启,选择U盘启动,使用U盘进入系统。
可能出现的问题及解决方法
- 出现和引导有关的安装软件失败的问题:将.vhd.vtoy文件改成.vhd文件,之后使用虚拟机软件加载现有的虚拟磁盘,在虚拟机中安装好软件再使用U盘启动
- 使用U盘启动的过程中出现Reset System的问题:参考issue 19,开发者也不清楚是什么原因导致的,这个问题不是每个机器上都有的,还不知道具体到底什么原因,暂时还没有修复计划,一个可行的方法是将ubuntu的引导文件覆盖掉系统的引导文件,具体操作方法是再虚拟机中打开终端,敲入以下命令进行修复:
mv /boot/EFI/Boot/bootx64.efi /boot/EFI/Boot/bootx64_backup.efi
cp /boot/EFI/ubuntu/grubx64.efi /boot/EFI/Boot/bootx64.efi