红联Linux门户
Linux帮助

Grub2引导VHDX中的Windows

发布时间:2016-02-28 15:53:48来源:linux网站作者:Akeron

装了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,再加入引导文件即可实现引导物理磁盘上的操作系统。

2VHD是一个硬盘镜像,只是最后多了一点文件,形成了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。


本文永久更新地址:http://www.linuxdiyf.com/linux/18472.html