openKylin论坛

 找回密码

建议增加类似Windows VHD启动的功能 [复制链接]

Windows具有VHD虚拟磁盘功能,不仅可以将系统安装在VHD磁盘,而且VHD磁盘具有查分功能,子盘对磁盘可以扩展,更换子盘能实现差分、回滚。
建议将GRUB与内核整合,增加将开放麒麟安装到虚拟磁盘、通过虚拟磁盘启动虚拟麒麟、差分虚拟磁盘等功能。


楼主
发表于 2023-2-1 09:30:32
回复

使用道具 举报

建议增加类似Windows VHD启动的功能 [复制链接]

用vitualbox 创建vhd,在用ventoy 创建启动就可以了
沙发
发表于 2023-2-1 13:44:49
回复

使用道具 举报

建议增加类似Windows VHD启动的功能 [复制链接]

devnqiu 发表于 2023-2-1 13:44
用vitualbox 创建vhd,在用ventoy 创建启动就可以了

好像Linux还都没这个功能,需要各种折腾,希望能原生支持
板凳
 楼主| 发表于 2023-2-2 22:21:38
回复

使用道具 举报

建议增加类似Windows VHD启动的功能 [复制链接]

alfredb 发表于 2023-2-2 22:21
好像Linux还都没这个功能,需要各种折腾,希望能原生支持

也可以不自己折腾,用这个也可以做很多事情

https://item.taobao.com/item.htm?id=699729388722
地板
发表于 2023-2-8 10:06:17
回复

使用道具 举报

建议增加类似Windows VHD启动的功能 [复制链接]

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        备注
CentOS 8        CentOS-8.3.2011-x86_64-dvd1.iso       
CentOS 7        CentOS-7-x86_64-Minimal-2009.iso       
Deepin        deepin-desktop-community-1010-amd64.iso       
grub-pc-bin_xxx.deb needed
Fedora        Fedora-Workstation-Live-x86_64-33-1.2.iso       
Ubuntu Desktop        ubuntu-20.04-desktop-amd64.iso       
Ubuntu Server        ubuntu-20.04.1-live-server-amd64.iso       
grub-pc-bin_xxx.deb needed
Linux Mint        linuxmint-20.2-cinnamon-64bit.iso       
MX Linux        MX-19.2_x64.iso       
Kali Linux        kali-linux-2021.1-installer-amd64.iso       
grub-pc-bin_xxx.deb needed
Manjaro        manjaro-xfce-20.0.1-200511-linux56.iso       
based on Archlinux
Archman        Archman_KDE_20200209.iso       
based on Archlinux
Mageia        Mageia-7.1-x86_64.iso       
grub2-2.xxxx.rpm needed
openSUSE        openSUSE-Leap-15.2-DVD-x86_64.iso       
理论上,其他使用 dracut/initramfstool/mkinitcpio 作为 initramfs 构建工具的发行版也支持。只是没有实际进行测试。

使用说明
安装 Linux 系统到 vdisk
创建固定大小的 vhd/vdi,注意只支持静态大小的,不支持动态扩展类型的。然后把支持的 Linux 系统安装到 vhd/vdi 中即可。
安装过程和普通安装没有任何差别,可以借助 VirtualBox 来完成(创建硬盘时可以选择 vdi或vhd)。
注意:虚拟硬盘必须是全新创建的,不要使用之前用过的。

注意,为了最终的 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 无法识别。
在系统下执行 vtoyboot 脚本
安装完成并启动到 Linux 系统中之后,执行 vtoyboot 脚本。这一步是为了在系统中做一些处理,以支持Ventoy启动。
vtoyboot 是配套 Ventoy 开发的一个项目,单独发布。从 https://github.com/ventoy/vtoyboot/releases 下载压缩包即可。

下载到 Linux 系统中,解压,然后以root权限执行里面的脚本 sudo bash vtoyboot.sh 脚本执行完之后,使用 poweroff 命令关机。
注意 vtoyboot 会经常更新以支持更多的 Linux 版本以及修复 BUG,所以请使用最新版本。
拷贝到U盘,改后缀名为 .vtoy 然后用 Ventoy 启动
完成前面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 成功。
5#
发表于 2023-2-8 10:09:24
回复

使用道具 举报

建议增加类似Windows VHD启动的功能 [复制链接]

6#
发表于 2023-2-8 10:11:23
回复

使用道具 举报

openKylin

GMT+8, 2024-4-26 19:46 , Processed in 0.023554 second(s), 22 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表