【BIOS】MBR引导程序类型及详解

一、前言

在了解MBR引导之前,先需要了解读取MBR之前,机器都干什么了。

直接总结其他博主的文章罗列在此,以便查阅:

首先我们要了解整个启动过程的轮廓,可以读下边这篇文章

计算机的启动过程(详细) 

读完这篇文章,我们可以深入研究一下BIOS在将控制权交给MBR之前的一系列动作,可以读下边文章

BIOS启动过程分析

了解BIOS之后,可以看看MBR的具体结构。

主引导记录MBR的结构和作用

总结一下:


二、MBR的类型

MBR的类型很多,仅总结自己用过的,随着了解的越多,会不断补充:

Windows NT 5.X(主要用于WIndows XP)
Windows NT 6.X(主要用于Windows7,8,10;Windows Server 2010,2012等)
Grub 2.00(boot.img+core.img)(主要用于Linux)
Grub 4 DOS
Xorboot(Pauly开发的多系统引导程序,可以引导多种系统)

三、Windos NT 5.x

Windows XP 启动过程详解,详见其他博主的文档。
首先计算机通电进行自检,并由BIOS(即基本输入输出系统)完成基本硬件配置,然后读取硬盘的MBR(主引导记录)检查硬盘分区表以确定引导分区(即活动[Active]的分区),并将引导分区上的操作系统引导扇区调入内存中执行,此处即执行NTLDR(操作系统加载器)文件。
接下来ntldr会寻找系统自带的一个微型的文件系统驱动,以使ntldr找到硬盘上被格式化为NTFS或者FAT/FAT32文件系统的分区。读取了文件系统驱动,并成功找到硬盘上的分区后,引导载入程序的初始化过程就已经完成了,随后我们将会进行到下一步。
选择操作系统,这一步并非必须的,只有在您计算机中安装了多个Windows操作系统的时候才会出现。如果您安装了多个操作系统,那么所有的记录都被保存在boot.ini文件中,并根据其中的内容判断计算机上安装了几个Windows,它们分别安装在第几块硬盘的第几个分区上。

小知识:
  1. 系统盘(System Volue)和引导盘(Boot Volume)的区别:系统盘是指保存了用于引导Windows的文件(即ntldr,boot.ini)的银盘分区,而引导盘是指保存了Windows系统文件的硬盘分区。保存了引导系统所需文件的分区被叫做“系统盘”,反而保存了操作系统文件的分区被叫做“引导盘”,正好颠倒了。不过微软就是这样规定的。
  2. 安装好系统后,使用DiskGenius取消系统所在分区的激活状态,将无法进入系统。因为从MBR查找不到激活分区,不知道到那个分区寻找启动文件ntldr。

3.1典型的Boot.ini文件格式

[boot loader]

timeout=5(设置延时时间)

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS(设置默认操作系统的路径)

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect(操作系统列标)


参数详解:

/3GB:这是Win2000 SP3新引入的。这使得用户区和系统区分为3G比1G的比例。只有用户使用NT企业版,应用程序也支持3GB选项时,此选项才生效。

