版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】引導(dǎo)加載程序grub詳解
上一章講到,常見(jiàn)的bootloader(引導(dǎo)加載程序)有LILO和grub,LILO有一大缺點(diǎn),它只能識(shí)別0-1023范圍內(nèi)的柱面構(gòu)成的分區(qū)的內(nèi)核文件,故已逐漸被grub取代。Grub(GRandUnifiedBootloader)是一個(gè)來(lái)自GNU項(xiàng)目的多操作系統(tǒng)引導(dǎo)程序,它負(fù)責(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配置文件,并實(shí)現(xiàn)引導(dǎo)功能的擴(kuò)展
MBR所給予的空間畢竟太小,容不下較大的引導(dǎo)程序,因此grub程序被分為三段:"stage1"被裝入磁盤(pán)的MBR中;特殊的"stage1.5"被裝入MBR隨后的扇區(qū),它能夠識(shí)別內(nèi)核和"stage2"所在分區(qū)的文件系統(tǒng)格式并幫助引導(dǎo)"stage2",它是"stage1"和"stage2"之間的紐帶;"stage2"位于文件系統(tǒng)上。stage2程序和grub.conf可以與內(nèi)核文件處于不同的分區(qū)上(但必須位于同一磁盤(pán)),只要"stage1.5"能夠驅(qū)動(dòng)它們各自所在的分區(qū)。
在linux中,與啟動(dòng)相關(guān)的文件(grub、vmlinuz、initramfs)均位于boot目錄下3、grub的功能
①提供菜單,并提供交互式接口
e:進(jìn)入編輯模式
②選擇要啟動(dòng)的內(nèi)核或系統(tǒng)
允許傳遞引導(dǎo)參數(shù)給內(nèi)核
選擇界面可隱藏
③為編輯功能提供保護(hù)機(jī)制
啟用內(nèi)核文件:
選擇運(yùn)行指定的內(nèi)核得先輸入密碼
傳遞參數(shù):
使用e命令得先輸入密碼開(kāi)機(jī)后有三秒種的過(guò)渡頁(yè)面,按任意鍵可進(jìn)入菜單頁(yè)面。在菜單頁(yè)面可用上下鍵選擇所要啟動(dòng)的內(nèi)核或內(nèi)核,按e鍵進(jìn)入內(nèi)核編輯模式,按c鍵進(jìn)入grub命令行模式4、grub命令行接口:
help:查看幫助,即列出命令列表
root(DEVICE):指定哪個(gè)分區(qū)為接下來(lái)要啟動(dòng)的系統(tǒng)或內(nèi)核文件所在的分區(qū),例如root(hd0,0)
所有硬盤(pán)都被識(shí)別為hd,
不同的硬盤(pán)基于數(shù)字標(biāo)識(shí),從0開(kāi)始:如hd0,hd1等
同一個(gè)硬盤(pán)上的不同分區(qū),也使用數(shù)字標(biāo)識(shí),從0開(kāi)始:如hd0,0
hd1,5
find(DEVICE)/path/to/file:查找文件。當(dāng)我們不確定內(nèi)核文件位于哪個(gè)分區(qū)上時(shí),可使用該命令;提示:grub支持tab補(bǔ)全
kernel/path/to/kernel_file:指定要運(yùn)行的內(nèi)核文件,如kernel/vmlinuz-2.6.32-431.el6.x86_64。
【注】:這里的文件路徑是相對(duì)于內(nèi)核文件所在分區(qū)而言,其開(kāi)頭的“/”不是指操作系統(tǒng)的根,而是指內(nèi)核所在的分區(qū),因?yàn)間rub是直接以該分區(qū)為入口找尋內(nèi)核的。若有單獨(dú)的boot分區(qū),則不能寫(xiě)成kernel/boot/vmlinuz-2.6.32-431.el6.x86_64;在指定的內(nèi)核位置后通常還指明要掛載的根分區(qū)
initrd/path/to/kernel_file:為要運(yùn)行的內(nèi)核指定其可用的ramdisk文件,其版本必須與內(nèi)核版本保持一致
【注】:grub無(wú)法識(shí)別邏輯卷,因此kernel與initramfs一定不能放于邏輯卷上
boot:啟動(dòng)此前配置好的內(nèi)核或系統(tǒng)5、grub.conf
通過(guò)grub命令行接口接入系統(tǒng)比較麻煩,為此,grub提供了一個(gè)配置文件/boot/grub/grub.conf(它有一個(gè)軟鏈接/etc/grub.conf),grub會(huì)讀取這個(gè)配置文件并按配置參數(shù)引導(dǎo)系統(tǒng)
參數(shù):
default=:默認(rèn)選擇第幾個(gè)title配置的內(nèi)核或系統(tǒng),各title從0開(kāi)始編號(hào)
timeout=#:過(guò)渡頁(yè)面顯示的超時(shí)時(shí)長(zhǎng);
splashp_w_picpath=/path/to/some_p_w_picpath_file:指定菜單的背景圖片;此圖片只能為14bits色,xpm格式,gzip壓縮;
hiddenmenu:隱藏菜單
titleTILTESTRING:顯示于菜單中的標(biāo)題
root
kernel
initrd
■若由于grub.conf文件錯(cuò)誤或丟失而無(wú)法自動(dòng)進(jìn)入系統(tǒng),可通過(guò)grub命令行引導(dǎo)系統(tǒng)后再手動(dòng)更改或創(chuàng)建這個(gè)文件[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)核和臨時(shí)根文件復(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)成一個(gè)新的啟動(dòng)項(xiàng)
title
testCentos
#新的標(biāo)題
root
(hd0,1)
#現(xiàn)在根分區(qū)下也有內(nèi)核和臨時(shí)根文件,根分區(qū)為sda2,故寫(xiě)成(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保護(hù)機(jī)制:可防止惡意用戶隨意進(jìn)入單用戶模式修改root密碼
①生成密碼:
grub-md5-crypt
②保護(hù)所有內(nèi)核,需要在title之外添加
password--md5密碼串
③保護(hù)使用某內(nèi)核,則需要在內(nèi)核對(duì)應(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之外可保護(hù)所有內(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
#可保護(hù)使用指定內(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:針對(duì)哪個(gè)磁盤(pán)安裝
--root-directory=DIR:指定grub映像文件(主要是“stage2”)的存放位置,默認(rèn)為當(dāng)前系統(tǒng)根目錄。grub-install會(huì)在指定的目錄下創(chuàng)建boot/grub/的層級(jí)目錄,并將生成的“stage2”置于DIR/boot/grub/下。因?yàn)閮?nèi)核與initramfs文件通常位于boot目錄下,故一般將DIR指定為boot目錄的父目錄;當(dāng)然,我們也可以指定為其它目錄,但要手動(dòng)編輯grub.conf文件重新指明內(nèi)核文件的位置。
例如
mount/dev/sdb1/mnt/boot
grub-install--root-directory=/mnt//dev/sdb
方法2:輸入grub命令進(jìn)入grub命令行
root(hd0,0):相當(dāng)于上面的--root-directory=DIR
setup(hd0):為哪個(gè)磁盤(pán)安裝
quit:退出
情景1:grub損壞但系統(tǒng)還未關(guān)閉或重啟,此時(shí)可直接使用上面的兩種方法修復(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)閉,這時(shí)候可用如下兩種方式修復(fù):
方式一:將故障磁盤(pán)掛載于其它正常主機(jī)上重裝grub
①手動(dòng)將node1的磁盤(pán)的grub損毀并關(guān)機(jī)[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的磁盤(pán)移除并添加到node2上(關(guān)于如何在不重啟的情況下識(shí)別新增硬盤(pán)見(jiàn)末尾補(bǔ)充部分)
③掛載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的硬盤(pán)在node2上被識(shí)別為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ū)動(dòng),可使用選項(xiàng)--recheck重新檢查磁盤(pán),如下:
[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的硬盤(pán)后再裝回node1啟動(dòng)即可
方式二:插入系統(tǒng)光盤(pán)進(jìn)入救援模式修復(fù)
①將Linux安裝光盤(pán)放入光驅(qū)。硬盤(pán)的MBR損壞后,BIOS會(huì)自動(dòng)從光盤(pán)引導(dǎo),進(jìn)入菜單頁(yè)面后,選擇進(jìn)入“救援模式”
②系統(tǒng)會(huì)檢測(cè)硬件,引導(dǎo)光盤(pán)上的Linux環(huán)境,依次提示選擇救援模式下使用的語(yǔ)言、鍵盤(pán)以及是否需要設(shè)置網(wǎng)絡(luò),可按需選擇
③接下來(lái)系統(tǒng)會(huì)查找根分區(qū),出現(xiàn)掛載提示,硬盤(pán)的根分區(qū)將被掛載到光盤(pán)Linux環(huán)境的/mnt/sysp_w_picpath目錄下;默認(rèn)選項(xiàng)“continue”表示掛載權(quán)限為讀寫(xiě),“Read-only”為只讀,如。此處,因?yàn)橐獙?duì)系統(tǒng)進(jìn)行修復(fù),故需要有讀寫(xiě)權(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作為根目錄,并運(yùn)行其中的tcsh補(bǔ)充:如何實(shí)現(xiàn)不重啟linux而識(shí)別新增硬盤(pán)?
新增硬盤(pán)后,使用如下命令識(shí)別:
echo"scsiadd-single-devicewxyz">/proc/scsi/scsi
其中:
w是主機(jī)適配器標(biāo)識(shí),第一個(gè)適配器為零(0)
x是主機(jī)適配器上的SCSI通道,第一個(gè)通道為零(0)
y是設(shè)備的SCSI標(biāo)識(shí)
z是LUN號(hào),第一個(gè)LUN為零(0)
執(zhí)行上述命令前,要先查看/proc/scsi/scsi,確定新增硬盤(pán)的ID
相反,在不重啟系統(tǒng)的情況下將硬盤(pán)從系統(tǒng)中移除的命令為:
echo"scsiremove-single-devicewxyz">/proc/scsi/scsi
使用該命令前需確保該硬盤(pán)已卸載[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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度熱泵設(shè)備安裝與調(diào)試服務(wù)合同模板2篇
- 2024年綠色環(huán)保預(yù)制件加工與應(yīng)用一體化合同3篇
- 2024淘寶店鋪全面升級(jí)版裝修模板定制與推廣合同3篇
- 2025年度古籍收藏與銷(xiāo)售合作框架合同3篇
- 學(xué)生會(huì)日常工作總結(jié)
- 2024年版勞務(wù)安全標(biāo)準(zhǔn)合作合同版B版
- 2025年度智能生產(chǎn)線承包與升級(jí)改造合同3篇
- 2025版建筑工程質(zhì)量事故處理三方合作協(xié)議合同范本3篇
- 2024年私人餐廳承攬協(xié)議標(biāo)準(zhǔn)格式版B版
- 2024版居間橋梁協(xié)作合同3篇
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之15:“6策劃-6.4創(chuàng)新組合”(雷澤佳編制-2025B0)
- 廣東省廣州市天河區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 標(biāo)準(zhǔn)廠房施工方案
- DBJT45T 037-2022 高速公路出行信息服務(wù)管理指南
- 港口碼頭租賃協(xié)議三篇
- DB32/T 4700-2024 蓄熱式焚燒爐系統(tǒng)安全技術(shù)要求
- 國(guó)有企業(yè)普法培訓(xùn)課件
- 鑄鐵鑲銅閘門(mén)
- 大型塔器“立裝成段整體就位”工法
- 聯(lián)想集團(tuán)內(nèi)訓(xùn)師管理制度
- 常用函數(shù)圖像(1)
評(píng)論
0/150
提交評(píng)論