64位UEFI下的WinPE + LinuxPE多启动Grub2 U盘

2019/04/10 10:10
阅读数 769

最近研究了一下如何制作一个多启动U盘,其中想包含的WinPE是微软官方的基于Windows 10的PE,LinuxPE就用Puppy Linux。这里先大概聊一下这两个PE的基本原理,然后再说怎么制作。

PE的基本原理

Windows 10 PE的基本原理

Windows 10 PE的ISO制作方法可以参考微软官方的制作方法。制作好以后,可以从ISO文件里面提取出来下面几个东西:

  1. \boot目录下的bootx64.efi,这个文件是UEFI第一个要找的文件,没有这个没办法引导PE。
  2. \EFI\Microsoft\Boot目录下的BCD,这个文件是bootx64.efi要寻找的,这个文件配置不好的话会出现cannot find image这个错误。
  3. \boot目录下的boot.sdi,\sources目录下的boot.wim,这两个文件是BCD文件要寻找的。
  4. boot.wim是最后要载入的镜像文件。 注意:制作好的目录基本结构如下:
  5. /EFI/Microsoft/Boot/BCD,这个BCD文件不能够放到别的路径,如果放上去那bootx64.efi就会找不到BCD了。
  6. /iso/win10pe/下放boot.wim,boot.sdi,bootx64.efi,这三个文件可以随意改位置。

Linux PE的基本原理

Puppy Linux的ISO制作方法非常简单,只需要把这根目录下的vmlinuz,initrd.gz,puppy_bionicpup64_8.0.sfs和zdrv_bionicpup64_8.0.sfs提取出来就好了,路径可以随意放置。

准备工作

必备的硬件

1个USB,我用的大小是16GB,其实8G甚至4G也能够完成。

必备的软件

  1. Grub2 for windows:这个是制作分区必须的
  2. Bootice 1.3.4:这个可以去网上下载各种绿色版
  3. Windows 10 PE:这个需要自行去最开始微软链接里面的工具下载制作
  4. Puppy Linux PE:网上到处都有下载,我是从清华的开源镜像库找的

制作流程

USB分区

USB分区分成两个区就好了,考虑到硬盘数据还需要被mac读取,所以放置数据的分区用exFAT格式化,引导分区ESP用FAT32格式:

  1. 第一个分区(hd0,1):格式:FAT32,大小:3GB,作用:存放引导和镜像文件
  2. 第二个分区(hd0,2):格式:exFAT,大小:剩下的大小,作用:存放数据,在本文中不会使用到

安装Grub2

这一步本来没什么想说的,但是后续如果不注意会使得grub产生error: Unknown filesystem这个错误,所以大致讲一下。首先,管理员身份运行CMD,进入grub2解压以后的文件夹,在CMD里面输入以下命令:

grub-install.exe --boot-directory=第一个分区下的目录 --efi-directory=第一个分区的USB盘符: --removable --target=x86_64-efi

注意:这个命令的boot-directory参数指定以后会在指定的目录下安装一个grub文件夹,里面可以进行各种配置,并且会在efi-directory对应的路径生成一个相应的EFI文件夹。

最后,在新生成的grub文件夹下面新建一个grub.cfg空文件。并且添加下面的一些模块加载选项:

insmod iso9660
insmod all_video

安装Windows 10 PE

  1. 选择好boot.wim,boot.sdi,bootx64.efi的安装路径
  2. 用BOOTICE打开/EFI/Microsoft/Boot/BCD文件进行编辑,修改boot.wim和boot.sdi这两个文件的相对路径使得BCD能够找到这两个文件,然后,在BOOTICE下还要修改Windows的启动文件winload.exe成winload.efi。
  3. 在grub.cfg添加下面的启动项:
menuentry "Windows 10 PE" {
    chainloader /iso/win10pe/bootx64.efi
}

上面的路径一定要修改成你自己的路径。

安装Linux PE

把Puppy Linux的iso文件放置到你能够找到的位置,然后,在grub.cfg添加下面的Puppy Linux的启动项:

menuentry "Puppy Bionic" {
    set root='(hd0,1)'
    linux  /iso/puppy/vmlinuz pmedia=ataflash psubdir=/iso/puppy
    initrd /iso/puppy/initrd.gz
}

到此,所有制作已经完毕,其实没有想象中那么难,但是网上想找到一个比较完整的步骤还不太容易。有问题的话,各位可以在下面留言,我会不定时解答。

原文出处:https://www.cnblogs.com/alexanderzjs/p/12389079.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部