/BASEVIDEO:使用标准VGA方式启动。这种方式主要用于显示驱动程序失效时。
/BAUDRATE:指出用于调度的波特率,如果用户不设置,则使用默认的9600,而对于线缆Modem则使用19200。
/BOOTLOG:使Win2000将日志写入 %SystemRoot%\NTBTLOG.TXT 。
/BURNMEMORY=:使NT在已知的内存上少使用指定的数量,如果/burnmemory=64,则有64M内存NT不使用。
/CRASHDEBUG:调度器在NT启动时启动,只有在内核错误时才有用,如果系统经常会无故出错,这个选项就很有用了。
/DEBUG:在启动NT时调入调度器,它可以在任何时间激活,在错误可以再次出现时使用它比较合适。
/DEBUGPORT= comx :指定用于调度的端口,其它X就指端口号。
/HAL=:允许用户不使用默认的HAL。
/INTAFFINITY:设置多处理器HAL(HALMPS.DLL),使编号最大的处理器接收中断请求。如果不设置此选项,Win2000会使所有处理器接收中断请求。
/KERNEL=:与上面的功能相同,不过是针对SMP中的内核而言的。
/MAXMEM:n:指定NT可以使用的最大内存数,如果一个内存片损坏,这个开关就十分有用了。
/NODEBUG:不使用调试信息。
/NOGUIBOOT:指定此选项会使Win2000不加载VGA驱动程序,也就不会显示启动过程和失败时的兰屏信息。
/NOSERIALMICE=[COMx | COMx,y,z…]:在特定的COM中上禁止对串行鼠标的检测。如果用户有一个非鼠标设备接在COM口上,这个选项会十分有用。如果此开关未加参数,系统会禁止所有COM口。
/NUMPROC=n:只允许前N个系统处理器工作。
/ONECPU:在多处理器中只使用一个处理器。
/PCILOCK:不让NT为PCI设置分配IO/IRQ资源,而启用BIOS设置。
/SAFEBOOT:安全启动,这个大家一定十分熟悉,Win2000只启动HKLM\System\CurrentControlSetControl\SafeBoot中的驱动程序和服务,其后跟三个参数MINIMAL,NETWORK或DSREPAIR之一。MINIMAL和NETWORK在允许网络下启动系统。而DSREPAIR要求系统从备份设备中调入活动目录的设置。还有一个选项是"(ALTERNATESHELL)",它让系统调入由HKLM\System\CurrentControlSetSafeBoot\AlternateShell指定的SHELL程序,而不使用默认的Explorer。
/SOS:在调入驱动程序名时显示它的名字,在因驱动问题而无法启动时使用比较好。
/WIN95:在装有三个系统DOS、Win9x和Windows NT的系统上,让NTLDR直接调用Win9x。启动文件BOOTSECT.W40。
/WIN95DOS:在装有三个系统DOS、Win9x和Windows NT的系统上,让NTLDR直接调用DOS启动文件BOOTSECT.DOS
/YEAR=:使用指定的年份,如果设置为/YEAR=2005,那现在的时间就是2005年,此选项仅对NT4+SP4和Win2000生效。
/fastdetect:快速检测对于Win2000启动时,它使系统不检查串行口和并行口。对于“fastdetect”这个参数,微软给出的解释是“关闭Ntdetect.com在开机时对串口鼠标的检测”。

3.2、Boot.ini添加多系统引导

[boot loader]

timeout=5

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

C:\WINDOWS\arboot\dos\ar.BIN="矮人工作室纯DOS模式"(引导BIN文件)

四、Windos NT 6.x

浅谈Windows 7系统启动过程,详见其他博主文档
与Windows NT 5.x前半程相似, Windows NT 5.x是调入ntldr,而Windows NT 6.x是调入bootmgr启动管理器文件,bootmgr读取\Boot\BCD,根据BCD控制显示启动菜单。

小知识
  1. bootmgr文件与\Boot\BCD文件必须位于同一磁盘,bootmgr不具备跨磁盘分区查找BCD文件的能力,且路径是指定的,即BCD文件必须位于\Boot文件夹下。
  2. 若BCD文件加载其他分区内的文件,如WIM文件。则其他分区的格式必须是FAT、FAT16、FAT32、NTFS这几种bootmgr支持的文件系统,否则不能加载。

4.1、BCD文件内容

BCD文件中可以添加多种入口
  1. Windows 7/8/8.1/10
  2. Winsow XP/2003
  3. RealMode (Grub/Linux)
  4. VHD boot
  5. WIM boot
  6. ramdisk
  7. memory tester
