openKylin论坛

 找回密码

实现linux系统在VHD、Vdi虚拟磁盘中运行在实体机里 [复制链接]

本帖最后由 limo2 于 2023-4-6 22:10 编辑

之前因为工作的原因离不开windows系统在做了一个VHD版的win7,确实在工作中方便不少,现在用linux越来越顺手,看到Ventoy的官网有 Linux vDisk 文件启动插件 按照****Ventoy网上的教程试着做了一个出来,
  • 新建一个VHD文件(按照Ventoy网上的教程:1.固定大小,2.必须是VHD文件不能是VHDX文件)我是用winPE的BOOTICE工具制作,
  • 将分区挂载在虚拟机(以UEFI模式这是重点)
我是用的是QEMU-KVM虚拟机
具体步骤创建虚拟机选择需要安装的系统光盘点前进,上边的框里选择你要安装的镜像位置,设置能存和CPU数,在第四步时把“为虚拟机启用存储”的勾选掉点前进。


到第五步时勾选“在安装前自定义配置”点完成。
见到虚拟机的微调部分,在概要里调整Firmware为UEFIX86_64..........
然后点左下角的“添加硬件”选择左边第一个“存储”点击选择或创建自定义存储,然后点击“管理”,弹出对话框,在左下角点击“+”号。
在弹出的对话框里点击“浏览”。在弹出的对话框里选择你存放VHD文件的文件夹,点击完成。在“选择存储卷”的页面右侧点中你创建的VHD文件,点击“选择卷”然后启动虚拟机,安装系统。

查看支持的Linux发行版是否是你正在安装的版本
!!! 注意 !!!
有一些系统安装完之后还需要再额外安装一个 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,所以请使用最新版本。
完成前面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是多少
使用sudo blkid 命令进行查看。
修改/etc/fstab文件
使用命令sudo vim /etc/fstab
如果在安装的时候分别使用独立的分区挂载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一块在虚拟机内启动,使用磁盘工具,
格式化创建的虚拟磁盘。
然后使用sudo blkid 命令进行查看磁盘信息。
这个/dev/ada1就是新建的虚拟磁盘 data.img了。
修改磁盘的UUID跟之前挂载在外部的那个磁盘一样。
使用uuidgen | xargs tune2fs /dev/sdb -U ************************(之前上文提到的那个UUID)如果提示没有该命令可以使用
如果提示没有该命令可以使用
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 试试,竟然也能启动了。
可以用虚拟机liveCD挂载 ubuntu22.04.VHD.vtoy 使用rm -rf命令删除 ubuntu22.04.VHD.vtoy 内的/opt 、/usr/local这三个目录下的文件。
楼主
发表于 2023-4-5 21:40:39
回复

使用道具 举报

openKylin

GMT+8, 2024-5-3 10:44 , Processed in 0.037518 second(s), 21 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

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