鍍金池/ 教程/ Linux/ Boot Loader
Linux 學(xué)習(xí)記錄--開(kāi)機(jī)掛載錯(cuò)誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡(jiǎn)介
Linux 學(xué)習(xí)記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學(xué)習(xí)記錄--文件權(quán)限
Linux 命令縮寫(xiě)
命令與文件的查詢
文件|目錄的默認(rèn)權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學(xué)習(xí)記錄--程序編譯與函數(shù)庫(kù)
正則表達(dá)式與其應(yīng)用
關(guān)機(jī)相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進(jìn)程控制
文件系統(tǒng)簡(jiǎn)單操作
磁盤(pán)掛載與卸載
有名管道通訊
磁盤(pán)分區(qū),格式化與檢驗(yàn)
工作管理與進(jìn)程管理
匿名管道通訊
Linux 學(xué)習(xí)記錄--啟動(dòng)流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學(xué)習(xí)記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

Boot Loader

Bootloader 的作用是加載內(nèi)核到內(nèi)存,使內(nèi)核開(kāi)始執(zhí)行,Grub 是 linux 上面一個(gè)功能強(qiáng)大的 bootloader,當(dāng)我們登陸系統(tǒng)就會(huì)看到如下界面,它就是 Grub 的 menu.lst,通過(guò)它我們可以選擇不同的系統(tǒng)(多操作系統(tǒng)時(shí))
(這里介紹的是 grub,ubantu 使用的是 grub2,兩者存在很多差異)

http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/1.bmp" alt="" />

功能介紹

menu .list

menu.lst 是 Grub 的開(kāi)機(jī)菜單,里面的配置決定了我們?nèi)ツ睦镒x取內(nèi)核與 initrd

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-371.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317
        initrd /initrd-2.6.18-371.el5.img

default: 默認(rèn)啟動(dòng)項(xiàng)這個(gè)與 title 對(duì)照,menu 中配置了幾個(gè) title,啟動(dòng)菜單就有幾個(gè)選擇,0代表使用第一個(gè) title 內(nèi)容
timeout:啟動(dòng)是的倒數(shù)讀秒操作,-1代表不進(jìn)行倒數(shù)讀秒
splashimage:menu.lst 的背景圖片
hiddenmenu:隱藏菜單
root:代表內(nèi)核文件放置那個(gè)分區(qū),不是根目錄的意思
kernel:后面接內(nèi)核文件名,在后面指定根目錄掛載到那個(gè)分區(qū)
initrd:后面接虛擬文件系統(tǒng)文件名(其實(shí)就是指定它的位置)
(hd num1,num2): hd 代表在 grub 中硬盤(pán)與分區(qū)的代號(hào),num1 代表硬盤(pán)代號(hào)(0開(kāi)啟)。Num2 代表分區(qū)號(hào)(0開(kāi)始).比如:內(nèi)核文件存儲(chǔ)在第一塊硬盤(pán)的 D 分區(qū)(第2個(gè)分區(qū)),可以表示為(hd 0,1)

舉例:menu.lst 配置說(shuō)明

[root@localhost ~]# find / -name vmlinuz-2.6.1*;df 
/boot/vmlinuz-2.6.18-371.el5
文件系統(tǒng)               1K-塊        已用     可用 已用% 掛載點(diǎn)
/dev/sda1               101086     11727     84140  13% /boot

通過(guò)上面我們可以看到內(nèi)核文件存在/boot/vmlinuz-2.6.18-371.el5下,同時(shí)/boot 掛載到硬盤(pán)的第一分區(qū),因此內(nèi)核文件存儲(chǔ)位置可以寫(xiě)成(hd 0,0)

root (hd0,0)
kernel  /vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317
initrd  /initrd-2.6.18-371.el5.img

由于前面指定了 root 了因此后面的 kernel,initrd 只需寫(xiě)接下來(lái)的路徑就可以了如:/vmlinuz-2.6.18-371.el5,接下來(lái)為根據(jù) LABEL 掛載根目錄到分區(qū) root=LABEL=/
同樣上面配置也可以寫(xiě)成這樣

kernel  (hd0,0)/vmlinuz-2.6.18-371.el5 ro root=LABEL=/ rhgb quiet rgb=0x317
initrd  (hd0,0)/initrd-2.6.18-371.el5.img

chain loader 控制權(quán)轉(zhuǎn)移

我們知道 boot loader 裝在 MBR 或者分區(qū)的第1扇區(qū)中,chain loader 功能就是將控制權(quán)交給指定分區(qū)的 bootloader 讓其進(jìn)行加載相應(yīng)的內(nèi)核文件