在Windows NT6.x内核的操作系统中,以管理员身份运行CMD,输入bcdedit >c:\bcd.txt命令,将在C盘根目录下生成BCD内容文件的txt文档,内容如下。
注:导出BCD文件的主机,不存在350M隐藏分区,所以Recovery文件也存储于C盘。与其他默认安装格式化磁盘时将默认生成350M隐藏分区计算机的recovery的路径会存在差异。

Windows Boot Manager【启动管理器参数设置】
--------------------
identifier              {bootmgr}
device                  partition=C:【标记bootmgr所在的分区】
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {current}【 Windows 10的identifer
resumeobject            {2449b2d7-5383-11e6-9620-86dedc2bf396}【Windows恢复模式的identifer】
displayorder            {current}【 Windows 10的identifer】
                        {6900be0c-e149-11e7-825e-005056c00008} RemixOS的identifer】
toolsdisplayorder       {memdiag}
timeout                 30


Windows Boot Loader【Windows启动加载器】
-------------------
identifier              {current}【与default的current对应】
device                  partition=C:【操作系统所在分区】
path                    \Windows\system32\winload.exe【系统加载器的路径】
description             Windows 10【系统描述,将显示在启动菜单】
locale                  en-US
inherit                 {bootloadersettings}

recoverysequence        {2449b2d9-5383-11e6-9620-86dedc2bf396} 【Windows恢复模式的identifer】
recoveryenabled         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {2449b2d7-5383-11e6-9620-86dedc2bf396}
nx                      OptIn
bootmenupolicy          Standard

Real-mode Boot Sector【实时模式启动扇区】
---------------------
identifier              {6900be0c-e149-11e7-825e-005056c00008}
device                  partition=C:
path                    \ubnldr.mbr
description             Remix OS

由软件呈现的配置细节如图:
Windows Boot Manager:


Windows 10:

Windows Recovery Environment:
RemixOS:

Windows Resume Object:

Windows Memory Diagnostic:

Device Objects:

4.2、Windows XP/2003入口添加

Windows XP/2003入口添加共分为3中模式
1、Partition安装到硬盘本地,指定启动磁盘与启动分区,将会到此分区下查找NTLDR文件


2、Ramdisk为镜像文件,加载到内存执行,此项需指定Device file,注意文件名称前的"\",代表Boot part下的根目录,具体路径需根据文件存储的实际路径和文件名称,进行定义。RamDisk的identifer必须选择,为自动生成。


3、VHD为虚拟硬盘文件,需指定VHD文件的路径及名称,identifer被{ntldr}代替,其真实的identifer可以在Windows Boot Manager中查看到。


DisplayOrder中查看真实的identifer


只有当在添加一项Windows XP/2003入口,才会直接显示真实的identifer,如下图,在上图中的DisplayOrder中也可以查看到第二次添加的 Windows XP/2003入口的identifer。


4.3、Windows7/8/8.1/10入口添加

Windows7/8/8.1/10入口添加和WindowsXP/2003入口添加类似,共分为3中模式。Windows7/8/8.1会自动添加Windows Resume Application。
1、Partition安装到本地硬盘

2、Ramdisk虚拟镜像,注意OS Device,路径要选择Boot,代表镜像加载后的根目录。

3、VHD虚拟磁盘

4.4、VHD入口添加

bios引导vhd的时候是通过bootmgr穿透vhd虚拟磁盘直接引导内部的winload.exe,而不是去加载vhd的主引导
VHD入口需要设置ApplicationDevice,还有OSDevice,具体还未经过实践,两个位置,那个要填BOOT,那个要填VHD镜像的路径。

4.5、WIM入口添加

添加WIM如后后,会自动添加一项{ramdiskoptions},在Device objects中需编辑{ ramdiskoptions},为boot.sdi指定正确的路径,SdiPath可以更改路径


4.6、Realmode 入口添加

RealMode,其实是使用bootmgr引导其他引导文件,属于二层引导。指定引导文件的路径即可。

4.7、ramdisk入口添加

