一、Linux引導和啟動流程
概述,計算機電源接通后通過BISO之后,沒有問題,就會去硬盤上找到MBR(Main Boot Record 主引導記錄區)位於整個硬盤的0磁道0柱面1扇區,它記錄着主引導記錄中包含了硬盤的一系列參數和一段引導程序,其中的硬盤引導程序的主要作用是檢查分區表是否正確並且在系統硬件完成自檢以后引導具有激活標志的分區上的操作系統,並將控制權交給啟動程序(GRUB)。GRUB啟動引導器是計算機啟動過程中運行的第一個真正的軟件,GRUB負責加載啟動硬盤分區中的操作系統,之后就是操作系統的事情了,系統會啟動第一個進程init,然后去讀取initab配置文件,該文件的內容定義了系統啟動時的配置信息,有了這些信息,系統就會讀取相應的運行級別下的腳本命令,啟動系統。如圖:
下面詳細介紹上圖中的每個步驟:
1.BISO自檢
計算機在接通電源之后,首先由BISO進行自檢,然后依據BISO內設置的引導順序從硬盤、軟盤或CDROM中讀入“引導塊”。在PC中,引導LINUX的是從BISO中的0xFFFF0開始的。BISO的第一個步驟就是加電自檢,對硬件進行檢測。第二個步驟就是進行本地設備的枚舉和初始化。給定BISO功能的不同用法之后,BISO由兩部分組成:POST代碼和運行時服務。 當POST完成之后,它從內存中清理出來,但是BISO服務保留在內存中,目標操作系統可以使用這些服務。要引導一個操作系統,BISO運行時會按照CMOS設置的順序來搜索處於活動狀態並且可以引導的設備。引導的設備可以使軟盤、CD-ROM、硬盤上的某個分區、網絡上的某個設備、甚至是USB閃存。通常情況下,Linux是從硬盤上引導的,其中主引導記錄(MBR)中包含主引導加載程序。當MBR被加載到內存中,BISO就會將控制權交給MBR。
2.MBR
MBR(Master Boot Recorder),我們稱之為主引導記錄。BIOS是怎樣尋找可啟動設備的呢?我們知道在分區時,硬盤的第一塊扇區512個字節就是存放的MBR,如果該設備是可啟動設備,那么該扇區的最后兩個字節肯定是55/AA,所以此時在尋找可啟動設備時,如果發現該設備的最后兩個字節是這個,那么該設備就是可啟動設備。BIOS在找到可啟動設備以后就會執行其引導代碼,因為MBR占據了第一塊扇區的512字節,分區表占用了 16*4 =64字節,再加上最后兩個標志字節,所以MBR的引導代碼就是MBR的前446個字節,當然這446個字節太小了,並不能完成整個操作系統的引導程序,所以這446個字節里面可能存放的就是啟動引導程序的一些代碼。
3.啟動GRUB
GRUB是引導加載程序,將引導操作系統,當機器引導它的操作系統時,BISO就會讀取引導介質上最前面的扇區,即MBR。多說一點:這里的扇區中:MBR只占用了其中的446個字節,另外的64個字節交給了DPT(Disk Partition Table硬盤分區表),最后兩個字節“55,AA”是分區的結束標志。下文有專門講解GRUB。
4.加載內核
當內核映像被加載到內存之后,內核階段就開始了。內核映像不是一個可執行的內核,是一個壓縮過的內核映像。通常是一個zImage(壓縮映像,小於512)或bzImage(大壓縮映像,大於512) ,它是使用zIlb進行壓縮的。在這個內核映像前面是一個例程,它實現少量硬件設置,並對映像中包含的內核進行解壓,然后將其放入高端的內存中,如果有出事換RAM磁盤映像,就會將她移動到內存中,並標明以后使用。然后該例程會調用內核,並開始啟動內核引導的過程。
在GRUB命令行中,可以使用initrd映像引導一個特定的內核:
gurb> kernel /bzImage-2.6.14.2
輸出: [Linux-bzImage,setup=0x1400,size=0x29672e]
gurb> initrd /initrd-2.6.14.2.img
輸出: [Linux-initrd @ 0x5f13000, 0xcc199 bytes]
grub> boot
輸出:Uncompressing Linux ... Ok ,booting the kernel
如果你不知道引導的內核名稱,只需要使用斜線(/),然后按下“Tab”鍵即可。GURB會顯示內核和initrd映像列表。Linux系統的內核都是存放在/boot目錄下:
例如,在boot目錄下執行命令
ls -l vmlinuz-2.6.32-358.el6.x86_64
便會輸出內核信息:
-rwxr-xr-x. 1 root root 4043888 Feb 22 08:56 vmlinuz-2.6.32-358.el6.x86_64
操作系統在加載內核時的時候通常還會去加載內核模塊打包文件:/boot/initramfs-2.6.32-358.el6.x86_64.img ;我們在系統啟動完后通過 dmesg 命令可以查看本次啟動時操作系統的內核輸出信息,這樣可以操作系統內核出現問題時對其進行錯誤排查:

[root@XXX boot]# dmesg Initializing cgroup subsys cpuset Initializing cgroup subsys cpu Linux version 2.6.32-358.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 2013 Command line: ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet KERNEL supported cpus: Intel GenuineIntel AMD AuthenticAMD Centaur CentaurHauls BIOS-provided physical RAM map: BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) BIOS-e820: 0000000000100000 - 00000000207f0000 (usable) BIOS-e820: 00000000207f0000 - 0000000020800000 (ACPI data) BIOS-e820: 00000000fffc0000 - 0000000100000000 (reserved) DMI 2.5 present. SMBIOS version 2.5 @ 0xFFF60 DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 e820 update range: 0000000000000000 - 0000000000001000 (usable) ==> (reserved) e820 remove range: 00000000000a0000 - 0000000000100000 (usable) last_pfn = 0x207f0 max_arch_pfn = 0x400000000 MTRR default type: uncachable MTRR variable ranges disabled: x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 CPU MTRRs all blank - virtualized system.
我們看到其輸出了非常多的信息,都是操作系統啟動時,內核的輸出信息。當然我們可以在 /var/log 目錄下發現也有一個 dmesg 文件,這個文件存放的內容和通過 dmesg 命令輸出的內容是一模一樣的
[root@XXX ~]# ls -l /var/log/dmesg -rw-r--r--. 1 root root 21190 May 19 13:06 /var/log/dmesg
5.init
init進程是系統所有進程的起點,內核在完成核內引導以后,即在本線程空間內加載init程序,它的進程號是1。我們可以通過 ps -aux | more 命令來看一下
[root@XXX ~]# ps -aux | more Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 19348 1464 ? Ss 13:05 0:01 /sbin/init
我們看到操作系統運行的第一個進程就是 init 進程,這個進程在啟動以后就會一直運行,直到系統退出關機。
init是所有進程的發起者和控制者,因為在任何基於UNIX的系統中,它都是第一個運行的進程,所以init進程的編號PID永遠是1.如果init出現了問題,系統的其余部分也就隨之不可用。init進程有以下兩個作用:
1/ 是扮演終結父進程的角色。因為init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父進程的子進程就都會以init作為它們的父進程。
2/ 是在進入某個特定的運行級別時運行相應的程序,以此對各種運行級別進行管理。它的這個作用是由/etc/inittab文件定義的。
我們通常將運行級別設置成3或者5,運行級別3和5的唯一不同,就是是否啟動時擁有圖形界面。在生產環境下我們通常將其設置成3,直接進入到命令行終端模式,我們可以通過修改 /etc/inittab 這個文件來修改系統默認的運行級別:

[root@XXX ~]# cat /etc/inittab # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault:
/inittab 文件詳解 文件格式:id:run-levels:action:process,共包含4項,用冒號分隔
id 標識符,一般為兩位字母或數字,該標識符唯一,在配置文件中不能重復。 run-level 指定系統運行級,即執行登記項的init級別。用於指定相應的登記項適用於哪一個運行級,即在哪一個運行級中被處理。如果該字段為空,那么相應的登記項將適用於所有的運行級。在該字段中,可以同時指定一個或多個運行級,其中各運行級分別以數字0 1 2 3 4 5 6或字母a、b、c 表示,且無需對其進行分隔。 Linux有7個運行級,如下: 0-halt 關機,讓init關閉所有進程並關機 1-Single user mode 單用戶字符界面,通常又稱為s或S 2-Multiuser,without NFS 不具備網絡文件系統功能的多用戶字符界面 3-Full multiuser mode 具備網絡文件系統功能的多用戶字符界面 4-unused 保留不用 5-X11 具備網絡功能的圖形用戶界面 6-reboot 關閉所有運行的進程並重新啟動系統 除此之外還有ABC三個運行級別,但在Linux都沒有意義。
action 指定運行動作,用於指定init(M)命令或進程對相應進程(在“process”字段定義)所實施的動作,有以下幾種:
行為 | 描述 |
respawn
|
一旦第4項指定的process命令中止,便重新運行該命令。 |
wait
|
執行第4項指定的process,並等其結束后再運行其它命令。
|
once
|
執行第4項指定的process,不等待它執行完成,繼續運行其它命令。
|
boot
|
不論在哪個執行等級,系統啟動時都會運行第4項指定的process。
|
bootwait
|
不論在哪個執行等級,系統啟動時都會運行第4項指定的process,且一直等它執行完備。
|
off
|
關閉任何動作,相當於忽略該配置行。
|
ondemand
|
進入ondemand執行等級時,執行第4項指定的process。
|
initdefault
|
系統啟動后進入的執行等級,該行不需要指定process。
|
sysinit
|
不論在哪個執行等級,系統會在執行boot及bootwait之前執行第4項指定的process。
|
powerwait
|
當系統的供電不足時執行第4項指定的 process,且一直等它執行完畢。
|
powerokwait
|
當系統的供電恢復正常時執行第4項指定的process,且一直等它執行完畢。
|
powerfailnow
|
當系統的供電嚴重不足時執行第4項指定的process。
|
powerfail
|
當出現電源錯誤時執行第4項指定的process命令,不等待其結束。
|
ctrlaltdel
|
當用戶按下【Ctrl+Alt+Del】時執行第4項指定的 process。
|
kbrequest
|
當用戶按下特殊的組合鍵時執行第4項指定的process,此組合鍵需在keymaps文件定義。
|
process 指定要運行的Shell腳本/命令。
其實在/etc目錄下還有一個init目錄,里面存放的是init的其它一些配置文件

