Grub2引导VHDX中的Windows

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Akeron/article/details/50072413

   装了Windwos与Ubuntu多系统,在网上查了好多资料,都没发现如何用Grub2引导装在VHDX中的Windows开机,有关于使用memdisk的,但是装有Windows的VHDX过大,直接让其引导会出错,于是读了几篇文章后,有了一些想法,自己试验了一下,成功实现了用Grub2引导VHDX中的Windwos开机。

  网上看到一篇帖子的内容是用grub2引导UEFI(gpt硬盘)中的Windows 7开机的,看完帖子明白了以下几点:
   1. 在BISO下,Windows7 开机的时候只要读取BCD后就可以引导VHD,但是BCD所在硬盘必须有MBR,即为主分区,但重要的是这个硬盘可以是物理的也可是虚拟的,也就是说如果在gpt的硬盘上,可以虚拟出一块硬盘并写入MBR,再加入引导文件即可实现引导物理磁盘上的操作系统。
  2.VHD是一个硬盘镜像,只是最后多了一点文件,形成了vhd格式。发现原来当 type=fixed 的时候,vhd 其实就是 raw image 加上 512 字节的 footer。切掉这个尾巴之后,得到的东西和 dd 式的 raw image 是一模一样的。而就算不切掉尾巴,这一部分也会被认为是未分区空间从而被忽略掉。所以,其实 type=fixed 的 vhd 是不用转换,直接可以当 raw image 用喂给 MEMDISK 的。
  3. Windows 的安装框架是 Windows PE,而 Windows 安装镜像文件也就是 Windows PE 和 install.wim 的组合而已,所以可以直接从安装镜像里就可以释放一个 Windows PE 出来。Windows安装包做的事::解压 install.wim 到指定分区、写入引导扇区、写入 BCD 这三样。
  4. VHD可以实现多级引导,也就是说VHD中的文件还可以再识别另一个VHD中的文件。这个是重点,也就是实现Grub2引导VHDX中Windwos的原理。


  具体的步骤如下:
  虚拟一块VHD或VHDX硬盘,并写入MBR和引导文件后,再用这个硬盘来引导VHD文件中的系统,这样借助memdisk后grub2可以引导VHD,而memdisk引导后可以直接读取MBR,(关于memdisk可以去其WIKI上获取更多信息),这样再把BCD中的引导路径更改为本地的系统或VHD中的系统。步骤如下:
  
  1.首先创建一个VHD磁盘,进入命令行后DISKPART。
  Create vdisk file=c:\win7bootmgr.vhd maximum=32 type=fixed
  Select vdisk file=c:\win7bootmgr.vhd
  Attach vdisk
  Create partition primary
  Active //这一步是MBR硬盘上必须的
  Format label=bootmgr quick
  Assign letter=j
  
  2. 之后用bcdboot.exe来将引导文件复制到这个盘中,Bcdboot c:\windows /s h: /l zh-cn (/f可以加也可以不加,如果/f all 是BIOS和UEFI的启动文件都复制,不加就是BIOS,/f uefi是UEFI)
 
  3. 用bootice写入MBR,并且修改复制进去的引导文件中的BCD,将其改为想要的路径。如果要引导VHD则改为VHD所在。
  
  4. 下载最新版syslinux提取memdisk,并放到相应的位置,自己决定。
  
  5. 在etc/grub.d/40_custom中写入菜单:
  
    menuentry “Windows 7 ” {
     linux16 /boot/syslinux/memdisk harddisk
     initrd16 /boot/win7bootmgr.vhd
    }
   然后在Ubuntu中执行sudo update-grub。
  
开机重启即可成功用Grub2引导VHD/VHDX中的Windows。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