此项入口添加不能算作真正的系统入口添加,仅指定了boot.sdi的路径。

4.8、Memory Test入口添加

此项是为内存检测程序添加引导的,是否可以更改成其他磁盘管理程序还未测试。

五、XorBoot BIOS版

Xorboot是由Pauly大神写的一个系统独立引导程序,直接存储与引导扇区,不引用任何一个系统的引导文件,对各子系统从入口处就分离引导,相当棒的一个引导程序。
详细原版教程详见无忧启动论坛,作者的介绍。
BIOS 版本 XORBOOT 支持的启动类型有
  1. GRLDR/GRLDR.MBR、
  2. NTLDR / SETUPLDR.BIN / BOOTMGR、
  3. SYSLINUX 的 LDLINUX.BIN/ISOLINUX.BIN(3.00~6.02)、
  4. PLoP Boot Manager、
  5. MS-DOS(IO.SYS)、
  6. FreeDOS(KERNEL.SYS)以及磁盘映像文件(IMG; IMA; ISO; VHD/VHDX(MS NT 6x); 
  7. WIM(MS NT5x/6x);
  8. VHD/VMDK(VBOOT驱动);
  9. Windows NT5x PE(IMG/ISO/WIM))的启动。
小知识:
  1. 按文件系统读取文件时,文件名最大长度为 31 个英文字符,仅支持 FAT16/FAT32/EXFAT/NTFS 文件系统。
  2. XORBOOT 可以安装在硬盘的 MBR 上启动,也可以安装到 PBR 上,也可以部署到 ISO 镜像,还可以将配置输出后由 GRUB4DOS 或 BOOTMGR (使用RealMode添加引导)加载启动。
  3. XORBOOT没有Windows NT6.x里的激活分区概念,直接进分区进行搜索,或者直接搜索文件,两种模式。
  4. 引导文件文件可以放在分区的根目录下,也可以放在子目录下,还可以放到剩余分区等不可见的地方;目录分隔符/ 等同于 \,即 /NTLDR 和 \NTLDR 是一样的。需要强调的是,文件名中不可出现盘符,如 C:\NTLDR或C:NTLDR都是错误的,将不被XORLDR识别。盘符由“工作磁盘及分区号”替代。
  5. XORLDR 支持FAT16/FAT32/NTFS 三种文件系统,其中FAT分区上仅支持 8.3 格式的短文件名;NTFS 分区上要求 $MFT 必须是连续的,否则可能搜索不到指定的文件,且文件不能是加密或压缩的。
  6. XORBOOT添加图形界面BMP图片的大小需限制在2M,可以通过压缩软件进行压缩,保证图片的大小,负责会造成图片的变形和颜色的丢失。

5.1、XORBOOT的部署位置

根据需要,选择部署的位置,计算机上一般选用MBR


5.2、添加引导

xorboot可以引导多种系统,最主要的两个步骤为设置BootType和SystmeType,其他的功能,如隐藏分区控制,启动密码,图形菜单,启动名称的设置,根据需要自行设置。
整体步骤,
  1. 设置BootType
  2. 设置SystmeType
  3. 其他功能设置

5.2.1、确定BootType(启动类型)

xorboot有多种启动类型,如下

Boot from PBR,需要在Disk and Partition中指定磁盘号,和分区号。
Boot from file, 需要在Disk and Partition中指定磁盘号,和分区号,还需在file name中指定引导文件的名称。
Search & boot from file,将会遍历所有磁盘,查找指定File name文件,前提文件存放于xorboot支持的文件系统格式分区内。
Boot from raw sector,需要指定磁盘号,和起始扇区号及载入的扇区数,引导文件的载入和地址,可以通过WinHex文件实现。
Shutdown computer,将关机
Reboot,将重启
Boot from next device(INT 18h),将调用中断从下一设备启动

5.2.3、确定SystemType

