【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解_第1頁
【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解_第2頁
【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解_第3頁
【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解_第4頁
【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】引導(dǎo)加載程序grub詳解

上一章講到,常見的bootloader(引導(dǎo)加載程序)有LILO和grub,LILO有一大缺點,它只能識別0-1023范圍內(nèi)的柱面構(gòu)成的分區(qū)的內(nèi)核文件,故已逐漸被grub取代。Grub(GRandUnifiedBootloader)是一個來自GNU項目的多操作系統(tǒng)引導(dǎo)程序,它負責(zé)加載內(nèi)核并移交控制權(quán)1、Grub版本:

CentOS5、6

Grub0.97

CentOS7

Grub21.962、grub程序由三段組成:

stage1:MBR(0柱面0磁道1扇區(qū))中

stage1_5:MBR隨后的扇區(qū)

stage2:讀取grub.conf配置文件,并實現(xiàn)引導(dǎo)功能的擴展

MBR所給予的空間畢竟太小,容不下較大的引導(dǎo)程序,因此grub程序被分為三段:"stage1"被裝入磁盤的MBR中;特殊的"stage1.5"被裝入MBR隨后的扇區(qū),它能夠識別內(nèi)核和"stage2"所在分區(qū)的文件系統(tǒng)格式并幫助引導(dǎo)"stage2",它是"stage1"和"stage2"之間的紐帶;"stage2"位于文件系統(tǒng)上。stage2程序和grub.conf可以與內(nèi)核文件處于不同的分區(qū)上(但必須位于同一磁盤),只要"stage1.5"能夠驅(qū)動它們各自所在的分區(qū)。

在linux中,與啟動相關(guān)的文件(grub、vmlinuz、initramfs)均位于boot目錄下3、grub的功能

①提供菜單,并提供交互式接口

e:進入編輯模式

②選擇要啟動的內(nèi)核或系統(tǒng)

允許傳遞引導(dǎo)參數(shù)給內(nèi)核

選擇界面可隱藏

③為編輯功能提供保護機制

啟用內(nèi)核文件:

選擇運行指定的內(nèi)核得先輸入密碼

傳遞參數(shù):

使用e命令得先輸入密碼開機后有三秒種的過渡頁面,按任意鍵可進入菜單頁面。在菜單頁面可用上下鍵選擇所要啟動的內(nèi)核或內(nèi)核,按e鍵進入內(nèi)核編輯模式,按c鍵進入grub命令行模式4、grub命令行接口:

help:查看幫助,即列出命令列表

root(DEVICE):指定哪個分區(qū)為接下來要啟動的系統(tǒng)或內(nèi)核文件所在的分區(qū),例如root(hd0,0)

所有硬盤都被識別為hd,

不同的硬盤基于數(shù)字標(biāo)識,從0開始:如hd0,hd1等

同一個硬盤上的不同分區(qū),也使用數(shù)字標(biāo)識,從0開始:如hd0,0

hd1,5

find(DEVICE)/path/to/file:查找文件。當(dāng)我們不確定內(nèi)核文件位于哪個分區(qū)上時,可使用該命令;提示:grub支持tab補全

kernel/path/to/kernel_file:指定要運行的內(nèi)核文件,如kernel/vmlinuz-2.6.32-431.el6.x86_64。

【注】:這里的文件路徑是相對于內(nèi)核文件所在分區(qū)而言,其開頭的“/”不是指操作系統(tǒng)的根,而是指內(nèi)核所在的分區(qū),因為grub是直接以該分區(qū)為入口找尋內(nèi)核的。若有單獨的boot分區(qū),則不能寫成kernel/boot/vmlinuz-2.6.32-431.el6.x86_64;在指定的內(nèi)核位置后通常還指明要掛載的根分區(qū)

initrd/path/to/kernel_file:為要運行的內(nèi)核指定其可用的ramdisk文件,其版本必須與內(nèi)核版本保持一致

【注】:grub無法識別邏輯卷,因此kernel與initramfs一定不能放于邏輯卷上

boot:啟動此前配置好的內(nèi)核或系統(tǒng)5、grub.conf

