摘要:本文主要介绍把windows系统和Linux系统装进vhd文件,并从联通硬碟引导启动
TableofContents
打算:
1、gpt分区方式联通固态硬碟一个,
2、VMwareWorkstationPro,下载地址
3、bootice,下载地址
4、xorbootu,下载地址及教程
5、wtga,下载地址及教程
6、ubuntu下载地址
7、centosx86_64版下载地址,推荐everything版本
8、windows下载地址
9、diskgenius软件,百度下载
10、vhd文件扩容教程
11、打开efi分区的方式
diskpart
list volume
select // 选择对应efi分区(根据大小和分区类型分辨)
help set
set ID= // 这里guid是列出的普通类型对应的guid,其实就是它示例的最后一条
// 之后最好改回去
assign
// 若没弹出可能要重新插入,再去磁盘管理里面手动分配驱动器号
一、基础知识1、计算机启动过程
参考文章
windows10的uefi+gpt大致启动过程:通电->读取并展示所有可引导的储存设备->用户选择或默认第一个硬碟->读取第一个FAT格式的分区->执行EFI/Boot/bootx64.efi文件->加载启动管理器EFI/Microsoft/bootmgfw.efi并读取bcd文件->按bcd中信息和用户选择(只有一个就不用选)启动对应操作系统->通常是加载指定分区(如磁盘)的Windows/system/winload.efi文件
windows10的BIOS+mbr大致启动过程:通电->读取并展示所有可引导的储存设备->用户选择或默认第一个硬碟->读取硬碟的mbr(主引导记录,在第一个磁道,512字节)->据此在分区表中检测活动分区位置->在活动分区的分区引导记录(PBR,活动分区引导记录合称DBR,大概1M的分区,通常打不开,须要bootice能够编辑)中查找bootmgr和Boot/BCD->据此加载指定分区的windows/system/winload.efi文件,启动系统
win10的efi启动gptc盘,BIOS启动mbrc盘
gptc盘和mbrc盘的区别就是gpt一定会多出一个efi分区保存分区信息,mbr则是保存在第一个磁道。
二、安装windows到vhd方式一、使用wtga
使用wtga特别简单,选择ISO文件,目标c盘,vhdx模式,uefi+gpt,600gb,其他默认就行了。
1、要注意要在本地c盘系统上进行制做,若是联通c盘上的系统则有可能提示创建vhd文件失败而失败。
2、对多种类系统不友好。若安装Linux会使用其他引导程序,对efi分区形成改动,都会使原先的引导故障。
3、若改动后启动死机,应当使用bootice中级模式编辑bcd,更改windowsbootmanager的applictiondevice为该联通硬碟(坏了是unknowdevice),并且一个问题是只能引导一个了,多个的话也不会出现选择界面
4、也不利于备份查看。未能直接用虚拟机步入系统中查看系统。
方式二、使用vmware
1、首先创建vhdc盘到联通硬碟:计算机管理->c盘管理->操作->创建vhd,30GB,固定大小,vhd后缀。
必须是固定大小,动态的引导要用win10专用程序,不然启动时会提示vhdhostspacenotenough。之后再初始化为mbrc盘,分配c盘。这儿也不能是gpt,由于不好引导。
2、打开vmware,创建自定义虚拟机:windowsx64类型,BIOS启动方法,化学硬碟(整个c盘)。这儿化学硬碟选择我们刚才创建并挂载的c盘,可以进c盘管理找到对应的序号。
3、进入设置,选择CD,指向安装ISO包。
4、启动,等待安装,重启,死机。再去c盘管理分离vhd。
5、打开xorboot,第三个选项(uefi启动序列)->导入xorboot.efi
6、新建菜单,类似下边这样
菜单示例
7、OK,完成了,可以重启,f12,选择c盘,选择这个系统启动了
8、优点:可以在另外一个系统,挂载c盘,用BIOS启动类型的的虚拟机登陆系统。只是须要自动扩容,无大碍。
9、可能开机总是弹出一个哪些优化提示,那是由于屏蔽了本地硬碟,系统优化缓存没地放,可以启用一个本机盘就行。无大碍。
附win10开机手动挂载虚拟c盘的方式:
1、手动点击c盘文件,弹出错误,须要去c盘管理自动联机并分配驱动器号。
2、保存下边为bat文件
@echo off
echo select vdisk file=A:web.vhdx >vhdsel_GLAND // 指定磁盘位置即可
echo attach vdisk >>vhdsel_GLAND
echo online DISK >>vhdsel_GLAND
echo attributes disk clear readonly >>vhdsel_GLAND // 重复此段添加另一个磁盘
echo list disk >>vhdsel_GLAND // 名称不能和其他启动中一样
diskpart /s vhdsel_GLAND
del /f /q vhdsel_GLAND
exit
进win10设置,关掉手动播放,就不会每次启动弹出资源管理器了
3、控制面板->管理工具->任务计划程序(打开启动任务)创建任务。
常规->选择用户和不管用户登入都要运行,使用最高权限运行
操作->添加bat文件
触发器->用户登入时或则开机时,看你须要
三、安装Linux到vhd
安装Linux到vhd是比较麻烦的,Linux不好的看教程都看不懂。我是搞整整三天才成功,看了无数的教程。主要教程地址:
地址1,地址2
这是无忧峰会的niumao高手写的,这应当目前惟一可用的原创启动vhd中Linux的教程,我找遍全网,基本是复制他的方式,在美国峰会是也是被推荐了这个网址,有兴趣的兄弟可以去这个峰会研究一下。
我示例用的ubuntu,制做好了须要的两个启动文件了,有兴趣的可以用来直接用。下载地址,提取码rzih。上面也包含教程和标准文件。
grub2启动菜单写法如下:
// 只要修改对应文件位置即可直接引导
menuentry 'ubuntu-18.10.vhd' --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
insmod search
search --no-floppy -f --set=aabbcc /ubt/ubt1810.vhd
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /ubt/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff} kloop=/ubt/ubt1810.vhd kroot=/dev/mapper/loop0p1
initrd /ubt/initrd.img-4.13.0-36-generic
}
1、使用grub2引导
从这儿下载grub2-for-windows,
教程参考看这篇
制做efi文件的时侯要把上菜单须要的添加进去
制做好引导后放在对应的目录下,最好使用xorbootu菜单,指向它的efi文件,便于和windows引导共存,目录结构不能变(EFI/Boot/bootx64.efi是写死的)。
2、制作vhd文件
(1)新建vhd,固定大小20gb,vhd类型,挂载,打开VMware,新建类型为ubuntu64位(不能没有64),BIOS启动类型,c盘使用化学c盘,指向此整个c盘。更改配置,CD为ubuntu的ISO文件。开机
(2)制做过程中须要非常注意的一点是,一定不要出现逻辑分区,只有一个主分区就行。ubuntu16,若系统手动分区,会有swap这个逻辑分区,我曾经就是这样,踩了个坑洞。这儿自动分区,分一个就够了。ubuntu18,系统手动只有一个主分区,可以手动。最好使用diskgenius工具查看,若c盘下只有一个盘就OK。自动分区,会遇见虚拟机屏幕码率太小,按键被隐藏的文件,建议去网上找样图,用tab键分。
(3)最好使用我制做的两个文件引导此ubuntu.vhd,(initrd.img-4.13.0-36-generic和vmlinuz-4.13.0-36-generic),若成功则可下一步自己制做,这样兼容性好好多。
(4)三个文件最好放同一目录
若启动失败linux 下载工具,报错init问题,如notinitworkingfound,那就可能是分区没分好,启动菜单弄错了。
3、自己制做initrd.img文件
方式如下:
首先通过虚拟机步入你的ubuntu
①在终端安装必要软件sudoapt-getinstallkpartxkpartx-bootutil-linuxdmsetuplvm2,若联网却提示找不到软件,请
sudoapt-getupdate。最好分开安装,dmsetup可能是dm-setup
②sudogedit/usr/share/initramfs-tools/init
把init上面第30行的
mount-ttmpfs-o"noexec,nosuid,size=10%,mode=0755"tmpfs/run
更改为
mount-ttmpfs-o"noexec,size=20%,mode=0755"tmpfs/run
就是删掉nosuid,选项。
附:经测试,ubuntu1910版本须要用标准文件替换方可。
③sudogedit/usr/share/initramfs-tools/scripts/local,用标准文件里local的替换
附:1910版不可替换,只可对应更改,里面附件有说明。主要找准两个函数的相应注释即可。
④sudogedit/usr/sbin/mkinitramfs用标准文件里mkinitramfs的替换
附:1910版也不能替换了,否则编译不出文件来。
⑤sudogedit/etc/initramfs-tools/modules
加入以下三行
loop
fuse
dm-mod
⑥编译安装ntfs-3g
附件ntfs-3g_ntfsprogs-2016.2.22.fixed是早已更改好的ntfs-3g源码.
对他手工编译安装.解压到你的主目录之后,打开一个终端.步入该目录.依次执行以下:
./configure
make
sudomakeinstall
⑦sudogedit/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g用标准文件里ntfs_3g的替换
⑧生成:sudo/usr/sbin/mkinitramfs-o~/initrd.img-XXXXXXXXX-generic//这儿xxxx请与/boot/里对应的文件版本号保持一致
不出意外的话可以在home中找到生成的文件
(6)vmlinuz文件是/boot/下对应的那一个
(7)建议使用U盘传输文件,据说未能在虚拟机和主机之间复制粘贴。方式:菜单栏->虚拟机->可联通设备->你的硬盘->联接。可能须要重新拔插U盘,以联接。
(8)说明,我的标准文件是在niumao高手分享ubt-small.vhd中提取的,由于他分享的文件不对(可能是版本问题),直接去启动它的vhd,复制下来,替换,也是可以的。
四、安装centos等到vhd方式一、
先制做好vhd文件,centos分三个区,不要有lvm分区,swap也分成标准分区(主分区),提取出里面ubuntu的lib/modules下的xxxxxx.generic文件夹(先压缩再解压),再放进centos的lib/modules/上面。我也分享了一个可以直接用的提取码:ls5l
里面的引导菜单只需改对应文件和kroot=/dev/mapper/loop0p2(这个2应当改为你的根分区“/”所在次序,若你分了三个主分区,根分区在中间就是2,使用diskgenius即可查看根分区的位置),下边贴出我的菜单(class可换可不换)
menuentry 'centos 7' --class centos {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
insmod search
search --no-floppy -f --set=aabbcc /centos/centos7.vhd
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
linux /centos/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff} kloop=/centos/centos7.vhd kroot=/dev/mapper/loop0p2
initrd /centos/initrd.img-4.13.0-36-generic
}
ps:centos不支持ntfs,所以U盘低格为fat即可,fat不支持哪个文件夹中的数据类型,所以须要变为压缩文件。
若VMware中码率太低,不妨右键程序图标,设置调整视图属性。
centos安装时把软件全钩了也只需10g的空间,建议全钩了,不然以后安装就很麻烦,比如图形界面。
由于还需设置这个文件夹的权限为755,菜鸟建议用root用户操作,默认755.
附:centos分区若提示partition。。空间不足。,。。core.img。那可能是须要删除下边的一个未知分区
方式二
见分享教程fedora,是可以给centos用的,我试了,没直接转移一个压缩文件便捷linux添加windows引导,不介绍了。
其他Linux
与技巧一一样替换即可
五、最后
1、把所有系统都弄成一个文件,无需低格U盘,是不是心情很舒畅。到这儿我们就成功的把win10、ubuntu、centos成功装进vhd,放进硬盘,但是硬盘无需改动,可以便捷的备份,复制,可以便捷的真机登陆和虚拟机登陆,也可以便捷的升级。直接把安装到硬盘,通常只能装一个系统,并且升级的话大几率会使系统废了,装进vhd升级没问题的。(ps:有些朋友喜欢禁用win10手动更新,假如只是严禁启动的话是没用的,win10还是会强制更新,而禁用手动启动会造成更新失败,并数次重启还原,之后又是更新,这时应当开启手动更新服务)
2、可以将虚拟机使用整个联通硬碟进行启动测试linux添加windows引导,并且efi分区得把ID改回去
3、若想让联通固态硬碟成为第一启动项,而不用每次按f12选择,建议使用bootice,更改ufei启动序列,自己进BIOS更改可能会无效。
4、禁用win10手动更新的方式:设置->网路和Internet->状态->修改联接属性->开启'按流量计费的链接'
目前这方面的教程比较少见,我写的也比较仓促,不懂的兄弟可以找我,假如认为有帮助或则有不好的地方,还请留言,评论,谢谢。
补充:近来(2019/4/26)实现动态大小的vhdx装系统,原先只需更改注册表项就行了,[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesFsDependsParameters]"VirtualDiskExpandOnMount"从1改为4,就不会提示vhd空间不足,缘由是动态vhd引导时为了性能,会扩张到最大大小,参考谷歌原文。再说明下安装时选虚拟机x64配置,uefi对应gptc盘,虚拟c盘新建时应当使用diskgenius重新快速分区,要有esp分区,c盘管理器分会难以安装;bios对应mbr,就不能用diskgenius分,只能c盘管理器。现今就便捷好多了,初始容积减小大半,可以便捷的差分。
补充:可以使用xorbootu引导,也可以使用原windows引导文件,如从可用win10系统的efi分区照移(如gpt虚拟机c盘),原bootx64.efi更名,新建引导项指向它,原BCD删掉,新建一个,添加各类启动项。不知为什么win启动管理器界面编程老版黑白的,不是新版黑色的,试了几次改不回去,不过也好,老版的不要选取后重新启动机器。
补充:vhd+bitlocker是十分不错的文件保护方法
5、最近(2020/03/02)又编译了一次内核,并修正了一下本教程。虽然1910用原先的内核也能启动。只是启动过程的行报个红点,没哪些事。最新的没有,全是红色。不过关机的时侯会慢2秒
6、最近(2020/4/26),ubuntu20.04ltsl版本发布,在编译内核时,有几点注意即可linux环境变量,ntfs-3g可用2017版本,init文件须要直接替换,假如只更改nousid将难以启动,mkinitramfs没有#util-linux,但它里面的代码没变,粘贴全部即可,local对照更改即可。
还有硬碟格式记得是mbr,ubuntu20手动分会形成逻辑分区,必须自动,自动会发生虚拟机里码率太小的问题,上一步勾选安装图形,媒体选项即可。
在实际使用过程中,ubuntu1910和20.04,都出现了cpu运行高时会关机的现象,最后我通过在本地c盘上安装好系统和软件,之后在虚拟机中备份,并还原到vhd中,可以解决这个问题,假若还原的是全新的系统,后续装软件还是有该问题,应当是安装软件时有问题,也想不到为何,由于我的软件基本是解压文件夹里直接运行的,莫非是vscode,google,nodejs,meteor?,ubuntu18没有这个问题,可能是init文件形成的问题。还有wifi驱动,在化学c盘上就不给我手动装好,干脆直接用网线。
附备份命令:
在虚拟机中启动其他ubuntu,备份本地c盘上的ubuntu,最好先清空缓存和垃圾:
$ tar cvpzf ./backup.tgz --exclude=./proc --exclude=./lost+found --exclude=./backup.tgz --exclude=./mnt --exclude=./sys --exclude=./media ./
最后会提示,tar:Errorexitdelayedfrompreviouserrors,忽视即可。
还原,也是在其他虚拟机上:
在要还原的c盘上:
sudo rm -rf ./
sudo tar xvpfz /backup.tgz ./
重建文件夹:
sudo mkdir proc lost+found mnt sys media
即可。
7、切换不同厂家cpu的笔记本时可能遇见AMDRyzenMasterDriver.sys造成的死机,首先在虚拟机中启动或安全模式步入系统,命令行输入driverquery,查看所有驱动,可以找到这个,amdcpu开核驱动。之后尝试sfc/scannow修补,或安装鲁大师,驱动精灵修补,删掉驱动。
8、选择虚拟机记得windows10x64类型,否则就是32位了,但是不能使用UEFI引导,系统硬碟容量最大将不能超过2T
9、开虚拟机总显示硬碟被占用,可以延后挂载vhd和挂载以后等个几分钟
本文原创地址://lrxjmw.cn/whlxtzjvwjbc.html编辑:刘遄,审核员:暂无