根据BootType再确定SystemType的设置。
1、Boot from PBR
此项下不用设置SystemType,引导直接跳转至指定分区的PBR
2、Boot from file
此项下需要设置SystemType
MBR (Master Boot Record) 磁盘导出的MBR文件
PBR fPartition Boot Record) 磁盘分区导出的PBR文件
General Programs  一些独立的应用程序,入memtest.exe
NTLDR/BOOTMGR  Windows NT5.x和Windows NT6.其动管理器
LDLINUX.BIN/ISOLINUX.BIN  Linux的引导文件
Plop Boot Manager  启动外置U盘,需要到https://www.plop.at/en/bootmanager/index.html,下载plpbt.bin,设置为文件名。在Reference中查看磁盘号。
MS-DOS(IO.SYS) 启动DOS
FreeDOS (KERNEL.SYS) 启动FreeDOS
FDD image (*.img;*.ima) 启动软盘镜像文件
HDD image (*.img;*.ima) 启动硬盘镜像文件
ISO image (*. iso) 启动光盘镜像文件
VHD/VHDX (Windows NT 6.x) 启动Windows NT6.x系统的虚拟硬盘
WIM (Windows NT 6.x PE) 启动Windows NT6.xPE系统的WIM文件
VBOOT (VHD/VMDK) 启动VHD虚拟硬盘
Windows NT5 PE(*.IMG;*.IMG*.ISO;*.IS_) 启动Windows NT5 PE的镜像文件、

5.2.4、功能设置

1、GlobalSetting全局设置,菜单分为两种,一种为TextMenu,一种为GraphicMenu,Graphic可以使用PS处理,格式为BMP,大小小于2M。

2、设置各系统的功能,如快捷键,分区隐藏。

5.2.5、引导部署

XORBOOT能否正常启动,很关键的一点是主代码及辅助代码安装位置要弄清楚了。XORBOOT主代码占用1个扇区,辅助代码占用31个扇区,共需要32个扇区的空间。
当将主代码位置安装”to MBR“,将占用0~32扇区,0扇区存储主代码,1~32扇区存储辅助代码。
当将XORBOOT部署 “to specified sector”,Disk指定了磁盘,Leading Sector定义了主代码的起始位置,往后占用1个扇区, Auxi sector定义了辅助代码的起始位置,往后占用31个扇区。

利用XORBOOT主代码及辅助代码存放位置的不同,可以方便地实现与GRUB的双启动。安装XORBOOT至MBR后,其主代码占用1号扇区, 而将辅助代码安装到其它位置,然后安装Grub4DOS其引导程序占用第0扇区及第2~18扇区共18个扇区的空间。这样即可实现XORLDR与GRUB的双启动。
需要勾选尝试有限启动以前的MBR,取消勾选Install MS NT6 MBR to the 2nd sector,否则将擦写XORBOOT的主代码。


六、Grub2.00

6.1、Grub2.00的启动流程及文件组成

GRUB2在BIOS平台上的常规启动步骤是这样的:BIOS --> boot.img[MBR] --> core.img[MBR gap/embedding area/BIOS Boot Partition] --> 设置"prefix root cmdpath"环境变量 --> 加载"normal.mod"模块[同时还包括它所依赖的 terminal crypto extcmd boot gettext 模块] --> 执行"normal $prefix/grub.cfg"命令。
如果上述步骤全部成功,那么你将进入'普通模式',一般是显示一个菜单(找到了'$prefix/grub.cfg'),或者直接进入GRUB SHELL(没找到'$prefix/grub.cfg')。在普通模式中,命令模块[command.lst]与加密模块[crypto.lst]会被自动按需载入(无需使用"insmod"命令),并且可使用完整的GRUB脚本功能。但是其他模块则可能需要明确使用"insmod"命令来载入。
如果在加载"normal.mod"模块这一步出现故障,那么你将进入GRUB2的'救援模式',而不是常规的'普通模式'。在救援模式中,GRUB只自动设置了"cmdpath prefix root"三个环境变量,并且只能使用"insmod ls set unset"四个命令。只有当额外的模块被加载之后,才可以使用一些其它的命令,变量,解析器,驱动程序。

