关键字: UEFI, wimboot, xorboot, WinPE, uefi-bootable iso, grub2, xorboot, iPXE, AIO 在UEFI模式下,已经有很多比较优秀的bootloader, 诸如grub2、clover等,对于硬盘安装的各种操作系统,包括Windows,Linux和Mac OSX,处理起来都游刃有余。但是,对于很多维护iso,或winpe,能否在UEFI直接引导,而无需在刻录或者制作启动U盘? 直接说重点,pauly的xorboot很好的解决了UEFI/BIOS模式下,引导wim和ISO的问题。特别是Windows及 WinPE,无须解包刻盘,无需写BCDEIT,直接引导ISO/WIM文件,方便的很。xorboot所做的重大改进主要包含以下几点 1,完美的支持各种Win/WinPE,各种iso都能成功引导,表现出极强的适应性和健壮性 2,引导wim时,自动创建BCD文件,消除了重复编辑BCD文件的难度和复杂度。对一个能引导就可以的PE环境来说,BCD有或无,本身也无任何必要 3,xorboot支持entry的菜单式设计,这点比text格式的grub2要方便太多了。 xorboot的安装配置 对于xorboot,安装配置还是相当简单的。在这里,只关注UEFI模式下的xorboot配置。 1,下载xorboot,或者直接下载xorboot.efi,导出xorboot.efi. 在这里,xorboot.efi其实为一标准的xorboot,即使手工复制到其他设备,也可以使用的。 2,将xorxboot.efi复制到EFI分区的/efi/xorboot路径下。 因xorboot硬编码会去/efi/xorboot下读取配置文件,这就是主要原因。 /efi/xorboot/的目录结构及文件 xorboot.efi xorboot.xor back.jpg highlight.jpg 3,在win平台下,通过xorboot.exe进行启动项的配置和设置。保存即可,路径如上。 xorboot的配置,在网上有相当多的教程,在此就不再说了。通常在这里,会设置以下几个menuentry: 系统硬盘, WinPE/ISO, WinRE/wim, Grub2, Clover及必备的BIOS操作几个内容。 4, xorboot启动vhd/wim,还是需要Microsoft的支持,主要有以下几个文件: /efi/microsoft/boot/bootmgfw.efi /efi/microsoft/boot/boot.sdi (该文件已内置,无须再单独准备) 在iso或者windows启动时的bcd,每次都要费很大力气去写它,错一点点就蓝屏。现在完全不需要了,xorboot会自动生成需要的bcd 常见问题 1, 什么类型的光盘支持UEFI启动 在通过xorboot引导iso时,经常会出现以下提示: Not an UEFI-bootable ISO image! Failed to load booting file from ISO efi-boot-image! 此时,就说明这ISO并非efi-bootable ISO,即使它可以通过efi file方式引导。这里有俩个概念需要注意efi-bootable和efi file bootable。efi-bootable就是在iso引导时,会自动去读取ISO引导块标记为EF的bootcode。以上提示,基本上都是因为缺少了EFI的引导代码。通过UltraISO写的iso并不符合磁盘的启动规范,直接改名为ISO就更不成了。 那么如何创建uefi-bootable的iso呢,通过oscdimg来做。 oscdimggui只是一个工具,提供双启支持。光盘镜像启动后你镜像内的引导文件和文件夹结构也要正确才能完全启动成功。 efisys.bin是装载 \EFI\BOOT\bootx64.efi 或 \EFI\BOOT\bootia32.efi 的 bootmgr_cd.bin 是装载 \BOOTMGR 的 grldr_cd.bin 是装载 \grldr的 oscdimg -m -o -u2 -udfver102 -bootdata:2#p0,e,bd:\oscdimg\etfsboot.com#pEF,e,bd:\oscdimg\efisys_noprompt.bin c:\winpe_x64\ISO c:\winpe_x64\winpeuefi.iso 在linux环境下,通常采用mkisofs来创建 mkisofs -o /root/CentOS6.8_x64.iso \ -V centos6 -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 \ -boot-info-table -R -J -T -v . 2, xorboot真彩模式如何写菜单文字 在真彩模式下,会读取俩个图像文件,back/hilight,支持格式为bmp/png,jpg及其他格式是不支持的。当然了,俩个图像文件的名字也可以依照自己的偏好进行自定义。因真彩模式下,处理的是图像区域,因此这里并不会有文字输入的选项和内容。 xorboot的真彩图像,可以通过photoshop来做,主要从文字的高亮来区分背景和高亮图。从经验来看,选择的图像区域最好为固定大小的,这样在布局和间距处理时,会非常方便。 3,xorboot能否引导linux的ISO xorboot已经能做到解包linux ISO,读取和填充kernel的启动参数,但问题是,对于linux的iso,它的支持并不好,也许是因为iso格式,也许是bootcode问题,反正就是无法成功引导。但这个已经不重要,因为grub2在这方面已经处理的很好了。 以下对可引导wim/iso的bootloader进行简要比较: 1, grub2, 不能直接引导wim, 但可以引导各种形式的启动iso盘,对于linux处理的非常好,对于实模式的winpe盘处理的不咋地,不是花屏,就是无法启动,特别依赖于主板和bios。 grub2的优点是可以chainloader其他bootloader,进行接力引导。 2, iPXE chainloader wimboot,通过iPXE方式下载和加载wim, 无论文件是否在本地,wim启动时,一定要ipxe网卡up和启用。这给比较扯,因此在本地磁盘模式下,优势不大。 3, wimboot 支持legacy模式下grub2对wim的引导,在uefi模式下不支持,需要改写代码。 wimboot的缺点是需要非常长的代码,来处理bcd/fonts等内容,很复杂易出错,关键还毫无意义。这个缺点在xorboot里得到非常完美的修订。 通过xorboot,可以在各种不同的WinPE中来回切换。部署在系统硬盘上,一方面可以快速验证生成的wim,另一方面在操作系统出现故障时,可以快速启动和修复。在U盘上部署一套,就是真正的WinPE to go,所谓的系统防护、加密,统统失效,任意机器随意启动,如入无人之境。 后记:因为grub2并不能引导wim/iso,曾经萌生了改写wimboot去支持gpt/uefi的想法。之所以不去动grub2,一方面是grub2过于复杂,另一方面它本身支持chainloader,就没必要再去patch它本身了。 在看到xorboot后,这个想法给打消了,一方面是再没这必要,另一方面,xorboot已经相当优秀了,没必要重复去造轮子,再努力也不可能超越pauly,超越xorboot了。 Reference http://bbs.wuyou.net/forum.php?mod=viewthread&tid=373278 http://ipxe.org/wimboot http://ipxe.org/howto/winpe http://ipxe.org/appnote/wimboot_architecture https://support.microsoft.com/zh-cn/help/947024/how-to-create-an-iso-image-for-uefi-platforms-for-a-windows-pe-cd-rom