[root@XXX ~]# cd /etc/init [root@XXX init]# ll total 68 -rw-r--r--. 1 root root 260 Jan 9 19:13 control-alt-delete.conf -rw-r--r--. 1 root root 130 Jun 22 2012 init-system-dbus.conf -rw-r--r--. 1 root root 316 Jan 9 19:13 kexec-disable.conf -rw-r--r--. 1 root root 409 Jan 9 19:13 plymouth-shutdown.conf -rw-r--r--. 1 root root 217 Jan 9 19:13 prefdm.conf -rw-r--r--. 1 root root 358 Jan 9 19:13 quit-plymouth.conf -rw-r--r--. 1 root root 281 Jan 9 19:13 rc.conf -rw-r--r--. 1 root root 909 Jan 9 19:13 rcS.conf -rw-r--r--. 1 root root 283 Jan 9 19:13 rcS-emergency.conf -rw-r--r--. 1 root root 580 Jan 9 19:13 rcS-sulogin.conf -rw-r--r--. 1 root root 2915 Aug 23 2010 readahead-collector.conf -rw-r--r--. 1 root root 1559 Aug 23 2010 readahead.conf -rw-r--r--. 1 root root 726 Aug 23 2010 readahead-disable-services.conf -rw-r--r--. 1 root root 1162 Jan 9 19:13 serial.conf -rw-r--r--. 1 root root 643 Jan 9 19:13 splash-manager.conf -rw-r--r--. 1 root root 329 Jan 9 19:13 start-ttys.conf -rw-r--r--. 1 root root 198 Jan 9 19:13 tty.conf
我們可以看到,這里面有許多的配置文件,我們可以根據自己的需要修改其里面的內容,這樣init進程啟動時就會去執行里面的功能。
我們通過 runlevel 命令可以查看我們當前的以及上一次的啟動級別:
[root@XXX init]# runlevel N 5
N表示沒有上一個啟動級別,5表示當前的啟動級別.
通過init命令我們可以修改當前的系統運行級別,例如輸入 init 3,此時操作系統就會進入到命令行模式
通過statx命令 或者init 5 命令就可以回到運行級別5的模式;
每個運行級別啟動時的對應啟動服務都是保存在了 /etc/rc.d/rc[0123456].d中,例如我們當前的運行級別是5,則操作系統的啟動服務就是在 /etc/rc.d/rc5.d這個目錄下,里面都是運行級別5所需啟動的服務。
[root@XXX rc.d]# ls
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local
本段內容摘自並修改了xiaoluo501395377的Linux學習之CentOS(二十一)--Linux系統啟動詳解,十分感謝!!!
6.inittab配置文件
通過/etc/inittab文件進行初始化,Init的工作是根據/etc/inittab來執行相應的腳本,進行系統初始化,如設置鍵盤、字體、裝載模塊,設置網絡等。
6.1 /etc/rc.d/rc.sysinit 在init的配置文件中有如下一行:
si::sysinit:/etc/rc.d/rc.sysinit
rc.sysinit是由init執行的第一個腳本,它主要完成一些系統初始化的工作。rc.sysinit是每一個運行級別都要首先運行的重要腳本,它主要完成的工作有:激活交換分區、檢查磁盤、加載硬件模塊以及其他一些需要優先執行的任務。/etc/rc.d/ rc.sysinit主要完成各個運行模式中相同的初始化工作。包括:設置初始的$PATH變量;配置網絡;為虛擬內存啟動交換;調協系統的主機名;檢查root文件系統,以進行必要的修復;檢查root文件系統的配額;為root文件系統打開用戶和組的配額;以讀/寫的方式重新裝載root文件系統;清除被裝載的文件系統表/etc/mtab;把root文件系統輸入到mtab;使系統為裝入模塊做准備;查找模塊的相關文件;檢查文件系統,以進行必要的修復;加載所有其他文件系統;清除/etc/mtab、/etc/fastboot和/etc/nologin;刪除UUCP和lock文件;刪除過時的子系統文件;刪除過時的pid文件;設置系統時鍾;激活交換分區;初始化串行端口;裝入模塊。
6.2 /etc/rc.d/rcX.d/[KS]
在rc.sysinit執行后,將返回init,繼續執行/etc/rc.d/rc程序。以運行級別5為例,init將執行配置文件inittab中的以下內容:
15:5:wait:/etc/rc.d/rc 5
這一行表示以5為參數運行/etc/rc.d/rc,/etc/rc.d/rc是一個shell腳本,它接受5作為參數,去執行/etc/rc.d/rc5.d目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d目錄中的啟動腳本實際上都是一些鏈接文件,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都在/etc/rc.d/init.d目錄下。而這些rc啟動腳本有着類似的用法,它們一般能接受stat、stop、restart、status等參數。/etc/rc.d/rc5.d中的rc啟動腳本通常是以K或S開頭的鏈接文件,以S開頭的啟動腳本將以start參數來運行。如果發現相應的腳本也存在K打頭的鏈接,而且已經處於運行狀態了(以/var/lock/subsys下的文件作為標志),則將首先以stop為參數停止這些已經啟動了的守護進程,然后再重新運行。這樣做是為了保證當init改變運行級別時,所有相關的守護進程都將重啟。至於在每個運行級中將運行哪些守護進程,用戶可以通過chkconfig來自行設定。
常見的守護進程如下:

amd:自動安裝NFS守護進程。 apmd:高級電源管理守護進程。 arpwatch:記錄日志並構建一個在LAN接口上看到的以太網地址和IP地址對應的數據庫。 outofs:自動安裝管理進程automount,與NFS相關,依賴於NIS。 crond:Linux系統下計划任務的守護進程。 named:DNS服務器。 netfs:安裝NFS、Samba和Netware網絡文件系統。 network:激活已配置網絡接口的腳本程序。 nfs:打開NFS服務。 portmap:RPCportmap管理器,它管理基於RPC服務的連接。 sendmail:郵件服務器sendmail。 smb:Samba文件共享/打印服務。 syslog:一個讓系統引導時啟動syslog和klogd系統日志守候進程的腳本。 xfs:X Window字型服務器,為本地和遠程X服務器提供字型集。 Xinetd:支持多種網絡服務的核心守護進程,可以管理wuftp、sshd、telnet等服務。
這些守護進程啟動完畢,rc程序也就執行完了,然后又返回init繼續下一步。
6.3 執行/etc/ec.d/rc.local
RHEL 4中的運行模式2、3、5都把/etc/rc.d/rc.local做為初始化腳本中的最后一個,所以用戶可以自己在這個文件中添加一些需要在其他初始化工作之后、登錄之前執行的命令。在維護Linux系統時一般會遇到需要系統管理員對開機或關機命令腳本進行修改的情況。如果所做的修改只在引導開機的時候起作用,並且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個命令腳本程序是在引導過程的最后一步被執行的。
7.執行/bin/login程序
login程序會提示使用者輸入賬號及密碼,接着編碼並確認密碼的正確性,如果賬號與密碼相符,則為使用者初始化環境,並將控制權交給shell,即等待用戶登錄。login會接收mingetty傳來的用戶名作為用戶名參數,然后login會對用戶名進行分析。如果用戶名不是root,且存在/etc/nologin文件,login將輸出nologin文件的內容,然后退出。這通常用來在系統維護時防止非root用戶登錄。只有在/etc/securetty中登記了的終端才允許root用戶登錄,如果不存在這個文件,則root可以在任何終端上登錄。/etc/usertty文件用於對用戶作出附加訪問限制,如果不存在這個文件,則沒有其他限制。在分析完用戶名后,login將搜索/etc/passwd以及/etc/shadow來驗證密碼以及設置賬戶的其他信息,比如:主目錄什么、使用何種shell。如果沒有指定主目錄,則將主目錄默認設置為根目錄;如果沒有指定shell,則將shell類型默認設置為/bin/bash。
Login程序成功后,會向對應的終端再輸出最近一次登錄的信息(在/var/log/lostlog中有記錄),並檢查用戶是否有新郵件(在/usr/spool/mail的對應用戶名目錄下),然后開始設置各種環境變量。對於bash來說,系統首先尋找/etc/profile腳本文件並執行它;然后如果用戶的主目錄中存在.bash_profile文件,就執行它,在這些文件中又可能調用了其他配置文件,所有的配置文件執行后,各種環境變量也設好了,這時會出現大家熟悉的命令行提示符,至此整個啟動過程就結束了。
休息一下……明天再看
二、Linux的GRUB詳解
1.GRUB簡介
現在 GRand Unified Boot loader 已經取代LILO在引導加載程序方面的統治地位,GNU GRUB基於原來的GRUB程序,正在有自由軟件基金會進行積極的開發;GRUB不僅可以對各種發行的版本Linux進行引導,也能夠正常引導PC上其他常見的操作系統。啟動引導器是計算機啟動過程中運行的第一個真正的軟件,計算機啟動時在通過BISO自檢后讀取並運行硬盤主引導扇(MBR)中的啟動引導器程序,啟動引導器在負責加載啟動硬盤分區中的操作系統。如果啟動引導器不能正常工作,將導致操作系統不能正常啟動,從而整個計算機癱瘓。通常,每個操作系統在安裝過程中都要將自帶的啟動器寫在硬盤(MBR),以便能過進行自身的引導。
2.GRUB引導系統
兩種方式:
1,直接引導方式
GRUB同時支持linux,openbsd,freebsd,netbsd等系統
通常步驟如下:
(1)通過'root'指令來設置GRUB的主設備指向操作系統映像文件所存儲的地方
(2)通過'kernel'命令來載入該操作系統的核心映像.如需參數,在后面添加
(3)如果需要模塊,通過'module'命令來加載模塊
(4)運行命令'boot'啟動系統
2,鏈式引導方式
如果你要啟動一個不被GRUB直接支持的操作系統(例如:xp),可以通過鏈式引導啟動一個操作系統.將
開機的指針直接指向裝有該操作系統分區的bootsector(即該分區的第一扇區),使其激活.
主要步驟如下:
(1)通過'rootnoverify'命令設置GRUB的主設備指向一個扇區(同'root'區別是不掛入分區)
(2)通過'makeactive'命令來設置在扇區上的'active’標志位
(3)通過'chainloader' 命令來加載引導程序.'+1'表明GRUB需要從起始分區讀一個扇區
(4)運行命令'boot'啟動系統
3.GURB的界面
啟動菜單界面:當你正確安裝Linux之后,就可以從硬盤引導系統進入GRUB;
菜單編輯界面:“e”進入該界面;
GURB的命令行方式:有兩種方法進入命令行界面;
一種是從GURB啟動菜單進入命令行界面,
另一種從shell狀態下使用grub命令進入命令行界面(有限制);
4.GURB的配置文件gurb.conf
默認的配置文件“boot/gurb/gurb.conf”,在GURB成功安裝到硬盤主引導扇區(MBR)后,只要編輯該文件就可以實現對GRUB的配置,不需要重新寫GRUB到MBR。為了保持與其他系統的兼容性和文件的一致性,系統分別在“boot/gurb”和“/etc“兩個目錄中建立了名為gurb.conf的符號鏈接文件,指向真正的配置文件”/boot/gurb/menu.lst“。首先來看一下/boot/grub/menu.lst中的內容:

# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You do not have a /boot partition. This means that # all kernel and initrd paths are relative to /, eg. # root (hd0,0) # kernel /boot/vmlinuz-version ro root=/dev/hda1 # initrd /boot/initrd-version.img #boot=/dev/hda default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title Fedora Core (2.6.18-1.2798.fc6) root (hd0,0) kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet selinux=0 initrd /boot/initrd-2.6.18-1.2798.fc6.img title Windows XP rootnoverify (hd0,3) chainloader +1
default 0:grub的默認啟動項
timeout 5: 指定一個超時值,單位為秒,若用戶在grub等待的超時時間范圍內沒有任何操作,則啟動默認項
hidemenu: 開機時是否顯示多選項菜單,若被設置則啟動的時候默認不顯示選項菜單,否則grub啟動時自動顯示選項菜單
color white/blue: 指定grub菜單的默認顏色
password --md5 $1$etSG6$LlxT8irAfAv5vYQn6tZUw1: 指定一個密碼,啟用grub的密碼保護,這個命令需要放置在title下第一行。為安全起見,一般使用md5值,這個值可以使用grub-md5-crypt或者在grub shell中使用md5crypt生成,也可以直接使用字母或者數字。當要修改加密的啟動項時,需要按p鍵,然后輸入密碼。需要注意的是為了放置點擊e,進入編輯模式,然后刪除密碼字段,再按下b啟動系統,這時可以將密碼設置設置在整體上,而不是放置在某一個title下,相對應的title下增加一行lock <==多了死鎖的功能
產生MD5密碼命令示例如:
#grub-md5-crypt Password: <==輸入密碼 Retype password: <==再輸入一次 $1$kvlI0/$byrbNgkt/.REKPQdfg287. <==這就是產生的md5 密碼!
root:根文件系統的位置。
ro:可讀寫,當啟動分區是JFS等格式時需要使用此參數使得系統可以在啟動是存放日志。
quiet:安靜模式,不顯示核心檢測的信息。
splash:顯示徽標。
locale:指定locale
vga:指定終端的顯示模式。
chainloader +1 :告訴GRUB使用一個鏈式加載程序來加載這個OS,加載Windows時需要這個選項。
5.GURB的引導過程
與LILO類似,GRUB在初始加載時,從MBR加載第一階段程序,加載后。它進入第一階段和第二階段引導加載程序之間的中間階段。之所以存在中間階段是為了能夠對/boot/gurb中的GRUB配置文件進行常規的文件系統訪問,而不是訪問磁盤塊。然后進入引導加載程序的第二階段,GRUB加載gurb.conf文件。現在應該能夠看到GRUB的圖形界面;
在GRUB圖形界面中,按下任何鍵都會停止超時的計時。然后按下"P"鍵,可以輸入GRUB密碼,並獲得對GRUB交互引導選項的完全訪問權限。按下以下任何一個鍵,應該能夠使用三個選項之中的一個:
* 要在引導之前編輯命令,請按下"E"鍵。這將讓用戶能夠為當前選中的OS編輯具體的選項。GRUB會顯示出與那個OS的引導相關的選項,然后可以恰當地進行編輯。當為root文件系統指定了錯誤的HDD時,這尤其有用。如果需要單用戶模式訪問機器(不需要指定密碼就能夠讓用戶獲得root訪問權限),那么在GRUB主屏幕上選擇LINUX OS。然后與前面一樣,按下"E"鍵 ,並移到內核那一行。然后在那一行最后添加single,並按下"B"鍵來使用修改過的gurb.conf進行引導。在編輯模式下所做的任何修改都不會保存到gurb.conf文件中。在此選項下可進入單用戶模式,去修改密碼,單用戶模式必須在單機操作,不具備網絡遠程操作功能。
* 要修改內核參數,請按下"A"鍵。如果你是一位經驗豐富的Linux用戶,可以根據需要調整內核參數。
* 要獲得類似於BASH的命令行界面,請按下"C"鍵。這個小型的命令行界面允許你在系統中查找GRUB配置文件,加載另外的配置文件,編輯配置文件中的行,以及直接輸入GRUB命令。如果配置的變化(比如刪除了某個分區)讓系統無法引導,那么可能會用到這個界面。如果需要將系統引導為但用戶模式,或者要讓運行級別為3而不是普通的運行級別,也可能會用到它。
6、GRUB命令參考