6.2、典型的grub.cfg配置文件

由CentOS导出的Grub.cfg文件,内容如下:
================================================================================
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#


### BEGIN /etc/grub.d/00_header ###
set pager=1


if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi


if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi


export menuentry_id_option


if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi


function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}


function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}


terminal_output console
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###


### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###


### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
  source ${prefix}/user.cfg
  if [ -n "${GRUB2_PASSWORD}" ]; then
    set superusers="root"
    export superusers
    password_pbkdf2 root ${GRUB2_PASSWORD}
  fi
fi
### END /etc/grub.d/01_users ###


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Windows 10 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-80D6F4D9D6F4D100' {
    insmod part_msdos【载入dos分区模块】
    insmod ntfs 【载入ntfs文件系统模块】
    set root='hd0,msdos1' 【将磁盘0的第一个分区设置为root】
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 80D6F4D9D6F4D100
    else
      search --no-floppy --fs-uuid --set=root 80D6F4D9D6F4D100
    fi
    parttool ${root} hidden-
    chainloader +1【跳转】
}
menuentry 'Remix OS (Resident mode - All your data and apps are saved )' --class remixos  --class android-x86 --class gnu-linux --class os {
search --file --no-floppy --set=root /kernel【查找kernel,并设置为root】
linux /kernel root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive quiet  DATA= CREATE_DATA_IMG=1 SRC=/ #将data目录指定给data.img文件,也可以新建data文件夹,赋值为/data,注意=号后的空格
initrd /initrd.img
}
menuentry 'CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-8939dd63-b289-4149-a4d1-8a5bb3ee56d1' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos6'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos6 --hint-efi=hd0,msdos6 --hint-baremetal=ahci0,msdos6 --hint='hd0,msdos6'  d1a621a8-a3ef-427e-9094-16e45c9e986e
else
  search --no-floppy --fs-uuid --set=root d1a621a8-a3ef-427e-9094-16e45c9e986e
fi
linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet LANG=zh_CN.UTF-8
initrd16 /initramfs-3.10.0-514.el7.x86_64.img
}
menuentry 'CentOS Linux (0-rescue-0207c6e32eb942c3bbdb027fade548cb) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-0207c6e32eb942c3bbdb027fade548cb-advanced-8939dd63-b289-4149-a4d1-8a5bb3ee56d1' {
load_video
insmod gzio
insmod part_msdos
insmod xfs
set root='hd0,msdos6'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos6 --hint-efi=hd0,msdos6 --hint-baremetal=ahci0,msdos6 --hint='hd0,msdos6'  d1a621a8-a3ef-427e-9094-16e45c9e986e
else
  search --no-floppy --fs-uuid --set=root d1a621a8-a3ef-427e-9094-16e45c9e986e
fi
linux16 /vmlinuz-0-rescue-0207c6e32eb942c3bbdb027fade548cb root=/dev/mapper/cl-root ro crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet
initrd16 /initramfs-0-rescue-0207c6e32eb942c3bbdb027fade548cb.img
}
### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###


### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###


### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###


### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###


### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###


================================================================================

6.3、Grub2.00不同种功能实现方式

Grub可以引导多种系统及介质,具体详见 GRUB2配置文件"grub.cfg"详解(GRUB2实战手册)作者:金步国
  1. Grub可以引导WindowsNT x.x
  2. Grub可以引导ISO镜像,需要根据镜像内系统的不同,修改相关参数。
  3. Grub可以通过网络进行安装系统