title /dev/sda1 boot sector
        root (hd0,0)
        chainloader +1

比如我們的 LINUX 系統(tǒng)的 bootloader 裝在了第1個(gè)硬盤(pán)第1個(gè)分區(qū),那 bootloader 的位置就是第1塊硬盤(pán)的第一個(gè)分區(qū)的第一扇區(qū),因此
root (hd0,0)指定分區(qū)與磁盤(pán),這里是第一個(gè)磁盤(pán)的第一個(gè)分區(qū)
chainloader +1 指定為第一扇區(qū)

同樣假如我們 LINUX 系統(tǒng)的 bootloader 再在整個(gè)硬盤(pán)的 MBR 中,那可以這么指定

title   MBR loader
        root (hd0)
        chainloader +1

由于 MBR 位置為硬盤(pán)的一個(gè)扇區(qū),因此
root (hd0)指定第一個(gè)硬盤(pán)
chainloader +1指定為第一扇區(qū)

多系統(tǒng)并存環(huán)境

如果想讓一臺(tái)機(jī)器上存在多個(gè)操作系統(tǒng)可以通過(guò)控制權(quán)轉(zhuǎn)移將控制權(quán)交給指定分區(qū)的 loader 進(jìn)行加載相應(yīng)的操作系統(tǒng)

假如,我的機(jī)器只有一個(gè)硬盤(pán),我想在第1分區(qū)裝 WINXP,第2個(gè)分區(qū)裝 linux,那個(gè)就可以在 menu.list 中設(shè)置2個(gè)選項(xiàng),第1個(gè)選項(xiàng)為 winxp,第2個(gè)選項(xiàng)為 linux,當(dāng)選擇第一個(gè)時(shí)控制權(quán)交給第1分區(qū)的 bootloader,當(dāng)選擇第2分區(qū)時(shí)將控制權(quán)交給第2個(gè)分區(qū)的 bootloader 即 linux 的 loader

但是這里需要先安裝 WINXP 在安裝 LINUX 因?yàn)?window 不具有控制權(quán)轉(zhuǎn)移功能

Grub 安裝

Grub 安裝分為3個(gè)步驟

  1. grup 配置文件安裝
  2. menu.list 文件編輯
  3. grup 主程序安裝到 MBR 或分區(qū)第一扇區(qū)

步驟1:grub 配置文件安裝

語(yǔ)法:grub-install[--root-directory=DIR] 設(shè)備代號(hào)
選項(xiàng)與參數(shù)
--root-directory:當(dāng)指定 DIR 是,grub 配置文件安裝在 DIR/boot/grub
如不指定此屬性,此默認(rèn)安裝在/boot/grub

[root@localhost ~]# grub-install /dev/sda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
# this device map was generated by anaconda
(hd0)     /dev/sda 
[root@localhost lib]# ll /boot/grub/
-rw-r--r-- 1 root root   7584 03-31 10:52 e2fs_stage1_5
-rw-r--r-- 1 root root   7456 03-31 10:52 fat_stage1_5

步驟2:編寫(xiě) menu.list

[root@localhost lib]# vim /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-371.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-371.el5 ro roo
        initrd /initrd-2.6.18-371.el5.img

步驟3:grup 主程序安裝到 MBR 或分區(qū)第一扇區(qū)

Grubshell 的簡(jiǎn)單語(yǔ)法
root(hdx,x):選擇含有 grub 目錄的那個(gè)分區(qū)
find 文件路徑,
find 路徑/stage1 查找是否有安裝信息
find 路徑/vmlinuz…. 查找內(nèi)核文件
setup(hdx,x) 安裝 grub 到分區(qū)的第1扇區(qū)
setup(hd 0) 安裝 grub 到 MBR 中

[root@localhost /]# grub =>進(jìn)入grub shell
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]

grub> root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83

grub> find /vmlinuz-2.6.18-371.el5 
 (hd0,0)

grub> setup (hd0) => 安裝到MBR中
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

grub> setup (hd0,0) 安裝到sector中
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
 Running "install /grub/stage1 (hd0,0) /grub/stage2 p /grub/grub.conf "... succeeded
Done.

grub> quit

忘記 root 密碼解決

http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/2.bmp" alt="" />

開(kāi)機(jī)后按下 e 進(jìn)入 menu.lst 編輯模式

http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/3.bmp" alt="" />

編輯 Kernel 信息。指定為單用戶模式

http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/4.bmp" alt="" />

按 Esc 返回剛才那個(gè)頁(yè)面,按下 b, 此時(shí)系統(tǒng)會(huì)給你個(gè) root 權(quán)限的 shell.使用 passwd 命令修改密碼即可