之前因为工作的原因离不开windows系统在做了一个VHD版的win7,确实在工作中方便不少,现在用linux越来越顺手,看到Ventoy的官网有 Linux vDisk 文件启动插件 , 按照Ventoy网上的教程试着做了一个出来,

新建一个VHD文件(按照Ventoy网上的教程:1.固定大小,2.必须是VHD文件不能是VHDX文件)我是用winPE的BOOTICE工具制作,

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装

vhd 镜像 安装 linux vhd镜像_windows_02

 

将分区挂载在虚拟机(以UEFI模式这是重点)

我是用的是QEMU-KVM虚拟机

具体步骤创建虚拟机选择需要安装的系统光盘点前进,上边的框里选择你要安装的镜像位置,设置能存和CPU数,在第四步时把“为虚拟机启用存储”的勾选掉点前进。

vhd 镜像 安装 linux vhd镜像_服务器_03

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_04

 

vhd 镜像 安装 linux vhd镜像_服务器_05

vhd 镜像 安装 linux vhd镜像_linux_06

到第五步时勾选“在安装前自定义配置”点完成。

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_07

 见到虚拟机的微调部分,在概要里调整Firmware为UEFIX86_64..........

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_08

 然后点左下角的“添加硬件”选择左边第一个“存储”点击选择或创建自定义存储,然后点击“管理”,弹出对话框,在左下角点击“+”号。

vhd 镜像 安装 linux vhd镜像_windows_09

 

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_10

在弹出的对话框里点击“浏览”。在弹出的对话框里选择你存放VHD文件的文件夹,点击完成。在“选择存储卷”的页面右侧点中你创建的VHD文件,点击“选择卷”然后启动虚拟机,安装系统。

 

vhd 镜像 安装 linux vhd镜像_服务器_11

vhd 镜像 安装 linux vhd镜像_服务器_12

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_13

 

vhd 镜像 安装 linux vhd镜像_windows_14

 

注意安装系统前应阅读Plugin.VtoyBoot . Ventoy

查看支持的Linux发行版是否是你正在安装的版本

 

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_15

!!! 注意 !!!
有一些系统安装完之后还需要再额外安装一个 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 无法识别。

安装vtoyboot脚本非常重要!!!!!!!

安装完成并启动到 Linux 系统中之后,执行 vtoyboot 脚本。这一步是为了在系统中做一些处理,以支持Ventoy启动。
vtoyboot 是配套 Ventoy 开发的一个项目,单独发布。从 Releases · ventoy/vtoyboot · GitHub 下载压缩包拷贝到虚拟机中安装即可。
下载到 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文件无法启动。

下边是:修改/opt 、/usr/local和/home挂载在真实的磁盘分区实现数据与系统的分离。

使用虚拟磁盘启动的好处是,如果系统出现问题把备份的VHD拷贝过来就能直接启动,但是坏处是,home文件夹里的文件和/opt,/usr/local,安装的软件就都一起丢失了,怎么办呢,把这三个目录挂载在真实的磁盘目录,那开整!

首先把存放VHD文件的磁盘分出来一个分区,然后直接用Ventoy引导启动,

使用CP命令拷贝/opt 、/usr/local和/home文件到新分的分区里。

cp -r -p /opt /media/***********************/ (新磁盘是挂载在media下的)
cp -r -p /home /media/***********************/
cp -r -p /usr/local /media/***********************/

然后查看新分的分区的UUID是多少

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_16

 

使用sudo blkid 命令进行查看。

修改/etc/fstab文件

使用命令sudo vim /etc/fstab

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_17

 

如果在安装的时候分别使用独立的分区挂载home ,usr/local和opt的话会在文件的下方有关于这三个分区的挂载目录,如果没有设置独立挂载文件的下方就没有这三个目录的挂载选项。

按照上图添加挂载信息,在UUID=的后边改成你查询到的新分区的UUID。

然后保存。(按ESC 输入:wq)

重启系统,测试挂载。

sudo mount -a
如果不报错那么挂载成功了,此后每次开机会自动挂载

这时候可不是该窃喜的时候,如果更新完内核又忘了运行一下Vtoyboot就关机,等再次启动时,启动不了,在虚拟机里启动以运行Vtoyboot,发现虚拟机里也无法运行 ubuntu22.04.VHD.vtoy(因为home ,usr/local和opt都挂载在了VHD外),那怎么办。。。。。

办法总会有的,在在虚拟机里新建一个虚拟磁盘 data.img (QEMU-KVM是img后缀,其他虚拟机是别的后缀),大概10个G以内,和liveCD一块在虚拟机内启动,使用磁盘工具,

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_18

 格式化创建的虚拟磁盘。

vhd 镜像 安装 linux vhd镜像_windows_19

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_20

 然后使用sudo blkid 命令进行查看磁盘信息。

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_21

 

这个/dev/ada1就是新建的虚拟磁盘 data.img了。

修改磁盘的UUID跟之前挂载在外部的那个磁盘一样。

使用uuidgen | xargs tune2fs /dev/sdb -U ************************(之前上文提到的那个UUID)如果提示没有该命令可以使用

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_22

 

如果提示没有该命令可以使用

sudo apt-get update

sudo apt-get install uuid-runtime进行下载。

然后在用cp命令复制一份/opt 、/usr/local和/home这三个目录。

cp -r -p /opt /media/***********************/ (新磁盘是挂载在media下的)
cp -r -p /home /media/***********************/
cp -r -p /usr/local /media/***********************/

然后使用虚拟机添加 ubuntu22.04.VHD.vtoy 和新建的虚拟磁盘 data.img 试试,竟然也能启动了。

 

vhd 镜像 安装 linux vhd镜像_虚拟磁盘_23

vhd 镜像 安装 linux vhd镜像_vhd 镜像 安装_24

 可以用虚拟机liveCD挂载 ubuntu22.04.VHD.vtoy 使用rm -rf命令删除 ubuntu22.04.VHD.vtoy 内的/opt 、/usr/local这三个目录下的文件。