通過grub命令行接口接入系統(tǒng)比較麻煩,為此,grub提供了一個配置文件/boot/grub/grub.conf(它有一個軟鏈接/etc/grub.conf),grub會讀取這個配置文件并按配置參數(shù)引導(dǎo)系統(tǒng)

參數(shù):

default=:默認(rèn)選擇第幾個title配置的內(nèi)核或系統(tǒng),各title從0開始編號

timeout=#:過渡頁面顯示的超時時長;

splashp_w_picpath=/path/to/some_p_w_picpath_file:指定菜單的背景圖片;此圖片只能為14bits色,xpm格式,gzip壓縮;

hiddenmenu:隱藏菜單

titleTILTESTRING:顯示于菜單中的標(biāo)題

root

kernel

initrd

■若由于grub.conf文件錯誤或丟失而無法自動進入系統(tǒng),可通過grub命令行引導(dǎo)系統(tǒng)后再手動更改或創(chuàng)建這個文件[root@node2

~]#

cat

/boot/grub/grub.conf

#

grub.conf

generated

by

anaconda

#

#

Note

that

you

do

not

have

to

rerun

grub

after

making

changes

to

this

file

#

NOTICE:

You

have

a

/boot

partition.

This

means

that

#

all

kernel

and

initrd

paths

are

relative

to

/boot/,

eg.

#

root

(hd0,0)

#

kernel

/vmlinuz-version

ro

root=/dev/sda2

#

initrd

/initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title

CentOS

(2.6.32-431.el6.x86_64)

root

(hd0,0)

kernel

/vmlinuz-2.6.32-431.el6.x86_64

ro

root=UUID=aa0330af-3681-428c-98e2-ccf2e6f0f686

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

initrd

/initramfs-2.6.32-431.el6.x86_64.img

[root@node2

~]#

ll

/etc/grub/conf

ls:

cannot

access

/etc/grub/conf:

No

such

file

or

directory

[root@node2

~]#

ll

/etc/grub.conf

lrwxrwxrwx.

1

root

root

22

Aug

6

04:44

/etc/grub.conf

->

../boot/grub/grub.conf

[root@node2

~]#

cp

/boot/{vmlinuz-2.6.32-431.el6.x86_64,initramfs-2.6.32-431.el6.x86_64.img}

/

#將boot目錄下的內(nèi)核和臨時根文件復(fù)制一份到根分區(qū)下

[root@node2

~]#

ls

/

bin

dev

home

lib

lost+found

misc

net

proc

sbin

srv

tmp

var

boot

etc

initramfs-2.6.32-431.el6.x86_64.img

lib64

media

mnt

opt

root

selinux

sys

usr

vmlinuz-2.6.32-431.el6.x86_64

[root@node2

~]#

vim

/etc/grub.conf

...

default=0

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title

CentOS

(2.6.32-431.el6.x86_64)

root

(hd0,0)

kernel

/vmlinuz-2.6.32-431.el6.x86_64

ro

root=UUID=aa0330af-3681-428c-98e2-ccf2e6f0f686

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

initrd

/initramfs-2.6.32-431.el6.x86_64.img

#添加如下幾行,構(gòu)成一個新的啟動項

title

testCentos

#新的標(biāo)題

root

(hd0,1)

#現(xiàn)在根分區(qū)下也有內(nèi)核和臨時根文件,根分區(qū)為sda2,故寫成(hd0,1)

kernel

/vmlinuz-2.6.32-431.el6.x86_64

ro

root=/dev/sda2

initrd

/initramfs-2.6.32-431.el6.x86_64.img6、grub保護機制:可防止惡意用戶隨意進入單用戶模式修改root密碼

①生成密碼:

grub-md5-crypt

②保護所有內(nèi)核,需要在title之外添加

password--md5密碼串

③保護使用某內(nèi)核,則需要在內(nèi)核對應(yīng)的title之下添加

password--md5密碼串[root@node2

~]#

grub-md5-crypt

#生成密碼

Password:

Retype

password:

$1$oWUbV$Sb/PsrhmkE5bUJPMJGn871

[root@node2

~]#

vim

/etc/grub.conf

...

default=0

timeout=5

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

password

--md5

$1$oWUbV$Sb/PsrhmkE5bUJPMJGn871

#添加于title之外可保護所有內(nèi)核