一、菜單命令 菜單命令只能用於grub配置文件的全局配置部分,不能用在grub命令行交互界面,菜單命令在配置文件中應放在其它命令之前。 1、default //設置默認啟動的菜單項 2、fallback //設置啟動某菜單項失敗后反回的菜單項 3、hiddenmenu //隱藏菜單界面 4、timeout //設置菜單自動啟動的延時時間 5、title //開始一個菜單項 二、常規命令 常規命令可以應該於配置文件和grub命令行交互界面,可使用的常規命令有 1、bootp //通過bootp初始化網絡設備 2、color //設置菜單界面的顏色 3、device //指定設備文件作為驅動器 4、dhcp //通過DHCP初始化網絡設備 5、hide //隱藏某分區 6、ifconfig //手工配置網絡設備 7、pager //改變內部頁程序的狀態 8、partnew //新建一個主分區 9、parttype //改變分區的類型 10、password 為菜單界面設置口令 11、rarp //通過RARP初始化網絡設置 12、serial //設置串口設備 13、setkey //設置鍵盤映射 14、splashimage //設置GRUB啟動時的背景圖片文件 15、termainal //選擇終端類型 16、tftpserver //指定TFTP服務器 17、unhide //還原某隱藏分區 三、命令行和菜單項命令 命令行和菜單項命令可應該於GRUB配置文件的菜單項設置中,也可以用在GRUB命令交互界面。 1、bolcklist //顯示某文件所在分區位置(block list notation) 2、boot //啟動操作系統 3、cat //顯示文件內容 4、chainloader //把啟動控制權軟交給另外的啟動引導器 5、cmp //比較兩個文件 6、configfile //加載已存在的GRUB配置文件 7、debug //設置為debug模式 8、displayapm //顯示APM BIOS信息 9、displaymem //顯示內存配置 10、embed //嵌入Stage 1.5文件 11、find //查找包括某文件的所有設備 12、fstest //測試文件系統 13、geometry //顯示某驅動器的物理信息 14、halt //停止計算機運行(軟件關機) 15、help //顯示GRUB的命令幫助信息 16、impsprobe //查詢對稱多處理器(SMP)的信息 17、initrd //加載initrd文件 18、install //安裝GRUB 19、ioprobe //查詢某驅動器的輸入輸出(I/O)端口 20、kernel //引導操作系統內核 21、lock //鎖定某GRUB導菜單項,使其輸入密碼后才可啟動 22、makeactive //激活某主分區 23、map //虛擬映射某驅動器 24、md5crypt //使用MD5加密口令 25、module //加載模塊 26、modulenounzip //加載模塊不進行解壓 27、pause //暫停並等待按鍵 28、quit //退出GRUB 29、reboot //重新啟動計算機 30、read //讀取內存中的內容 31、root //設置GRUB的root設備 32、rootnoverify //設備GRUB的root設備但不裝載文件系統 33、savedefault //保存當前的啟動菜單項為默認啟動 34、setup //自動安裝GRUB 35、testload //從文件系統中測試讀取某文件 36、testvbe //測試VESA BIOS EXTENSION 37、uppermem //強制設置主機上位內存的大小 38、vbeprobe //查詢VESA BIOS EXTENSION信息