BIOS启动ISO
menuentry '系统救援(WinPE)' --users=root {
linux16  $prefix/memdisk iso raw
initrd16 /os/WinPE.iso
}
UEFI启动IOS
menuentry '系统救援(WinPE)' --users=root {
chainloader /os/bootmgfw.efi
}
硬盘安装Linux
menuentry 'Gentoo LiveCD [root/123]' --users=root {
linux /os/gentoo/gentoo cdroot looptype=squashfs loop=/os/gentoo/image.squashfs rootwait doscsi nodmraid nokeymap docache dosshd scandelay slowusb passwd=123
initrd /os/gentoo/gentoo.igz
}
另一种硬盘安装Linux
menuentry 'Mini Gentoo LiveCD [root/123]' --users=root {
loopback loop0 /os/install-amd64-minimal.iso
linux (loop0)/isolinux/gentoo cdroot isoboot=/os/install-amd64-minimal.iso rootwait doscsi nodmraid nokeymap docache dosshd scandelay slowusb passwd=123
initrd (loop0)/isolinux/gentoo.igz
}
网络安装CentOS7
menuentry '网络安装 CentOS 7.x [只能用于简单以太网环境]' --unrestricted {
loopback loop0 /os/CentOS-7-x86_64-NetInstall-1708.iso
linux (loop0)/images/pxeboot/vmlinuz ip=dhcp nameserver=223.6.6.6 inst.repo=http://mirrors.aliyun.com/centos/7/os/x86_64/ rootwait inst.lang=zh_CN.UTF-8
initrd (loop0)/images/pxeboot/initrd.img
}
#[假定'/os/CentOS-7-x86_64-Minimal-1708.iso'所在分区的卷标是'GRUB2']
#这里的方法也适用于 CentOS-7-x86_64-DVD-1708.iso 与 CentOS-7-x86_64-Everything-1708.iso
menuentry '硬盘安装 CentOS 7.4 [最小安装]' --unrestricted {
loopback loop0 /os/CentOS-7-x86_64-Minimal-1708.iso
linux (loop0)/isolinux/vmlinuz inst.repo=hd:LABEL=GRUB2:/os/CentOS-7-x86_64-Minimal-1708.iso rootwait inst.lang=zh_CN.UTF-8 #inst.repo指定从本地查找ISO镜像文件
initrd (loop0)/isolinux/initrd.img
}

七、Grub4Dos

GRUB4DOS是一个优秀的双(多)系统引导软件,使用GRUB4DOS可以很方便的引导各种操作系统,比如DOS、Windows、 Linux等。

7.1、典型的menu.lst

default 0
timeout 10

title Resident mode - All your data and apps are saved
find --set-root /RemixOS/kernel
kernel /RemixOS/kernel root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive quiet SERIAL=random logo.showlogo=1 SRC=RemixOS/ DATA= CREATE_DATA_IMG=1
initrd /RemixOS/initrd.img
boot

7.2、menu.lst命令索引