title

CentOS

(2.6.32-431.el6.x86_64)

root

(hd0,0)

kernel

/vmlinuz-2.6.32-431.el6.x86_64

ro

root=UUID=aa0330af-3681-428c-98e2-ccf2e6f0f686

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

initrd

/initramfs-2.6.32-431.el6.x86_64.img

title

testCentos

password

--md5

$1$oWUbV$Sb/PsrhmkE5bUJPMJGn871

#可保護使用指定內(nèi)核

root

(hd0,1)

kernel

/vmlinuz-2.6.32-431.el6.x86_64

ro

root=UUID=aa0330af-3681-428c-98e2-ccf2e6f0f686

initrd

/initramfs-2.6.32-431.el6.x86_64.img7、安裝grub的方式:

方法1:使用grub-install命令

grub-install[--root-directory=DIR]DEVICE

DEVICE:針對哪個磁盤安裝

--root-directory=DIR:指定grub映像文件(主要是“stage2”)的存放位置,默認(rèn)為當(dāng)前系統(tǒng)根目錄。grub-install會在指定的目錄下創(chuàng)建boot/grub/的層級目錄,并將生成的“stage2”置于DIR/boot/grub/下。因為內(nèi)核與initramfs文件通常位于boot目錄下,故一般將DIR指定為boot目錄的父目錄;當(dāng)然,我們也可以指定為其它目錄,但要手動編輯grub.conf文件重新指明內(nèi)核文件的位置。

例如

mount/dev/sdb1/mnt/boot

grub-install--root-directory=/mnt//dev/sdb

方法2:輸入grub命令進入grub命令行

root(hd0,0):相當(dāng)于上面的--root-directory=DIR

setup(hd0):為哪個磁盤安裝

quit:退出

情景1:grub損壞但系統(tǒng)還未關(guān)閉或重啟,此時可直接使用上面的兩種方法修復(fù)[root@node2

~]#

dd

if=/dev/zero

of=/dev/sda

bs=400

count=1

#將MBR中的引導(dǎo)加載程序沖刷掉,注意不能殃及分區(qū)表

1+0

records

in

1+0

records

out

400

bytes

(400

B)

copied,

0.000324129

s,

1.2

MB/s

[root@node2

~]#

rm

-f

/boot/grub/stage2

#將"stage

2"也刪除

[root@node2

~]#

grub-install

/dev/sda

#使用grub-install的方式安裝grub

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@node2

~]#

ll

/boot/grub/stage2

#已重新生成"stage

2"

-rw-r--r--

1

root

root

126100

Oct

28

22:19

/boot/grub/stage2

[root@node2

~]#

dd

if=/dev/zero

of=/dev/sda

bs=400

count=1

1+0

records

in

1+0

records

out

400

bytes

(400

B)

copied,

0.000368562

s,

1.1

MB/s

[root@node2

~]#

grub

Probing

devices

to

guess

BIOS

drives.

This

may

take

a

long

time.

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)

root

(hd0,0)

Filesystem

type

is

ext2fs,

partition

type

0x83

grub>

setup

(hd0)

#使用方法二安裝grub

setup

(hd0)

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)"...

27

sectors

are

embedded.

succeeded

Running

"install

/grub/stage1

(hd0)

(hd0)1+27

p

(hd0,0)/grub/stage2

/grub/grub.conf"...

succeeded

Done.

grub>

quit

quit

情景2:grub損壞且系統(tǒng)已關(guān)閉,這時候可用如下兩種方式修復(fù):

方式一:將故障磁盤掛載于其它正常主機上重裝grub

①手動將node1的磁盤的grub損毀并關(guān)機[root@node1

~]#

dd

if=/dev/zero

of=/dev/sda

bs=400

count=1

1+0

records

in

1+0

records

out

400

bytes

(400

B)

copied,

0.000164892

s,

2.4

MB/s

[root@node1

~]#

shutdown

-h

now

②將node1的磁盤移除并添加到node2上(關(guān)于如何在不重啟的情況下識別新增硬盤見末尾補充部分)

③掛載node1的分區(qū)并安裝grub,安裝完后卸載[root@node2

~]#

lsblk

NAME

MAJ:MIN

RM

