天天看點

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

一、前言

在了解MBR引導之前,先需要了解讀取MBR之前,機器都幹什麼了。

直接總結其他部落客的文章羅列在此,以便查閱:

首先我們要了解整個啟動過程的輪廓,可以讀下邊這篇文章

計算機的啟動過程(詳細) 

讀完這篇文章,我們可以深入研究一下BIOS在将控制權交給MBR之前的一系列動作,可以讀下邊文章

BIOS啟動過程分析

了解BIOS之後,可以看看MBR的具體結構。

主引導記錄MBR的結構和作用

總結一下:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

二、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 7 Startup

與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:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

Windows 10:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

Windows Recovery Environment:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

RemixOS:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

Windows Resume Object:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

Windows Memory Diagnostic:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

Device Objects:

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.2、Windows XP/2003入口添加

Windows XP/2003入口添加共分為3中模式 1、Partition安裝到硬碟本地,指定啟動磁盤與啟動分區,将會到此分區下查找NTLDR檔案

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

2、Ramdisk為鏡像檔案,加載到記憶體執行,此項需指定Device file,注意檔案名稱前的"\",代表Boot part下的根目錄,具體路徑需根據檔案存儲的實際路徑和檔案名稱,進行定義。RamDisk的identifer必須選擇,為自動生成。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

3、VHD為虛拟硬碟檔案,需指定VHD檔案的路徑及名稱,identifer被{ntldr}代替,其真實的identifer可以在Windows Boot Manager中檢視到。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

DisplayOrder中檢視真實的identifer

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

隻有當在添加一項Windows XP/2003入口,才會直接顯示真實的identifer,如下圖,在上圖中的DisplayOrder中也可以檢視到第二次添加的 Windows XP/2003入口的identifer。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

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

Windows7/8/8.1/10入口添加和WindowsXP/2003入口添加類似,共分為3中模式。Windows7/8/8.1會自動添加Windows Resume Application。

1、Partition安裝到本地硬碟

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

2、Ramdisk虛拟鏡像,注意OS Device,路徑要選擇Boot,代表鏡像加載後的根目錄。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

3、VHD虛拟磁盤

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.4、VHD入口添加

bios引導vhd的時候是通過bootmgr穿透vhd虛拟磁盤直接引導内部的winload.exe,而不是去加載vhd的主引導

VHD入口需要設定ApplicationDevice,還有OSDevice,具體還未經過實踐,兩個位置,那個要填BOOT,那個要填VHD鏡像的路徑。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.5、WIM入口添加

添加WIM如後後,會自動添加一項{ramdiskoptions},在Device objects中需編輯{ ramdiskoptions},為boot.sdi指定正确的路徑,SdiPath可以更改路徑

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos
【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.6、Realmode 入口添加

RealMode,其實是使用bootmgr引導其他引導檔案,屬于二層引導。指定引導檔案的路徑即可。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.7、ramdisk入口添加

此項入口添加不能算作真正的系統入口添加,僅指定了boot.sdi的路徑。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

4.8、Memory Test入口添加

此項是為記憶體檢測程式添加引導的,是否可以更改成其他磁盤管理程式還未測試。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

五、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

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

5.2、添加引導

xorboot可以引導多種系統,最主要的兩個步驟為設定BootType和SystmeType,其他的功能,如隐藏分區控制,啟動密碼,圖形菜單,啟動名稱的設定,根據需要自行設定。 整體步驟,

  1. 設定BootType
  2. 設定SystmeType
  3. 其他功能設定

5.2.1、确定BootType(啟動類型)

xorboot有多種啟動類型,如下

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

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) 啟動CD光牒鏡像檔案

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。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

2、設定各系統的功能,如快捷鍵,分區隐藏。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

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個扇區。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

利用XORBOOT主代碼及輔助代碼存放位置的不同,可以友善地實作與GRUB的雙啟動。安裝XORBOOT至MBR後,其主代碼占用1号扇區, 而将輔助代碼安裝到其它位置,然後安裝Grub4DOS其引導程式占用第0扇區及第2~18扇區共18個扇區的空間。這樣即可實作XORLDR與GRUB的雙啟動。

需要勾選嘗試有限啟動以前的MBR,取消勾選Install MS NT6 MBR to the 2nd sector,否則将擦寫XORBOOT的主代碼。

【BIOS】MBR引導程式類型及詳解一、前言二、MBR的類型三、Windos NT 5.x四、Windos NT 6.x五、XorBoot BIOS版六、Grub2.00七、Grub4Dos

六、Grub2.00

6.1、Grub2.00的啟動流程及檔案組成

GRUB2配置檔案"grub.cfg"詳解(GRUB2實戰手冊)作者:金步國,在此可以檢視基本文法。

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是一個優秀的雙(多)系統引導軟體,使用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