命令索引
  blocklist 输出文件的块清单表达法。
  boot 引导已加载的操作系统或扇区链式加载器。
  bootp 通过BOOTP初始化网络设备。
  cat 显示指定文件的内容。
  cdrom 初始化或者停止所有的 ATAPI CDROM 设备。
  chainloader 加载扇区链式加载器。
  cmp 比较两个文件, 并且报告两者之间的差异。
  color 改变菜单的颜色。
  configfile 将指定文件作为配置文件予以加载。
  debug 打开/关闭调试模式。
  default 把 NUM 项菜单设为缺省值。
  device 声明BIOS驱动器对应的实际物理设备。
  dhcp 通过DHCP初试化网络设备。
  splashimage 图形模式下载入背景图片文件。
  foreground 设置图形模式下的前景色。
  background 设置图形模式下的背景色。
  clear 清屏。
  displayapm 显示 APM BIOS 的相关信息。
  displaymem 显示 GRUB 所判断到的当前系统的内存分布,包括所有物理内存区域。
  displaymem 显示诸多文件的内容。
  embed 如果设备是个驱动器, 则将Stage 1.5嵌入到主引导扇区之后。
  fallback 如果调用当前的菜单项时出现错误,则跳转到 NUM 项后重试。
  commandline 进入命令行方式。
  find 在所有分区上查找文件名, 并显示包含该文件的设备。
  fstest 切换文件系统的试验模式。
  geometry 输出驱动器的相关信息。
  halt 关闭系统(计算机)。
  help 显示内部命令的帮助信息。
  hiddenmenu 隐藏菜单。
  hide 通过在分区类型上置隐藏标志,隐藏指定分区。
  ifconfig 指定 IP 地址, 子网掩码, 网关和服务器地址。不带参数时,将显示当前的网络配置。
  impsprobe 探测 Intel 多处理器规范 1.1/1.4 配置表并使所找到的各处理器启动进入闭循环。
  initrd 加载Linux格式的初始化虚拟盘, 并设置必要的参数。
  install 安装STAGE1到指定设备上,安装加载STAGE2需要的块列表到STAGE2上。
  ioprobe 侦测指定设备的 I/O 端口号。
  kernel 尝试载入主引导影像文件(Linux内核格式)。
  lock 如果用户未被认证,则终止命令的执行。
  makeactive 将 root 设备置为活动分区。
  map 对设备进行映射。
  md5crypt 产生一个 MD5 格式的密码。
  module 对多重启动影像, 加载启动模块文件 (不处理该文件的内容, 用户必须自己确定核心的要求)。
  modulenounzip 与 'module' 类似, 但是禁用了自动解压缩。
  pager 没有参数时,切换页模式。
  partnew 创建一个新的主分区。
  parttype 改变指定分区(PARTITION)的分区类型(TYPE)。
  password 设置密码。
  pause 终止命令的运行,并给出一段信息。任意键按下后,将继续。
  quit 从 GRUB 命令行中退出。
  rarp 用 RARP 初始化网络设备。
  read 从内存的指定位置读取一个 32-bit 的值,并以十六进制形式显示出来。
  write 写一个 32 位的值 VAL 到内存地址 ADDR。
  reboot 重启系统(计算机)。
  fontfile 指定中文字体文件,并切换到中文显示方式。
  root 设置根分区。
  rootnoverify 类似`root'指令, 但不测试安装该分区。
  savedefault 将当前项设置为默认的引导项。
  serial 初始化一个串口设备。
  setkey 改变键盘映射关系。
  setup 自动安装GRUB.
  terminal 选择一个终端。
  terminfo 指定终端的功能。
  testload 以多种不同的方式读取文件(由FILE指定)的整个内容,并予以比较,以测试文件系统的代码。
  testvbe 测试所指定(MODE)的 VBE 模式。
  setvbe 为后续的每个kernel命令行设置VBE模式。
  tftpserver 指定 TFTP 服务器的 IP 地址。
  timeout 设置在自动启动缺省菜单前所等待的秒数。
  title 命名菜单项。
  unhide 通过清除隐藏标志,解除指定分区(PARTITION)的隐藏。
  uppermem 强制指定仅有(KBYTES) KB 的上位内存。
  vbeprobe 侦测 VBE 的信息。

7.3、menu.lst添加各种系统引导

#引导Android系统
title Resident mode - All your data and apps are saved
find --set-root /RemixOS/kernel
kernel /RemixOS/kernel root=/dev/ram0 androidboot.hardware=remix_cn_x86_64 androidboot.selinux=permissive quiet SERIAL=random logo.showlogo=1 SRC=RemixOS/ DATA= CREATE_DATA_IMG=1
initrd /RemixOS/initrd.img
boot

#引导XP
itle 启动 Windows XP 
chainloader /ntldr  

#引导Windows8
title 
启动 Windows 8 
chainloader /bootmgr


猜你喜欢

转载自blog.csdn.net/xinlan3618/article/details/78860317