为什么uefi只支持fat32引导?
UEFI这样的1st-stage bootloader的本职工作,就是运行grubx64.efi或bootmgfw.efi这样的2nd-stage bootloader,仅此而已。
UEFI识别能够FAT文件系统,已经方便用户太多了,安装2nd-stage bootloader,理论上直接复制粘贴.efi文件进ESP分区即可,不像Legacy BIOS一样需要使用专门的命令对硬盘进行直接操作,这在紧急情况下很实用,比如把WinPE或安装镜像iso内的所有文件直接复制到一个FAT分区内即可直接由UEFI启动。
要求UEFI规范支持更多文件系统,实在是有些求全责备。首先,有的文件系统格式如NTFS规范是专有的,不是自由开源的,在规范文件中加入专有格式不太合适。其次,操作系统会不断更新,操作系统根目录使用的文件系统格式也是如此,如NTFS有后继者ReFS;但是,UEFI不常更新,而2nd-stage bootloader是UEFI与操作系统共用的,所以ESP应该使用一个稳定的、受到广泛支持的文件系统,比如FAT。
Legacy BIOS甚至不支持任何文件系统,只能执行MBR分区表第一个分区前面1M空间里的二进制代码,比如grub或bootmgr,这些2nd-stage bootloader再识别ext4或NTFS等包含操作系统根目录的具体的文件系统,加载运行里面的/boot/vmlinuz(Linux内核)或C:\Windows\System32\winload.exe(UEFI则是winload.efi),winload.exe再运行Windows内核C:\Windows\System32\ntoskrnl.exe。另外,在Legacy BIOS下,在“保留分区”的第一个扇区里(VBR?)也默认保存着一份bootmgr,可以用grub来chainload。