现今BIOS存在传统的Legacy BIOS和UEFI两种;
Legacy BIOS
存在的历史比较长,使用广泛,最近几年正在被UEFI所替代,主要原因我认为是这种方式的BIOS对X64体系的支持不够友好;
再加上硬盘容量已经超过2TB,MBR分区表无法处理,需要用到GPT分区表.
Legacy BIOS的一般启动流程是:
1.由BIOS选择启动设备,如HDD/CDROM等;
2.加载该设备的MBR(主引导记录),MBR中记录了下一步启动的方式,通常是搜索激活的主分区;
3.加载该分区的PBR(分区引导记录),PBR中记录了需要引导分区中的哪个启动管理器,如NTLDR/BOOTMGR/GRLDR等;
4.加载启动管理器,由启动管理器进一步加载OS内核;
UEFI
全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。
这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
大约2010年以后生厂的电脑大多数都开始使用UEFI了,只不过版本可能比较低,兼容性没有最近几年的好。
UEFI的启动流程:
1.指定启动设备,如HDD/CDROM等;
2.搜索可识别的分区,通常是FAT32;
3.在该分区的/efi/boot/目录下寻找bootx64.efi或者bootia32.efi;
4.引导bootx64.efi文件,这个文件就是Legacy BIOS中的启动管理器,由启动管理器进一步加载OS内核;
虽然UEFI在各个方便对比传统BIOS有不少优势,但目前看来使用起来还是有不少困难,比如说支持的引导程序比较少,不支持实模式的DOS系统等。
而且Legacy BIOS和UEFI的运行模式完全不一样,引导文件的格式也不一样,因此在Legacy BIOS和UEFI模式下的引导文件是不能通用的。
再加上MS在UEFI中强行加入Secure Boot这个流氓,啊?
启动管理器(也叫做引导程序,对应的文件叫做引导文件)
常见的启动管理器如下:
1.NTLDR
Windows XP时代的启动管理器,通过/boot.ini文件来管理启动菜单,可以引导grub等其它引导程序。
目前只有Legacy BIOS模式下的引导文件,不支持UEFI启动。
2.BOOTMGR
Windows Vista以后的系统使用和启动管理器,功能上比NTLDR强大一些,支持VHD,WIM文件的挂载。
Legacy BIOS模式下引导文件为/bootmgr,通过/boot/bcd文件来管理启动菜单;
UEFI模式下引导文件为/efi/boot/bootx64.efi,通过/efi/microsoft/boot/bcd文件来管理启动菜单。在UEFI环境下它不能引导其它的启动管理器如grub。
3.GRUB4DOS
多系统引导程序,GNU GRUB的一个分支,有一个强大的shell,可以通过命令行进行引导。
目前只有Legacy BIOS模式下的引导文件,不支持UEFI启动,一般情况下通过/menu.lst来管理启动菜单;
常用命令:
chainloader 加载MBR
chainloader /bootmgr 可以导引bootmgr
chainloader /g2ldr.mbr 可以引导grub2;
chainloader +1 可以引导当前分区的PBR;
kernel 加载引导程序内核
kernel /g2ldr 可以引导GRUB2;
boot 引导刚才加载的程序;
map 映射iso等镜像文件;
4.GRUB2.0
多系统引导程序,GNU GRUB的主线项目,有一个强大的shell,可以通过命令行操作。
Legacy BIOS模式下引导文件一般为/g2ldr.mbr,由g2ldr.mbr来引导/g2ldr;通过/grub/grub.cfg来配置启动菜单项。
UEFI模式下引导文件为/efi/boot/bootx64.efi,也可以通过/grub/grub.cfg来配置启动菜单项。
常用命令:
chainloader Legacy BIOS模式下:没有成功过,总是提示Missing MBR-Helper,UEFI模式下可以加载其它efi格式的程序
linux 加载linux内核
initrd 加载linux的ramdisk
ntldr 加载ntldr,bootmgr,grldr
boot 引导刚才加载的程序
lookback 映射iso等镜像