SIZE

RO

TYPE

MOUNTPOINT

sda

8:0

0

30G

0

disk

├─sda1

8:1

0

200M

0

part

/boot

├─sda2

8:2

0

10G

0

part

/

└─sda3

8:3

0

2G

0

part

[SWAP]

sdb

8:16

0

30G

0

disk

#node1的硬盤在node2上被識別為sdb

├─sdb1

8:17

0

200M

0

part

├─sdb2

8:18

0

10G

0

part

└─sdb3

8:19

0

2G

0

part

sr0

11:0

1

4.2G

0

rom

[root@node2

~]#

mkdir

/mnt/boot

[root@node2

~]#

mount

/dev/sdb1

/mnt/boot

[root@node2

~]#

grub-install

--root-directory=/mnt

/dev/sdb

/dev/sdb

does

not

have

any

corresponding

BIOS

drive.

#

注意:若這里提示找不到相應(yīng)的BIOS驅(qū)動,可使用選項--recheck重新檢查磁盤,如下:

[root@node2

~]#

grub-install

--root-directory=/mnt

--recheck

/dev/sdb

Probing

devices

to

guess

BIOS

drives.

This

may

take

a

long

time.

Installation

finished.

No

error

reported.

This

is

the

contents

of

the

device

map

/mnt/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'.

(fd0) /dev/fd0

(hd0) /dev/sda

(hd1) /dev/sdb

[root@node2

~]#

umount

/mnt/boot

④從node2上移除node1的硬盤后再裝回node1啟動即可

方式二:插入系統(tǒng)光盤進入救援模式修復(fù)

①將Linux安裝光盤放入光驅(qū)。硬盤的MBR損壞后,BIOS會自動從光盤引導(dǎo),進入菜單頁面后,選擇進入“救援模式”

②系統(tǒng)會檢測硬件,引導(dǎo)光盤上的Linux環(huán)境,依次提示選擇救援模式下使用的語言、鍵盤以及是否需要設(shè)置網(wǎng)絡(luò),可按需選擇

③接下來系統(tǒng)會查找根分區(qū),出現(xiàn)掛載提示,硬盤的根分區(qū)將被掛載到光盤Linux環(huán)境的/mnt/sysp_w_picpath目錄下;默認(rèn)選項“continue”表示掛載權(quán)限為讀寫,“Read-only”為只讀,如。此處,因為要對系統(tǒng)進行修復(fù),故需要有讀寫權(quán)限,選擇“continue”。

④按提示執(zhí)行“chroot/mnt/sysp_w_picpath”切換根環(huán)境并安裝grub,然后退出shell并重啟即可

chroot:切換根環(huán)境,即以指定的目錄作為根

用法:chroot/path/to/directory[SHELL]

例如chroot/mnt/sysp_w_picpath/bin/tcsh

#將sysp_w_picpath作為根目錄,并運行其中的tcsh補充:如何實現(xiàn)不重啟linux而識別新增硬盤?

新增硬盤后,使用如下命令識別:

echo"scsiadd-single-devicewxyz">/proc/scsi/scsi

其中:

w是主機適配器標(biāo)識,第一個適配器為零(0)

x是主機適配器上的SCSI通道,第一個通道為零(0)

y是設(shè)備的SCSI標(biāo)識

z是LUN號,第一個LUN為零(0)

執(zhí)行上述命令前,要先查看/proc/scsi/scsi,確定新增硬盤的ID

相反,在不重啟系統(tǒng)的情況下將硬盤從系統(tǒng)中移除的命令為:

echo"scsiremove-single-devicewxyz">/proc/scsi/scsi

使用該命令前需確保該硬盤已卸載[root@node2

~]#

lsblk

NAME

MAJ:MIN

RM

SIZE

RO

TYPE

MOUNTPOINT

sda

8:0

0

30G

0

disk

├─sda1

8:1

0

200M

0

part

/boot

├─sda2

8:2

0

10G

0

part

/

└─sda3

8:3

0

2G

0

part

[SWAP]

sr0

11:0

1

4.2G

0

rom

[root@node2

~]#

cat

/proc/scsi/scsi

Attached

devices:

Host:

scsi0

Channel:

00

Id:

00

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論