[編輯]clozxy的公告
歡迎光臨我的博客 ^,^
[編輯]文章分類(lèi)
ACE
C++ 程序開(kāi)發(fā)
FAQ 集合
Grub
LFS
Linux 常用命令
Linux 管理
Linux 內(nèi)核
Linux 啟動(dòng)
Linux 系統(tǒng)編程
Linux 系統(tǒng)配置
硬件配置
雜七雜八
[編輯]技術(shù)資料
How to make bootable usb disk.
Linux From Scratch
Linux 引導(dǎo)過(guò)程內(nèi)幕
Linux 文件系統(tǒng)剖析
Linux內(nèi)核配置系統(tǒng)淺析
Linux啟動(dòng)過(guò)程綜述
使用 /proc 文件系統(tǒng)來(lái)訪問(wèn) Linux 內(nèi)核的內(nèi)容
手把手教你如何建立自己的Linux系統(tǒng) 第二版
理解vmlinuz,initrd,system.map文件
存檔
2010年09月(7)
2010年08月(35)
2010年07月(24)
2010年06月(29)
2010年05月(23)
2010年04月(20)
2010年03月(18)
2010年02月(17)
2010年01月(7)
公告:
CSDN 產(chǎn)品事業(yè)部開(kāi)設(shè)官方博客了!來(lái)關(guān)注我們的一舉一動(dòng)吧![意見(jiàn)反饋][官方博客] Grub 命令以及啟動(dòng)詳解 收藏
Grub詳解
rhgb表示redhat graphics boot,就是會(huì)看到圖片來(lái)代替啟動(dòng)過(guò)程中顯示的文本信息,這些信息在啟動(dòng)后用dmesg也可以看到
quiet表示在啟動(dòng)過(guò)程中只有重要信息顯示,類(lèi)似硬件自檢的消息不回顯示
應(yīng)櫻家冢、Bluedata以及其他兄弟的要求,這里談一談自己在配置Grub當(dāng)中積累的點(diǎn)滴,不存在什么高深的使用技巧——^_^,我自己也沒(méi)有掌握, 實(shí)際上就是我們常用的功能整理了一下。如有錯(cuò)誤和疑問(wèn),請(qǐng)大家指教!因?yàn)闀r(shí)間不夠用,所以才這么遲的出來(lái),希望兩位兄弟諒解,同時(shí)感謝網(wǎng)絡(luò)上曾經(jīng)為了 linux的事業(yè)不停奮斗而無(wú)私貢獻(xiàn)的人們——因?yàn)楸疚膮⒖剂怂麄兊慕?jīng)驗(yàn)!
1、一個(gè)GRUB配置文件
2、解讀grub.conf文件
3、配置grub
4、GRUB的交互性
5、常見(jiàn)grub除錯(cuò)方法的思路
1 一個(gè)GRUB配置文件
基于本例的分區(qū)如下:
hda 15G
hda1 8G / RED HAT LINUX8.0
hda5 7G /home
hdc 20G
hdc1 6.4G WinXP
hdc5 6.4G
hdc6 6.4G
hdc7 6.4G
#fdisk -l
# Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdc1 * 1 894 7181023+ b Win95 FAT32
/dev/hdc2 895 2434 12370050 f Win95 Ext'd (LBA)
/dev/hdc5 895 1787 7172991 b Win95 FAT32
/dev/hdc6 1788 2434 5196996 b Win95 FAT32
Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1020 8193118+ 83 Linux
/dev/hda2 1021 1802 6281415 83 Linux
/dev/hda3 1803 1867 522112+ 82 Linux swap
grub.conf,這個(gè)文件位于;/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 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=3
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
title Microsoft Windows XP
root (hd1,0)
chainloader (hd1,0)+1
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
boot
2 解讀grub.conf文件
我們將來(lái)看看grub.conf文件內(nèi)語(yǔ)句,(注:...)內(nèi)的東西是我們的解讀內(nèi)容.
# 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 (注:以上以符號(hào)井"#"開(kāi)頭的行表示被注釋掉,沒(méi)有任何意義)
default=0 (注:默認(rèn)的操作系統(tǒng)就是由default控制的。default后加一個(gè)數(shù)字n,表明是第 n+1個(gè)。需要注意的是,GRUB中,計(jì)數(shù)是從0開(kāi)始的,第一個(gè)硬盤(pán)是hd0,第一 個(gè)軟驅(qū)是fd0,等等。所以,default 0 表示默認(rèn)的操作系統(tǒng)在這兒是 Red Hat Linux (2.4.18-14)如果你修改成1就是WinXP了)
timeout=3 (注:timeout表示默認(rèn)等待的時(shí)間,這兒是3秒鐘。超過(guò)3秒,用戶還沒(méi)有作出選 擇的話,系統(tǒng)將自動(dòng)選擇默認(rèn)的操作系統(tǒng);當(dāng)然你可以改成任何你樂(lè)意的時(shí)間)
splashimage=(hd0,0)/boot/grub/splash.xpm.gz (注:指定開(kāi)機(jī)畫(huà)面文件splash.xpm.gz的位置,也可以splash /boot/logo/800x600x8.img)
title Red Hat Linux (2.4.18-14) (注:表示Red Hat Linux的菜單項(xiàng))
root (hd0,0) (注:表示第一個(gè)硬盤(pán)第一個(gè)分區(qū),這里的root和系 統(tǒng)內(nèi)的root不是一碼事!詳細(xì)如下說(shuō)明)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ (注:指定內(nèi)核的位置,詳細(xì)說(shuō)明如下 文)
initrd /boot/initrd-2.4.18-14.img (注:初始化)
title Microsoft Windows XP (注:表示Microsoft Windows XP的菜單項(xiàng))
map (hd0) (hd1) (注:map是命令,詳細(xì)如下)
map (hd1) (hd0)
root (hd1,0) (注:這是指第二個(gè)硬盤(pán)(從硬盤(pán))上第一個(gè)分區(qū))
chainloader (hd1,0)+1 (注:鏈?zhǔn)窖b入器,裝入一個(gè)扇區(qū)的數(shù)據(jù)然后把引導(dǎo) 權(quán)交給它。詳細(xì)說(shuō)明如下)
makeactive
boot
(注:在 Linux 中,當(dāng)談到 "root" 文件系統(tǒng)時(shí),通常是指主 Linux 分區(qū)。但是,GRUB 有它自己的 root 分區(qū)定義。GRUB 的 root 分區(qū)是保存 Linux 內(nèi)核的分區(qū)。這可能是您的正式 root 文件系統(tǒng),也可能不是。我們討論的是 GRUB,需要指定 GRUB 的 root 分區(qū)。進(jìn)入 root 分區(qū)時(shí),GRUB 將把這個(gè)分區(qū)安裝成只讀型,這樣就可以從該分區(qū)中裝入 Linux 內(nèi)核。GRUB 的一個(gè)很“酷”的功能是它可以讀取本機(jī)的 FAT、FFS、minix、ext2 和 ReiserFS 分區(qū).到目前為止,您可能會(huì)感到一點(diǎn)疑惑,因?yàn)?GRUB 所使用的硬盤(pán)/分區(qū)命名約定與 Linux 使用的命名約定不同。在Linux 中,第一個(gè)硬盤(pán)的第五個(gè)分區(qū)稱(chēng)作 "hda5"。而 GRUB 把這個(gè)分區(qū)稱(chēng)作 "(hd0,4)"。GRUB 對(duì)硬盤(pán)和分區(qū)的編號(hào)都是從 0 開(kāi)始計(jì)算。另外,硬盤(pán)和分區(qū)都用逗號(hào)分隔,整個(gè)表達(dá)式用括號(hào)括起。現(xiàn)在,可以發(fā)現(xiàn)如果要引導(dǎo) Linux 硬盤(pán) hda5,應(yīng)輸入 "root (hd0,4)"。
知道了內(nèi)核在哪兒,還要具體指出哪個(gè)文件是內(nèi)核文件,這就是kernel的工作。
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/說(shuō)明/boot/vmlinuz-2.4.18-14就是要載入的內(nèi)核。后面的都是傳遞給內(nèi)核的參數(shù)。root=LABEL=/ 就是linux的硬盤(pán)分區(qū)表示法,ro是readonly的意思。initrd用來(lái)初始的linux image,并設(shè)置相應(yīng)的參數(shù)。
命令map:當(dāng)你有兩塊硬盤(pán),一個(gè)無(wú)法從第二塊硬盤(pán)啟動(dòng)的操作系統(tǒng),例如Windowsxp,就可以使用map命令.你能夠?qū)d0映射為hd1,將hd1映射為hd0。換句話說(shuō),你可以虛擬的交換兩個(gè)硬盤(pán)而啟動(dòng)所需要的操作系統(tǒng) 。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
GRUB 使用了“鏈?zhǔn)窖b入器”(chainloader)。鏈?zhǔn)窖b入器從分區(qū) (hd1,0) 的引導(dǎo)記錄中裝入winxp自己的引導(dǎo)裝入器,然后引導(dǎo)它。這就是這種技術(shù)叫做鏈?zhǔn)窖b入的原因 -- 它創(chuàng)建了一個(gè)從引導(dǎo)裝入器到另一個(gè)的鏈。這種鏈?zhǔn)窖b入技術(shù)可以用于引導(dǎo)任何版本的 DOS 或 Windows。
GRUB的配置文件要簡(jiǎn)單就這么簡(jiǎn)單,如果你要更個(gè)性化一點(diǎn),試一試把“color light-gray/blue ”加在default語(yǔ)句的下面
3 配置grub
grub啟動(dòng)時(shí)會(huì)在/boot/grub/中尋找一個(gè)名字為menu.lst的配置文件,如果找不到此文件則不進(jìn)入菜單模式而直接進(jìn)入命令行模式。
現(xiàn)在,我們來(lái)看一下如何在啟動(dòng)后進(jìn)入各種操作系統(tǒng),如何建立menu.conf文件。我們就從GRUB支持的啟動(dòng)過(guò)程開(kāi)始??梢杂袃煞N方法來(lái)完成啟動(dòng)過(guò)程:
?A.通過(guò)調(diào)用內(nèi)核本地啟動(dòng)
?B.連續(xù)啟動(dòng)或者將控制轉(zhuǎn)給另一個(gè)引導(dǎo)器
A模式啟動(dòng)過(guò)程
1.配置跟設(shè)備或者告訴GRUB你的根文件系統(tǒng)。
2.告訴GRUB你的內(nèi)核影像的位置,然后將參數(shù)傳送給內(nèi)核。
3.重新啟動(dòng),試一下。
為了啟動(dòng)Linux,將內(nèi)核以bzImage的文件名放在/boot/目錄中,跟文件系統(tǒng)是
/dev/hda1,或者GRUB中的(hd0,0)。啟動(dòng)過(guò)程如下:
1.root (hd0,0) [This sets the root partition]
2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel]
B模式啟動(dòng)過(guò)程(這種模式假設(shè)當(dāng)前的分區(qū)中安裝了另一個(gè)啟動(dòng)管理器,例如LILO
或者NTLDR):
1.設(shè)置根分區(qū)但不要安裝它
2.激活這個(gè)分區(qū)
3.配置需要啟動(dòng)的分區(qū)的第一個(gè)扇區(qū)
4.重新啟動(dòng),看一下效果。
我們?cè)谠囋噯?dòng)安裝在/dev/hdc1或者(hd1,0)的windows。啟動(dòng)windows的過(guò)程如下:
1.rootnoverify (hd1,0)
2.makeactive
3.chainloader +1 [+1 sets the first sector of the current root
partition]
4.boot [transfers the control and quits GRUB]
menu.conf文件:它用于建立啟動(dòng)多操作系統(tǒng)時(shí)的菜單。建立menu.conf并不難。它使用簡(jiǎn)單的英語(yǔ),就象你在這一節(jié)看到的那樣。
所有的菜單項(xiàng)目都以沒(méi)有逗號(hào)分隔的“title TITLENAME”開(kāi)頭。你可以隨意設(shè)置
TITLENAME。
設(shè)置Linux啟動(dòng)菜單步驟如下:
1.設(shè)置標(biāo)題
2.設(shè)置根分區(qū)
3.設(shè)置內(nèi)核的相應(yīng)參數(shù)
4.啟動(dòng)
一個(gè)菜單例子:
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /boot/initrd-2.4.18-14.img
前面有#的行是一個(gè)注釋。
建立啟動(dòng)Windows 或者 DOS的菜單:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
又或者:
title Microsoft Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
chainloader (hd1,0)+1
makeactive
boot
----
注意:root和rootnoverify都是一樣的,把rootnoverify改成root也行。不過(guò)經(jīng)過(guò)實(shí)踐來(lái)看。有時(shí)引導(dǎo)win時(shí),系統(tǒng)安裝好 后,是rootnoverify (hdX.Y)這樣形式的,這樣會(huì)出現(xiàn)windows起不來(lái),出現(xiàn)什么windows什么文件損壞的情況。這時(shí),我們就要把在grub中,引導(dǎo) windows的那段中的rootnoverify改為root
root英文的意思就是根的意思,在這里是讓linux知道自己所處的位置,也就是我們所安裝linux的/根分區(qū)所在的位置 。
4 GRUB的交互性
GRUB 最好的優(yōu)點(diǎn)之一就是其強(qiáng)健的設(shè)計(jì) -- 在不斷使用它時(shí)請(qǐng)別忘了這點(diǎn)。如果更新內(nèi)核或更改它在磁盤(pán)上的位置,不必重新安裝 GRUB。事實(shí)上,如有必要,只要更新 menu.lst 文件即可,一切將保持正常。
只有少數(shù)情況下,才需要將 GRUB 引導(dǎo)裝入器重新安裝到引導(dǎo)記錄。首先,如果更改 GRUB root 分區(qū)的分區(qū)類(lèi)型(例如,從 ext2 改成 ReiserFS),則需要重新安裝?;蛘撸绻?/boot/grub 中的 stage1 和 stage2 文件,由于它們來(lái)自更新版本的 GRUB,很有可能要重新安裝引導(dǎo)裝入器。其它情況下,可以不必理睬!
GRUB的最大的特點(diǎn)就是交互性特別強(qiáng)。在開(kāi)機(jī)時(shí),按一下“c”,將進(jìn)入GRUB 控制臺(tái)。顯示如下:
GRUB version 0.5.96.1 (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>
歡迎使用 GRUB 控制臺(tái)。現(xiàn)在,再研究命令:
將通過(guò)GRUB 控制臺(tái)繞過(guò)lilo來(lái)啟動(dòng)RedHat linux,
grub> root (h
現(xiàn)在,按一次 Tab 鍵。如果系統(tǒng)中有多個(gè)硬盤(pán),GRUB 將顯示可能完成的列表,從 "hd0" 開(kāi)始。如果只有一個(gè)硬盤(pán),GRUB 將插入 "hd0,"。如果有多個(gè)硬盤(pán),繼續(xù)進(jìn)行,在 ("hd2") 中輸入名稱(chēng)并在名稱(chēng)后緊跟著輸入逗號(hào),但不要按 Enter 鍵。部分完成的 root 命令看起來(lái)如下:
grub> root (hd0,
現(xiàn)在,繼續(xù)操作,再按一次 Tab 鍵。GRUB 將顯示特定硬盤(pán)上所有分區(qū)的列表,以及它們的文件系統(tǒng)類(lèi)型。在我的系統(tǒng)中,按 Tab 鍵時(shí)得到以下列表:
grub> root (hd0, (tab,按tab一下鍵)
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0x6
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x7
Partition num: 5, Filesystem type is ext2fs, partition type 0x83
Partition num: 6, Filesystem type is fat, partition type 0xb
Partition num: 7, Filesystem type is fat, partition type 0xb
Partition num: 8, Filesystem type is ext2fs, partition type 0x83
Partition num: 9, Filesystem type unknown, partition type 0x82
如您所見(jiàn),GRUB 的交互式硬盤(pán)和分區(qū)名稱(chēng)實(shí)現(xiàn)功能非常有條理。這些,只需要好好理解 GRUB 新奇的硬盤(pán)和分區(qū)命名語(yǔ)法,然后就可以繼續(xù)操作了
代碼:
grub> root (hd0, 8)
現(xiàn)在已安裝了 root 文件系統(tǒng),到裝入內(nèi)核的時(shí)候了
grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro
[Linux-bzImage, setup=0x1200, size=0xe1a30]
您已經(jīng)安裝了 root 文件系統(tǒng)并裝入了內(nèi)核。現(xiàn)在,可以引導(dǎo)了。只要輸入 "boot",Linux 引導(dǎo)過(guò)程就將開(kāi)始。是不是很cool啊,GRUB的menu.lst更像一個(gè)linux下的腳本程序。
5 常見(jiàn)grub除錯(cuò)方法的思路
首先進(jìn)去Linux的rescue模式!
用軟盤(pán)或光盤(pán)啟動(dòng),然后在啟動(dòng)的提示符輸入:linux rescue
按照提示進(jìn)入一個(gè)Shell狀態(tài),你可以到/mnt/下面看到一個(gè)sysimage這么目錄,進(jìn)去以后,就是你安裝linux的/分區(qū).
使用命令將根分區(qū)變?yōu)楫?dāng)前目錄的根分區(qū):chroot /mnt/sysimage
然后轉(zhuǎn)到/sbin/這個(gè)目錄中.
使用fdisk -l 顯示當(dāng)前分區(qū)情況,然后使用#grub-install /dev/hdx(x為你使用的是那塊硬盤(pán)安裝的,一般情況下是hda)
使用exit推出chroot,再使用exit退出linux rescue模式,系統(tǒng)將重新啟動(dòng)!取出光盤(pán),應(yīng)該可以看到grub安裝好了.
在具體的環(huán)境中,編輯/boot/grub/grub.conf文件和menu.lst文件
簡(jiǎn)化:
1.安裝盤(pán)啟動(dòng)
2.進(jìn)入linux rescue模式
3.一系列鍵盤(pán)以及幾項(xiàng)簡(jiǎn)單的配制,過(guò)后就[繼續(xù)]了。。。這個(gè)過(guò)程,我不說(shuō)了,比較簡(jiǎn)單。
4.然后會(huì)出現(xiàn)這樣的字符
sh#
5. sh#grub
會(huì)出現(xiàn)這樣的字符:grub>我們就可以在這樣的字符后面,輸入:grub>root (hdX,Y)
grub>setup (hd0)
如果成功會(huì)有一個(gè)successful......
這里的X,如果是一個(gè)盤(pán),就是0,如果你所安裝的linux的根分區(qū)在第二個(gè)硬盤(pán)上,那X就是1了;Y,就是裝有l(wèi)inux系統(tǒng)所在的根分區(qū)。 setup (hd0)就是把GRUB寫(xiě)到硬盤(pán)的MBR上。
其他:
grub菜單項(xiàng)丟失,只有字符grub>時(shí)的處理方法:
grub>cat (hd0,0) /root/grub/grub.conf(為了看參數(shù)。)
grub>root (hd0,1)
grub>kernel (hd0,0) /boot/vmlinuz-2.4.18-11 ro root=/dev/hda2
grub>initrd (hd0,0) /boot/initrd-2.4.18-11.img
grub>boot
如果看不明白,可以參考后面的命令慢慢看,這里不做注釋?zhuān)偈勾蠹覍W(xué)習(xí),哈哈
98先裝,用的是單獨(dú)的硬盤(pán),4.3G,那時(shí)候,LINUX8還沒(méi)有到我手中
后來(lái)到了,在家中安裝好了,選擇GRUB,就會(huì)有DOS的一個(gè)菜單,我的是在主分區(qū)
到了公司,把LINUX掛在第一個(gè)盤(pán)的位置,那個(gè)盤(pán)掛在第四個(gè)盤(pán)的位置(這個(gè)無(wú)所謂)
然后GRUB配置如下
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-14)
root (hd0,0)
kernel /vmlinuz-2.4.18-14 ro root=LABEL=/
initrd /initrd-2.4.18-14.img
title DOS
rootnoverify (hd1,0)
makeactive
chainloader (hd1,0)+1
map (hd0) (hd1)
map (hd1) (hd0)
boot
下面是GRUB的可用命令列表:
#大部分命令我們不常用,而且我也沒(méi)有每個(gè)都試驗(yàn)!
關(guān)于下面將要用到的三種模式的解釋?zhuān)?br> GRUB的用戶界面有三種:命令行模式,菜單模式和菜單編輯模式
?。╝) 命令行模式:
進(jìn)入命令行模式后GRUB會(huì)給出一個(gè)命令提示符`grub>`,此時(shí)就可以鍵入命令,按回車(chē)執(zhí)行。此模式下可執(zhí)行的命令是在menu.lst中可執(zhí)行的命令的一個(gè)子集。此模式下允許類(lèi)似于Bash shell的命令行編輯功能:
<C-f>或<右箭頭鍵> 光標(biāo)右移一個(gè)字符
<C-b>或<左箭頭鍵> 光標(biāo)左移一個(gè)字符
<C-a><HOME> 到這一行的開(kāi)頭
<C-e>或<END> 到行尾
<C-d>或<DEL> 刪除光標(biāo)處的字符
<C-h>或<BackSpace> 刪除光標(biāo)左邊的字符
<C-k> 刪除光標(biāo)右邊的所有字符(包括光標(biāo)處的字符)
<C-u> 刪除光標(biāo)左邊的所有字符(包括光標(biāo)處的字符)
<C-y> 恢復(fù)上次刪除的字符串到光標(biāo)位置
<C-p>或<向上鍵> 歷史記錄中的上一條命令
<C-n>或<向下鍵> 歷史記錄中的下一條命令
在命令行模式下<tab>鍵有補(bǔ)全命令的功能,如果你敲入了命令的前一部分,鍵入<tab>系統(tǒng)將列出所有可能以你給出的字符 串開(kāi)頭的命令。如果你給出了命令,在命令參數(shù)的位置按下<tab>鍵,系統(tǒng)將給出這條命令的可能的參數(shù)列表,具體的可用命令集將在后面給出。
?。╞) 菜單模式
當(dāng)存在文件/boot/grub/menu.lst文件時(shí)系統(tǒng)啟動(dòng)自動(dòng)進(jìn)入此模式。菜單模式下用戶只需要用上下箭頭來(lái)選擇他所想啟動(dòng)的系統(tǒng)或者執(zhí)行某個(gè) 命令塊,菜單的定義在menu.lst文件中,你也可以從菜單模式按<c>鍵進(jìn)入命令行模式,并且可以按<ESC>鍵從命令行模 式返回菜單模式。菜單模式下按<e>鍵將進(jìn)入菜單編輯模式。
(c) 菜單編輯模式
菜單編輯模式用來(lái)對(duì)菜單項(xiàng)進(jìn)行編輯 改變,其界面和菜單模式的界面十分類(lèi)似,不同的是菜單中顯示的是對(duì)應(yīng)某個(gè)菜單項(xiàng)的命令列表。如果在編輯模式下按下 <ESC>,則取消所有當(dāng)前對(duì)菜單的編輯并回到菜單模式下。在編輯模式下選中一個(gè)命令行,就可以對(duì)這條指令進(jìn)行修改,修改完畢后按下< RET>,GRUB將提示你確認(rèn)并完成修改。如果你想在當(dāng)前命令列表中增加一條命令,按<o>在當(dāng)前命令的下面增加一條指令,按 <O>在當(dāng)前命令前處增加一條指令。按<d>刪除一條指令。
僅用于菜單的命令(不包括菜單項(xiàng)內(nèi)部的啟動(dòng)命令)
default num
設(shè)置菜單中的默認(rèn)選項(xiàng)為num(默認(rèn)為0,即第一個(gè)選項(xiàng)),超時(shí)將啟動(dòng)這個(gè)選項(xiàng)
fallback num
如果默認(rèn)菜單項(xiàng)啟動(dòng)失敗,將啟動(dòng)這個(gè)num后援選項(xiàng)。
password passwd new-config-file
關(guān)閉命令行模式和菜單編輯模式,要求輸入口令,如果口令輸入正確,將使用new-config-file
作為新的配置文件代替menu.lst,并繼續(xù)引導(dǎo)。
timeout sec
設(shè)置超時(shí),將在sec秒后自動(dòng)啟動(dòng)默認(rèn)選項(xiàng)。
title name ...
開(kāi)始一個(gè)新的菜單項(xiàng),并以title后的字串作為顯示的菜單名。
在菜單(不包括菜單項(xiàng)內(nèi)部的命令)和命令行方式下都可用的命令
bootp
以BOOTP協(xié)議初始化網(wǎng)絡(luò)設(shè)備
color normal [highlight]
改變菜單的顏色,normal是用于指定菜單中非當(dāng)前選項(xiàng)的行的顏色,highlight是用于指定當(dāng)前菜單選項(xiàng)的顏色。如果不指定 highlight,GRUB將使用normal的反色來(lái)作為highlight顏色。指定顏色的格式是“前景色/背景色”,前景色和背景色的可選列表如下:
* black
* blue
* green
* cyan
* red
* magenta
* brown
* light-gray
下面的顏色只能用于背景色
* dark-gray
* light-blue
* light-green
* light-cyan
* light-red
* light-magenta
* yellow
* white
你可以在前景色前加上前綴"blink-",產(chǎn)生閃爍效果,你可以在menu.lst中加上下面這個(gè)選項(xiàng)來(lái)改變顏色效果:
title OS-BS like
color magenta/blue black/magenta
device drive file
在GRUB命令行中,把BIOS中的一個(gè)驅(qū)動(dòng)器drive映射到一個(gè)文件file。你可以用這條命令創(chuàng)建一個(gè)磁盤(pán)映象或者當(dāng)GRUB不能真確地判斷驅(qū)動(dòng)器時(shí)進(jìn)行糾正。如下
grub> device (fd0) /floppy-image
grub> device (hd0) /dev/sd0
這條命令只能在命令行方式下使用, 是個(gè)例外。
dhcp
用DHCP協(xié)議初始化網(wǎng)絡(luò)設(shè)備。目前而言,這條指令其實(shí)就是bootp的別名,效果和bootp一樣。
hide partition
這條指令僅僅對(duì)DOS和WINDOWS有用,當(dāng)在一個(gè)硬盤(pán)上存在多個(gè)DOS/WIN的主分區(qū)時(shí),有時(shí)需要這條指令隱藏其中的一個(gè)或幾個(gè)分區(qū),即在分區(qū)表中設(shè)置“隱藏”位。
rarp
用RARP協(xié)議初始化網(wǎng)絡(luò)設(shè)備。
setkey to_key from_key
改變鍵盤(pán)的映射表,將from_key映射到to_key,注意這條指令并不是交換鍵映射,如果你要交換兩個(gè)鍵的映射,需要用兩次setkey指令,如下:
grub> setkey capslock control
grub> setkey control capslock
其中的鍵必須是字母,數(shù)字或者下面的一些代表某一鍵的字符串:
`escape', `exclam', `at', `numbersign', `dollar', `percent',
`caret', `ampersand', `asterisk', `parenleft', `parenright',
`minus', `underscore', `equal', `plus', `backspace', `tab',
`bracketleft', `braceleft', `bracketright', `braceright', `enter',
`control', `semicolon', `colon', `quote', `doublequote',
`backquote', `tilde', `shift', `backslash', `bar', `comma',
`less', `period', `greater', `slash', `question', `alt', `space',
`capslock', `FX' (`X' is a digit), and `delete'.
下面給出了它們和鍵盤(pán)上的鍵的對(duì)應(yīng)關(guān)系:
`exclam'=`!'
`at'=
unhide partition
僅僅對(duì)DOS/WIN分區(qū)有效,清除分區(qū)表中的“隱藏”位。
僅用于命令行方式或者菜單項(xiàng)內(nèi)部的命令
blocklist file
顯示文件file在所占磁盤(pán)塊的列表。
boot
僅在命令行模式下需要,當(dāng)參數(shù)都設(shè)定完成后,用這條指令啟動(dòng)操作系統(tǒng)
cat file
顯示文件file的內(nèi)容,可以用來(lái)得到某個(gè)操作系統(tǒng)的根文件系統(tǒng)所在的分區(qū),如下:
grub> cat /etc/fstab
chainloader [`--force'] file
把file裝入內(nèi)存進(jìn)行chainload,除了能夠通過(guò)文件系統(tǒng)得到文件外,這條指令也可以用磁盤(pán)塊列表的方式讀入磁盤(pán)中的數(shù)據(jù)塊,如'+1`指定從 當(dāng)前分區(qū)讀出第一個(gè)扇區(qū)進(jìn)行引導(dǎo)。如果指定了`--force`參數(shù),則無(wú)論文件是否有合法的簽名都強(qiáng)迫讀入,當(dāng)你在引導(dǎo)SCO UnixWare時(shí)需要用這個(gè)參數(shù)。
cmp file1 file2
比較文件的內(nèi)容,如果文件大小不一致,則輸出兩個(gè)文件的大小,如下:
Differ in size: 0x1234 [foo], 0x4321 [bar]
如果兩個(gè)文件的大小一致但是在某個(gè)位置上的字節(jié)不同,則打印出不同的字節(jié)和他們的位移:
Differ at the offset 777: 0xbe [foo], 0xef [bar]
如果兩個(gè)文件完全一致,則什么都不輸出。
configfile FILE
將FILE作為配置文件替代menu.lst。
embed stage1_5 device
如果device是一個(gè)磁盤(pán)設(shè)備的話,將Stage1_5裝入緊靠MBR的扇區(qū)內(nèi)。如果device是一個(gè)FFS文件系統(tǒng)分區(qū)的話,則將Stage1_5裝入此分區(qū)的第一扇區(qū)。如果裝入成功的話,輸出寫(xiě)入的扇區(qū)數(shù)。
displaymem
顯示出系統(tǒng)所有內(nèi)存的地址空間分布圖。
find filename
在所有的分區(qū)中尋找指定的文件filename,輸出所有包含這個(gè)文件的分區(qū)名。參數(shù)filename應(yīng)該給出絕對(duì)路徑。
fstest
啟動(dòng)文件系統(tǒng)測(cè)試模式。打開(kāi)這個(gè)模式后,每當(dāng)有讀設(shè)備請(qǐng)求時(shí),輸出向底層例程讀請(qǐng)求的參數(shù)和所有讀出的數(shù)據(jù)。輸出格式如下:
先是由高層程序發(fā)出的分區(qū)內(nèi)的讀請(qǐng)求,輸出:<分區(qū)內(nèi)的扇區(qū)偏移,偏移(字節(jié)數(shù)),長(zhǎng)度(字節(jié)數(shù))>之后由底層程序發(fā)出的扇區(qū)讀請(qǐng)求,輸出:[磁盤(pán)絕對(duì)扇區(qū)偏移] 可以用install或者testload命令關(guān)閉文件系統(tǒng)測(cè)試模式。
geometry drive [cylinder head sector [total_sector]]
輸出驅(qū)動(dòng)器drive的信息。
help [pattern ...]
在線命令幫助,列出符合pattern的命令列表,如果不給出參數(shù),則將顯示所有的命令列表。
impsprobe
檢測(cè)Intel多處理器,啟動(dòng)并配置找到的所有CPU。
initrd file ...
為L(zhǎng)inux格式的啟動(dòng)映象裝載初始化的ramdisk,并且在內(nèi)存中的Linux setup area中設(shè)置適當(dāng)?shù)膮?shù)。
install stage1_file [`d'] dest_dev stage2_file [addr] [`p'] [config_file] [real_config_file]
這是用來(lái)完全安裝GRUB啟動(dòng)塊的命令,一般很少用到。
ioprobe drive
探測(cè)驅(qū)動(dòng)器drive所使用的I/O口,這條命令將會(huì)列出所有dirve使用的I/O口。
kernel file ...
裝載內(nèi)核映象文件(如符合Multiboot的a.out,ELF,Linux zImage或bzImage,FreeBSD a.out,NetBSD
a.out等等)。文件名file后可跟內(nèi)核啟動(dòng)時(shí)所需要的參數(shù)。如果使用了這條指令所有以前裝載的模塊都要重新裝載。
makeactive
使當(dāng)前的分區(qū)成為活躍分區(qū),這條指令的對(duì)象只能是PC上的主分區(qū),不能是擴(kuò)展分區(qū)。
map to_drive from_drive
映射驅(qū)動(dòng)器from_drive到to_drive。這條指令當(dāng)你在chainload一些操作系統(tǒng)的時(shí)候可能是必須的,這些操作系統(tǒng)如果不是在第一個(gè)硬盤(pán)上可能不能正常啟動(dòng),所以需要進(jìn)行映射。如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
這個(gè)就用來(lái)對(duì)付雙硬盤(pán)最過(guò)癮?。?!哈哈
module file ...
對(duì)于符合Multiboot規(guī)范的操作系統(tǒng)可以用這條指令來(lái)裝載模塊文件file,file后可以跟這個(gè)module所需要的參數(shù)。注意,必須先裝載內(nèi)核,再裝載模塊,否則裝載的模塊無(wú)效。
modulenounzip file ...
同module命令幾乎一樣,唯一的區(qū)別是不對(duì)module文件進(jìn)行自動(dòng)解壓。
pause message ...
輸出字符串message,等待用戶按任意鍵繼續(xù)。你可以用<^G>(ASCII碼007)使PC喇叭發(fā)聲提醒用戶注意。
quit
退出GRUB shell,GRUB shell類(lèi)似于啟動(dòng)時(shí)的命令行模式,只是它是在用戶啟動(dòng)系統(tǒng)后執(zhí)行/sbin/grub才
進(jìn)入,兩者差別不大。
read addr
從內(nèi)存的地址addr處讀出32位的值并以十六進(jìn)制顯示出來(lái)。
root device [hdbias]
將當(dāng)前根設(shè)備設(shè)為device,并且試圖mount這個(gè)根設(shè)備得到分區(qū)大小。hdbias參數(shù)是用來(lái)告訴BSD內(nèi)核在當(dāng)前分區(qū)所在磁盤(pán)的前面還有多少個(gè) BIOS磁盤(pán)編號(hào)。例如,系統(tǒng)有一個(gè)IDE硬盤(pán)和一個(gè)SCSI硬盤(pán),而你的BSD安裝在IDE硬盤(pán)上,此時(shí),你就需要指定hdbias參數(shù)為1。
rootnoverify device [hdbias]
和root類(lèi)似,但是不mount該設(shè)備。這個(gè)命令用在當(dāng)GRUB不能識(shí)別某個(gè)硬盤(pán)文件系統(tǒng),但是仍然必須指定根設(shè)備。
setup install_device [image_device]
安裝GRUB引導(dǎo)在install_device上。這條指令實(shí)際上調(diào)用的是更加靈活但是復(fù)雜的install指令。如果
image_device也指定了的話,則將在image_device中尋找GRUB的文件映象,否則在當(dāng)前根設(shè)備中查找。
testload file
這條指令是用來(lái)測(cè)試文件系統(tǒng)代碼的,它以不同的方式讀取文件file的內(nèi)容,并將得到的結(jié)果進(jìn)行比較,如果正確的話,輸出的`i=X,filepos= Y`中的X,Y的值應(yīng)該相等,否則就說(shuō)明有錯(cuò)誤。通常這條指令正確執(zhí)行的話,之后我們就可以正確無(wú)誤地裝載內(nèi)核。
uppermem kbytes
強(qiáng)迫GRBU認(rèn)為高端內(nèi)存只有kbytes千字節(jié)的內(nèi)存,GRUB自動(dòng)探測(cè)到的結(jié)果將變得無(wú)效。這條指令很少使用,可能只在一些古老的機(jī)器上才有必要。通常GRUB都能夠正確地得到系統(tǒng)的內(nèi)存數(shù)量。
Grub命令詳解
一、菜單命令
菜單命令只能用于grub配置文件的全局配置部分,不能用在grub命令行交互界面,菜單命令在配置文件中應(yīng)放在其它命令之前。
1、default //設(shè)置默認(rèn)啟動(dòng)的菜單項(xiàng)
2、fallback //設(shè)置啟動(dòng)某菜單項(xiàng)失敗后反回的菜單項(xiàng)
3、hiddenmenu //隱藏菜單界面
4、timeout //設(shè)置菜單自動(dòng)啟動(dòng)的延時(shí)時(shí)間
5、title //開(kāi)始一個(gè)菜單項(xiàng)
二、常規(guī)命令
常規(guī)命令可以應(yīng)該于配置文件和grub命令行交互界面,可使用的常規(guī)命令有
1、bootp //通過(guò)bootp初始化網(wǎng)絡(luò)設(shè)備
2、color //設(shè)置菜單界面的顏色
3、device //指定設(shè)備文件作為驅(qū)動(dòng)器
4、dhcp //通過(guò)DHCP初始化網(wǎng)絡(luò)設(shè)備
5、hide //隱藏某分區(qū)
6、ifconfig //手工配置網(wǎng)絡(luò)設(shè)備
7、pager //改變內(nèi)部頁(yè)程序的狀態(tài)
8、partnew //新建一個(gè)主分區(qū)
9、parttype //改變分區(qū)的類(lèi)型
10、password 為菜單界面設(shè)置口令
11、rarp //通過(guò)RARP初始化網(wǎng)絡(luò)設(shè)置
12、serial //設(shè)置串口設(shè)備
13、setkey //設(shè)置鍵盤(pán)映射
14、splashimage //設(shè)置GRUB啟動(dòng)時(shí)的背景圖片文件
15、termainal //選擇終端類(lèi)型
16、tftpserver //指定TFTP服務(wù)器
17、unhide //還原某隱藏分區(qū)
三、命令行和菜單項(xiàng)命令
命令行和菜單項(xiàng)命令可應(yīng)該于GRUB配置文件的菜單項(xiàng)設(shè)置中,也可以用在GRUB命令交互界面。
1、bolcklist //顯示某文件所在分區(qū)位置(block list notation)
2、boot //啟動(dòng)操作系統(tǒng)
3、cat //顯示文件內(nèi)容
4、chainloader //把啟動(dòng)控制權(quán)軟交給另外的啟動(dòng)引導(dǎo)器
5、cmp //比較兩個(gè)文件
6、configfile //加載已存在的GRUB配置文件
7、debug //設(shè)置為debug模式
8、displayapm //顯示APM BIOS信息
9、displaymem //顯示內(nèi)存配置
10、embed //嵌入Stage 1.5文件
11、find //查找包括某文件的所有設(shè)備
12、fstest //測(cè)試文件系統(tǒng)
13、geometry //顯示某驅(qū)動(dòng)器的物理信息
14、halt //停止計(jì)算機(jī)運(yùn)行(軟件關(guān)機(jī))
15、help //顯示GRUB的命令幫助信息
16、impsprobe //查詢對(duì)稱(chēng)多處理器(SMP)的信息
17、initrd //加載initrd文件
18、install //安裝GRUB
19、ioprobe //查詢某驅(qū)動(dòng)器的輸入輸出(I/O)端口
20、kernel //引導(dǎo)操作系統(tǒng)內(nèi)核
21、lock //鎖定某GRUB導(dǎo)菜單項(xiàng),使其輸入密碼后才可啟動(dòng)
22、makeactive //激活某主分區(qū)
23、map //虛擬映射某驅(qū)動(dòng)器
24、md5crypt //使用MD5加密口令
25、module //加載模塊
26、modulenounzip //加載模塊不進(jìn)行解壓
27、pause //暫停并等待按鍵
28、quit //退出GRUB
29、reboot //重新啟動(dòng)計(jì)算機(jī)
30、read //讀取內(nèi)存中的內(nèi)容
31、root //設(shè)置GRUB的root設(shè)備
32、rootnoverify //設(shè)備GRUB的root設(shè)備但不裝載文件系統(tǒng)
33、savedefault //保存當(dāng)前的啟動(dòng)菜單項(xiàng)為默認(rèn)啟動(dòng)
34、setup //自動(dòng)安裝GRUB
35、testload //從文件系統(tǒng)中測(cè)試讀取某文件
36、testvbe //測(cè)試VESA BIOS EXTENSION
37、uppermem //強(qiáng)制設(shè)置主機(jī)上位內(nèi)存的大小
38、vbeprobe //查詢VESA BIOS EXTENSION信息
GRUB的啟動(dòng)過(guò)程解釋
GRUB 引導(dǎo)分為stage1和stage2兩個(gè)部分。如果安裝GRUB于MBR當(dāng)中,則stage1直接寫(xiě)入了MBR,這樣機(jī)器一啟動(dòng)就將控制權(quán)交給了GRUB 的代碼。如果GRUB安裝在BR當(dāng)中,則需要有另外一個(gè)OS loader讀入BR當(dāng)中的stage1后才能把控制權(quán)交給GRUB。接下來(lái)的步驟是stage1找到stage2并將控制權(quán)交給stage2。這里有兩 種方式,一種是直接方式,stage1根據(jù)記載的stage2所在硬盤(pán)的位置直接將stage2找到;另一種是間接方式,這需要stage1_5也就是通 常說(shuō)的stage1.5,通過(guò)stage1.5對(duì)文件系統(tǒng)的 分析,通過(guò)路徑方式找到stage2。stage1.5根據(jù)不同的文件系統(tǒng)有不同的版本,如果使用stage1.5,則該文件實(shí)際是嵌入到BR/MBR之 后的若干扇區(qū)內(nèi)的。也就是說(shuō),安裝好的GRUB,實(shí)際發(fā)揮作用的是stage2,而stage1/1.5都直接內(nèi)嵌到BR/MBR當(dāng)中,存在于硬盤(pán)文件上 的它們是不起作用的。因此,如果不希望改動(dòng)windows系統(tǒng)的BR/MBR,則需要采用直接方式,找到stage2的位置,而stage1則使用直接的 文件由NT loader去調(diào)用(此時(shí)stage1文件是起作用的?。?br> GRUB引導(dǎo)的詳細(xì)過(guò)程是(無(wú)stage1.5文件):
1、系統(tǒng)上電加載stage1(512B)
2、在stage1 0x40位置上得到boot drive信息(通常是0x80),0x41位置上得到force LBA標(biāo)志
3、在0x42~43位置上(1 word)得到stage2加載到內(nèi)存中的地址——0x8000,若使用stage1.5此值應(yīng)當(dāng)為0x2000
4、在0x44~47位置上得到stage2首扇區(qū)的位置
5、在0x48~49位置上得到stage2加載到內(nèi)存當(dāng)中的段地址,因?yàn)槭菍?shí)模式工作,所以參照第三條,應(yīng)當(dāng)分別是0x0800和0x0200
6、根據(jù)step 4得到的位置加載stage2首扇區(qū)到內(nèi)存0x8000位置
7、從stage2首扇區(qū)末8字節(jié)得到stage2下一個(gè)blocklist位置,這8個(gè)字節(jié)的格式是:0~3,4字節(jié)表示的起始扇區(qū)位置,4~5,2字 節(jié)表示的這個(gè)blocklist所包含的扇區(qū)數(shù),6~7,2字節(jié)表示這個(gè)blocklist的數(shù)據(jù)應(yīng)當(dāng)放置到的內(nèi)存段地址,第一個(gè)blocklist的段 地址都是0x0820(0x8000 + 512B = 0x8200,然后取段地址)
8、在7的基礎(chǔ)上再往前seek 8字節(jié),若不為0,則表明數(shù)據(jù)為下一個(gè)blocklist,按照7的數(shù)據(jù)說(shuō)明將它們加載到內(nèi)存。重復(fù)本步驟直到所有的blocklist加載到內(nèi)存
9、此時(shí)stage2已全部加載完畢,控制權(quán)可交給stage2
硬盤(pán)主引導(dǎo)扇區(qū)、分區(qū)表和分區(qū)引導(dǎo)扇區(qū)(MBR、DPT、DBR、BPB)詳解
硬盤(pán)的主引導(dǎo)扇區(qū),分區(qū)表,分區(qū)引導(dǎo)扇區(qū)(MBR、DPT、DBR、BPB)是電腦BIOS自檢完成后,操作系統(tǒng)開(kāi)始引導(dǎo)系統(tǒng)前整個(gè)電腦運(yùn)作過(guò)程中需要 檢查的重要參數(shù),硬盤(pán)的主引導(dǎo)扇區(qū),分區(qū)表,分區(qū)引導(dǎo)扇區(qū)(MBR、DPT、DBR、BPB)參數(shù)錯(cuò)誤可能導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)或存儲(chǔ)的數(shù)據(jù)丟失,這片文章我 們介紹一下硬盤(pán)的主引導(dǎo)扇區(qū),分區(qū)表,分區(qū)引導(dǎo)扇區(qū)(MBR、DPT、DBR、BPB)的詳細(xì)信息。
硬盤(pán)的0柱面、0磁頭、1扇區(qū)稱(chēng)為主引導(dǎo)扇區(qū)(也叫主引導(dǎo)記錄MBR),該記錄占用512個(gè)字節(jié),它用于硬盤(pán)啟動(dòng)時(shí)將系統(tǒng)控制權(quán)轉(zhuǎn)給用戶指定的、在分 區(qū)表中登記了某個(gè)操作系統(tǒng)分區(qū)。MBR的內(nèi)容是在硬盤(pán)分區(qū)時(shí)由分區(qū)軟件(如FDISK)寫(xiě)入該扇區(qū)的,MBR不屬于任何一個(gè)操作系統(tǒng),不隨操作系統(tǒng)的不同 而不同,即使不同,MBR也不會(huì)夾帶操作系統(tǒng)的性質(zhì),具有公共引導(dǎo)的特性。但安裝某些多重引導(dǎo)功能的軟件或LINUX的LILO時(shí)有可能改寫(xiě)它;它先于所 有的操作系統(tǒng)被調(diào)入內(nèi)存并發(fā)揮作用,然后才將控制權(quán)交給活動(dòng)主分區(qū)內(nèi)的操作系統(tǒng)(下圖)。
MBR由三部分構(gòu)成:
1.主引導(dǎo)程序代碼,占446字節(jié)
2.硬盤(pán)分區(qū)表DPT,占64字節(jié)
3.主引導(dǎo)扇區(qū)結(jié)束標(biāo)志AA55H
一、硬盤(pán)的主引導(dǎo)程序代碼是從偏移0000H開(kāi)始到偏移01BDH結(jié)束的446字節(jié);主引導(dǎo)程序代碼包括一小段執(zhí)行代碼。啟動(dòng)PC 機(jī)時(shí),系統(tǒng)首先對(duì)硬件設(shè)備進(jìn)行測(cè)試,成功后進(jìn)入自舉程序INT 19H;然后讀系統(tǒng)磁盤(pán)0柱面、0磁頭、1扇區(qū)的主引導(dǎo)扇區(qū)MBR的內(nèi)容到內(nèi)存指定單元0:7C00 首地址開(kāi)始的區(qū)域,并執(zhí)行MBR程序段。
主引導(dǎo)代碼實(shí)現(xiàn)下列功能:
1.掃描分區(qū)表查找活動(dòng)分區(qū);
2.尋找活動(dòng)分區(qū)的起始扇區(qū);
3.將活動(dòng)分區(qū)的引導(dǎo)扇區(qū)讀到內(nèi)存;
4.執(zhí)行引導(dǎo)扇區(qū)的運(yùn)行代碼。
如果主引導(dǎo)代碼未完成這些功能,系統(tǒng)顯示下列錯(cuò)誤信息:
Invalid partition table
Error loading operating system
Missing operating system
二、硬盤(pán)分區(qū)表DPT是從偏移01BEH開(kāi)始到偏移01FDH結(jié)束的64字節(jié)(下圖);硬盤(pán)分區(qū)表分為四小部分,每一小部分表示一個(gè)分區(qū)的信息,占 16字節(jié)。在這里我們可以看出,硬盤(pán)的總分區(qū)數(shù)為什么不能大于4。其中可激活分區(qū)數(shù)不得大于3,擴(kuò)展分區(qū)數(shù)不得大于1,當(dāng)前活動(dòng)分區(qū)數(shù)必須小于等于 1。
分區(qū)表的每一分區(qū)的第0個(gè)字節(jié)是自舉標(biāo)志,其值為80H時(shí),表示該分區(qū)是當(dāng)前活動(dòng)分區(qū),可引導(dǎo),其值為00H時(shí),表示該分區(qū)不可引導(dǎo)。
第4字節(jié)是分區(qū)類(lèi)型(下圖)。
每一分區(qū)的第1至第3字節(jié)是該分區(qū)起始地址。其中第1字節(jié)為起始磁頭號(hào)(面號(hào));第2字節(jié)的低6位為起始扇區(qū)號(hào),高2位則為起始柱面號(hào)的高2 位;第3字節(jié)為起始柱面號(hào)的低8位。因此,分區(qū)的起始柱面號(hào)是用10位二進(jìn)制數(shù)表示的,最大值為2^10 = 1024,因邏輯柱面號(hào)從0開(kāi)始計(jì),故柱面號(hào)的顯示最大值為1023。同理,用6位二進(jìn)制數(shù)表示的扇區(qū)號(hào)不會(huì)超過(guò)2^6 - 1 = 63;用8位二進(jìn)制數(shù)表示的磁頭號(hào)不會(huì)超過(guò)2^8 - 1 = 255。每一分區(qū)的第5至第7字節(jié)表示分區(qū)的終止地址,各字節(jié)的釋義與第1至第3字節(jié)相同。這里我們假設(shè)一種極端的情況:如果讓第5至第7字節(jié)的所有二進(jìn) 制位都取1,就獲得了柱面號(hào)、磁頭號(hào)和扇區(qū)號(hào)所能表示的最大值,從而得到最大絕對(duì)扇區(qū)號(hào)為:
1024 × 256 × 63 = 16,515,072
這個(gè)扇區(qū)之前的所有物理扇區(qū)所包含的字節(jié)數(shù)為:
16,515,072 × 512Bytes ≈ 8.46GB。
由此可知硬盤(pán)的容量設(shè)計(jì)為什么會(huì)有8.4GB這一檔,分區(qū)表每一分區(qū)的第1至第3字節(jié)以及第5至第7字節(jié)的數(shù)據(jù)結(jié)構(gòu)已經(jīng)不能滿足大于 8.46GB的大容量硬盤(pán)的需要??紤]到向下兼容的需要,業(yè)界并未對(duì)從DOS時(shí)代就如此定義的硬盤(pán)分區(qū)表提出更改意見(jiàn),否則改動(dòng)所牽涉的面太廣,會(huì)造成硬 件和軟件發(fā)展上的一個(gè)斷層,幾乎無(wú)法被業(yè)界和用戶所接受。硬盤(pán)廠商解決這一問(wèn)題的方法是定義了新的INT 13服務(wù)擴(kuò)展標(biāo)準(zhǔn)。新的INT 13服務(wù)擴(kuò)展標(biāo)準(zhǔn)不再使用操作系統(tǒng)的寄存器傳遞硬盤(pán)的尋址參數(shù),而使用存儲(chǔ)在操作系統(tǒng)內(nèi)存里的地址包。地址包里保存的是64位LBA地址,如果硬盤(pán)支持 LBA尋址,就把低28位直接傳遞給ATA接口,如果不支持,操作系統(tǒng)就先把LBA地址轉(zhuǎn)換為CHS地址,再傳遞給ATA接口。通過(guò)這種方式,能實(shí)現(xiàn)在 ATA總線基礎(chǔ)上CHS尋址的最大容量是136.9 GB,而LBA尋址的最大容量是137.4GB。新的硬盤(pán)傳輸規(guī)范ATA 133規(guī)范又把28位可用的寄存器空間提高到48位,從而支持更大的硬盤(pán)。
分區(qū)表每一分區(qū)的第8至第11字節(jié)表示該分區(qū)的起始相對(duì)扇區(qū)數(shù)(即該扇區(qū)之前的絕對(duì)扇區(qū)個(gè)數(shù)),高位在右,低位在左;第12至第15字節(jié)表示該分區(qū)實(shí) 際占用的扇區(qū)數(shù),也是高位在右,低位在左;分區(qū)表這類(lèi)數(shù)據(jù)結(jié)構(gòu)的表達(dá)方式與機(jī)器中數(shù)據(jù)的實(shí)際存儲(chǔ)方式在順序上是一致的,即低位在前,高位在后。因此,在從 16進(jìn)制向十進(jìn)制作數(shù)值轉(zhuǎn)換時(shí),需將字段中的16進(jìn)制數(shù)以字節(jié)為單位翻轉(zhuǎn)調(diào)位,用4個(gè)字節(jié)可以表示最大2^32個(gè)扇區(qū),即2TB=2048GB。
系統(tǒng)在分區(qū)時(shí),各分區(qū)都不允許跨柱面,即均以柱面為單位,這就是通常所說(shuō)的分區(qū)粒度。在未超過(guò)8.4GB的分區(qū)上,C/H/S的表示方法和扇區(qū)數(shù)的表 示方法所表示的分區(qū)大小是一致的。超過(guò)8.4GB的/H/S/C一般填充為FEH/FFH/FFH,即C/H/S所能表示的最大值;有時(shí)候也會(huì)用柱面對(duì) 1024的模來(lái)填充。不過(guò)這幾個(gè)字節(jié)是什么其實(shí)都無(wú)關(guān)緊要了。
擴(kuò)展分區(qū)中的每個(gè)邏輯驅(qū)動(dòng)器都存在一個(gè)類(lèi)似于MBR的擴(kuò)展引導(dǎo)記錄(Extended Boot Record,EBR)。
擴(kuò)展引導(dǎo)記錄包括一個(gè)擴(kuò)展分區(qū)表和扇區(qū)結(jié)束標(biāo)志55AA。一個(gè)邏輯驅(qū)動(dòng)器中的引導(dǎo)扇區(qū)一般位于相對(duì)扇區(qū)32或63。如果磁盤(pán)上沒(méi)有擴(kuò)展分區(qū),那么就不 會(huì)有擴(kuò)展引導(dǎo)記錄和邏輯驅(qū)動(dòng)器。第一個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表中的第一項(xiàng)指向它自身的引導(dǎo)扇區(qū);第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR,如果不存在進(jìn)一步的 邏輯驅(qū)動(dòng)器,第二項(xiàng)就不會(huì)使用,而被記錄成一系列零。如果有附加的邏輯驅(qū)動(dòng)器,那么第二個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表的第一項(xiàng)會(huì)指向它本身的引導(dǎo)扇區(qū),第二個(gè) 邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表的第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR。擴(kuò)展分區(qū)表的第三項(xiàng)和第四項(xiàng)永遠(yuǎn)都不會(huì)被使用。
擴(kuò)展分區(qū)表項(xiàng)中的相對(duì)扇區(qū)數(shù)是從擴(kuò)展分區(qū)開(kāi)始的扇區(qū)到該邏輯驅(qū)動(dòng)器中第一個(gè)扇區(qū)的扇區(qū)數(shù);占用的扇區(qū)數(shù)是指組成該邏輯驅(qū)動(dòng)器的扇區(qū)數(shù)目。
有時(shí)候在磁盤(pán)的末尾會(huì)有剩余空間,由于分區(qū)是以1柱面的容量為分區(qū)粒度的,那么如果磁盤(pán)總空間不是整數(shù)個(gè)柱面的話,不夠一個(gè)柱面的剩下的空間就是剩余空間了,這部分空間并不參與分區(qū),所以一般無(wú)法利用。
三、主引導(dǎo)扇區(qū)的最后兩個(gè)字節(jié)(偏移1FEH和偏移1FFH),其值為AA55H,它表示該扇區(qū)是個(gè)有效的引導(dǎo)扇區(qū),可用來(lái)引導(dǎo)硬磁盤(pán)系統(tǒng)。
分區(qū)引導(dǎo)扇區(qū)DBR(DOS BOOT RECORD)是由FORMAT高級(jí)格式化命令寫(xiě)到該扇區(qū)的內(nèi)容;DBR是由硬盤(pán)的MBR裝載的程序段。DBR裝入內(nèi)存后,即開(kāi)始執(zhí)行該引導(dǎo)程序段,其主 要功能是完成操作系統(tǒng)的自舉并將控制權(quán)交給操作系統(tǒng)。每個(gè)分區(qū)都有引導(dǎo)扇區(qū),但只有被設(shè)為活動(dòng)分區(qū)的DBR才會(huì)被MBR裝入內(nèi)存運(yùn)行。
DBR主要由下列幾個(gè)部分組成:
1.跳轉(zhuǎn)指令,占用3個(gè)字節(jié)的跳轉(zhuǎn)指令將跳轉(zhuǎn)至引導(dǎo)代碼。
2.廠商標(biāo)識(shí)和DOS版本號(hào),該部分總共占用8個(gè)字節(jié)。
3.BPB(BIOS Parameter Block, BIOS 參數(shù)塊)。
4.操作系統(tǒng)引導(dǎo)程序。
5.結(jié)束標(biāo)志字,結(jié)束標(biāo)志占用2個(gè)字節(jié),其值為AA55
DBR中的內(nèi)容除了第5部分結(jié)束標(biāo)志字固定不變之外,其余4個(gè)部分都是不確定的,其內(nèi)容將隨格式化所用的操作系統(tǒng)版本及硬盤(pán)的邏輯盤(pán)參數(shù)的變化而變化。
-------------------------------下面是2樓中的圖,編輯錯(cuò)了 ,版版能不能把這幾個(gè)圖刪了
附件
5.jpg (195.24 KB)
2008-11-2 20:57
6.jpg (171.03 KB)
2008-11-2 20:57
7.jpg (176.64 KB)
2008-11-2 20:57
8.jpg (194.33 KB)
2008-11-2 20:57
9.jpg (191.92 KB)
2008-11-2 20:57
10.jpg (93.84 KB)
2008-11-2 20:57
TOP
zw2312914
少將
? 個(gè)人空間
? 發(fā)短消息
? 加為好友
? 當(dāng)前離線 2# 大 中 小 發(fā)表于 2008-11-2 20:58 只看該作者
一、FAT32的分區(qū)引導(dǎo)扇區(qū)
為了使加載文件的操作更加靈活,加上FAT32文件系統(tǒng)采用"活動(dòng)"的FDT表,,同時(shí)考慮到引導(dǎo)程序的代碼量和為今后發(fā)展保留適當(dāng)?shù)挠?量,F(xiàn)AT32文件系統(tǒng)分區(qū)引導(dǎo)扇區(qū)占據(jù)了6個(gè)扇區(qū),只有前3個(gè)扇區(qū)作為系統(tǒng)的分區(qū)引導(dǎo)扇區(qū),其余3個(gè)扇區(qū)保留暫未使用。分區(qū)引導(dǎo)扇區(qū)對(duì)于操作系統(tǒng)的啟動(dòng) 和磁盤(pán)文件的訪問(wèn)具有至關(guān)重要的作用;引導(dǎo)程序代碼的損壞將導(dǎo)致操作系統(tǒng)不能正常啟動(dòng),磁盤(pán)讀寫(xiě)參數(shù)的破壞將造成存儲(chǔ)在磁盤(pán)上的文件不能正常讀寫(xiě)。
由于分區(qū)引導(dǎo)扇區(qū)的重要性,F(xiàn)AT32文件系統(tǒng)在在第一個(gè)分區(qū)引導(dǎo)扇區(qū)的6個(gè)扇區(qū)后的6個(gè)扇區(qū)里保留了分區(qū)引導(dǎo)扇區(qū)的備份,在啟動(dòng)時(shí)操作系統(tǒng)可以對(duì)兩 份引導(dǎo)扇區(qū)進(jìn)行比較,以便選擇正確的引導(dǎo)扇區(qū)來(lái)引導(dǎo)系統(tǒng)。由于在磁盤(pán)正常工作過(guò)程中系統(tǒng)不再對(duì)引導(dǎo)扇區(qū)的程序和數(shù)據(jù)進(jìn)行修改,因此備份的分區(qū)引導(dǎo)扇區(qū)損壞 的可能性非常小。
分區(qū)引導(dǎo)扇區(qū)的第一個(gè)扇區(qū)(圖六)的前三個(gè)字節(jié)是一條跳轉(zhuǎn)指令,然后是8個(gè)字節(jié)長(zhǎng)的OEM ID(廠家標(biāo)識(shí))和版本號(hào),其后是簡(jiǎn)稱(chēng)為BPB的BIOS參數(shù)塊(BIOS Parameter Block)。
對(duì)于FAT32其各部分的意義如下表:
從偏移0x5A開(kāi)始的數(shù)據(jù)為操作系統(tǒng)引導(dǎo)代碼。這是由偏移0x00開(kāi)始的跳轉(zhuǎn)指令所指向的,此段指令在不同的操作系統(tǒng)上和不同的引導(dǎo)方式上,其內(nèi)容也是不同的。
扇區(qū)的最后兩個(gè)字節(jié)存儲(chǔ)值為0x55AA的DBR有效標(biāo)志,對(duì)于其他的取值,系統(tǒng)將不會(huì)執(zhí)行DBR相關(guān)指令。
分區(qū)引導(dǎo)扇區(qū)的第2個(gè)扇區(qū)作為文件系統(tǒng)相關(guān)參數(shù)存儲(chǔ)標(biāo)識(shí)扇區(qū)(下圖),除了保存扇區(qū)的標(biāo)識(shí)信息(RraA(00H)和rrAa(1E4H))外,還可能在 偏移地址1E8H處存儲(chǔ)了文件系統(tǒng)有關(guān)的信息。其中扇區(qū)偏移地址1E8H~1EBH的4個(gè)字節(jié)存儲(chǔ)了邏輯磁盤(pán)中未使用的簇?cái)?shù),通常用于快速計(jì)算邏輯磁盤(pán)的 剩余空間(典型的操作是在資源管理器狀態(tài)欄上列出的"可用磁盤(pán)空間"參數(shù)),而1ECH~1EFH 4個(gè)字節(jié)給出了邏輯盤(pán)中下一個(gè)可以分配給文件使用的空閑簇的簇號(hào),這樣操作系統(tǒng)可以不訪問(wèn)FAT表就直接獲得磁盤(pán)剩余空間和可以分配的簇號(hào)。
分區(qū)引導(dǎo)扇區(qū)的第3個(gè)扇區(qū)則存儲(chǔ)了引導(dǎo)扇區(qū)的后一部分引導(dǎo)系統(tǒng)的程序代碼。
二、NTFS的分區(qū)引導(dǎo)扇區(qū)
對(duì)于NTFS分區(qū)來(lái)說(shuō),分區(qū)引導(dǎo)扇區(qū)DBR只占用一個(gè)扇區(qū)(下圖),并且在該分區(qū)的最后一個(gè)扇區(qū)做了備份;NTFS的引導(dǎo)扇區(qū)也是完成引導(dǎo)和定義分區(qū)參數(shù),NTFS分區(qū)的引導(dǎo)扇區(qū)不是分區(qū)的充分條件,它要求必須MFT中的系統(tǒng)記錄如$MFT等正常該分區(qū)才能正常訪問(wèn)。
其BPB參數(shù)如下表所示:
詳解硬盤(pán)MBR(轉(zhuǎn))
上一篇 / 下一篇 2009-01-23 18:06:11 / 個(gè)人分類(lèi):低層知識(shí)
查看( 276 ) / 評(píng)論( 0 ) / 評(píng)分( 0 / 0 )
硬盤(pán)是 現(xiàn)在計(jì)算機(jī)上最常用的存儲(chǔ)器之一。我們都知道,計(jì)算機(jī)之所以神奇,是因?yàn)樗哂懈咚俜治鎏幚頂?shù)據(jù)的能力。而這些數(shù)據(jù)都以文件的形式存儲(chǔ)在硬盤(pán)里。不過(guò),計(jì) 算機(jī)可不像人那么聰明。在讀取相應(yīng)的文件時(shí),你必須要給出相應(yīng)的規(guī)則。這就是分區(qū)概念。分區(qū)從實(shí)質(zhì)上說(shuō)就是對(duì)硬盤(pán)的一種格式化。當(dāng)我們創(chuàng)建分區(qū)時(shí),就已經(jīng)設(shè)置好了硬盤(pán)的各項(xiàng)物理參數(shù),指定了硬盤(pán)主引導(dǎo)記錄(即Master Boot Record,一般簡(jiǎn)稱(chēng)為MBR)和引導(dǎo)記錄備份的存放位置。而對(duì)于文件系統(tǒng)以及其他操作系統(tǒng)管理硬 盤(pán)所需要的信息則是通過(guò)以后的高級(jí)格式化,即Format命令來(lái)實(shí)現(xiàn)。面、磁道和扇區(qū)硬盤(pán)分區(qū)后,將會(huì)被劃分為面(Side)、磁道(Track)和扇區(qū) (Sector)。需要注意的是,這些只是個(gè)虛擬的概念,并不是真正在硬盤(pán)上劃軌道。先從面說(shuō)起,硬盤(pán)一般是由一片或幾片圓形薄膜疊加而成。我們所說(shuō),每 個(gè)圓形薄膜都有兩個(gè)“面”,這兩個(gè)面都是用來(lái)存儲(chǔ)數(shù)據(jù)的。按照面的多少,依次稱(chēng)為0面、1面、2面……由于每個(gè)面都專(zhuān)有一個(gè)讀寫(xiě)磁頭,也常用0頭 (head)、1頭……稱(chēng)之。按照硬盤(pán)容量和規(guī)格的不同,硬盤(pán)面數(shù)(或頭數(shù))也不一定相同,少的只有2面,多的可達(dá)數(shù)十面。各面上磁道號(hào)相同的磁道合起 來(lái),稱(chēng)為一個(gè)柱面(Cylinder)。
上 面我們提到了磁道的概念。那么究竟何為磁道呢?由于磁盤(pán)是旋轉(zhuǎn)的,則連續(xù)寫(xiě)入的數(shù)據(jù)是排列在一個(gè)圓周上的。我們稱(chēng)這樣的圓周為一個(gè)磁道。如果讀寫(xiě)磁頭沿著 圓形薄膜的半徑方向移動(dòng)一段距離,以后寫(xiě)入的數(shù)據(jù)又排列在另外一個(gè)磁道上。根據(jù)硬盤(pán)規(guī)格的不同,磁道數(shù)可以從幾百到數(shù)千不等;一個(gè)磁道上可以容納數(shù)KB的 數(shù)據(jù),而主機(jī)讀寫(xiě)時(shí)往往并不需要一次讀寫(xiě)那么多,于是,磁道又被劃分成若干段,每段稱(chēng)為一個(gè)扇區(qū)。一個(gè)扇區(qū)一般存放512字節(jié)的數(shù)據(jù)。扇區(qū)也需要編號(hào),同 一磁道中的扇區(qū),分別稱(chēng)為1扇區(qū),2扇區(qū)……
計(jì) 算機(jī)對(duì)硬盤(pán)的讀寫(xiě),處于效率的考慮,是以扇區(qū)為基本單位的。即使計(jì)算機(jī)只需要硬盤(pán)上存儲(chǔ)的某個(gè)字節(jié),也必須一次把這個(gè)字節(jié)所在的扇區(qū)中的512字節(jié)全部讀 入內(nèi)存,再使用所需的那個(gè)字節(jié)。不過(guò),在上文中我們也提到,硬盤(pán)上面、磁道、扇區(qū)的劃分表面上是看不到任何痕跡的,雖然磁頭可以根據(jù)某個(gè)磁道的應(yīng)有半徑來(lái) 對(duì)準(zhǔn)這個(gè)磁道,但怎樣才能在首尾相連的一圈扇區(qū)中找出所需要的某一扇區(qū)呢?原來(lái),每個(gè)扇區(qū)并不僅僅由512個(gè)字節(jié)組成的,在這些由計(jì)算機(jī)存取的數(shù)據(jù)的前、 后兩端,都另有一些特定的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成了扇區(qū)的界限標(biāo)志,標(biāo)志中含有扇區(qū)的編號(hào)和其他信息。計(jì)算機(jī)就憑借著這些標(biāo)志來(lái)識(shí)別扇區(qū)。硬盤(pán)的數(shù)據(jù)結(jié)構(gòu) 在上文中,我們談了數(shù)據(jù)在硬盤(pán)中的存儲(chǔ)的一般原理。為了能更深入地了解硬盤(pán),我們還必須對(duì)硬盤(pán)的數(shù)據(jù)結(jié)構(gòu)有個(gè)簡(jiǎn)單的了解。硬盤(pán)上的數(shù)據(jù)按照其不同的特點(diǎn)和 作用大致可分為5部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、DIR區(qū)和DATA區(qū)。
我們來(lái)分別介紹一下:
1.MBR 區(qū) MBR(Main Boot Record 主引導(dǎo)記錄區(qū))位于整個(gè)硬盤(pán)的0磁道0柱面1扇區(qū)。不過(guò),在總共512字節(jié)的主引導(dǎo)扇區(qū)中,MBR只占用了其中的446個(gè)字節(jié),另外的64個(gè)字節(jié)交給了 DPT(Disk Partition Table硬盤(pán)分區(qū)表),最后兩個(gè)字節(jié)“55,AA”是分區(qū)的結(jié)束標(biāo)志。這個(gè)整體構(gòu)成了硬盤(pán)的主引導(dǎo)扇區(qū)。
主引導(dǎo)記錄中包含了硬盤(pán)的一系列參數(shù)和一段引導(dǎo)程序。 其中的硬盤(pán)引導(dǎo)程序的主要作用是檢查分區(qū)表是否正確并且在系統(tǒng)硬件完成自檢以后引導(dǎo)具有激活標(biāo)志的分區(qū)上的操作系統(tǒng),并將控制權(quán)交給啟動(dòng)程序。MBR是由 分區(qū)程序(如Fdisk.exe)所產(chǎn)生的,它不依賴任何操作系統(tǒng),而且硬盤(pán)引導(dǎo)程序也是可以改變的,從而實(shí)現(xiàn)多系統(tǒng)共存。
下面,我們以一個(gè)實(shí)例讓大家更直觀地來(lái)了解主引導(dǎo)記錄:
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00 在這里我們可以看到,最前面的“80”是一個(gè)分區(qū)的激活標(biāo)志,表示系統(tǒng)可引導(dǎo);“01 01 00”表示分區(qū)開(kāi)始的磁頭號(hào)為01,開(kāi)始的扇區(qū)號(hào)為01,開(kāi)始的柱面號(hào)為00;“0B”表示分區(qū)的系統(tǒng)類(lèi)型是FAT32,其他比較常用的有 04(FAT16)、07(NTFS);“FE BF FC”表示分區(qū)結(jié)束的磁頭號(hào)為254,分區(qū)結(jié)束的扇區(qū)號(hào)為63、分區(qū)結(jié)束的柱面號(hào)為764;“3F 00 00 00”表示首扇區(qū)的相對(duì)扇區(qū)號(hào)為63;“7E 86 BB 00”表示總扇區(qū)數(shù)為12289622。
2.DBR 區(qū) DBR(Dos Boot Record)是操作系統(tǒng)引導(dǎo)記錄區(qū)的意思。它通常位于硬盤(pán)的0磁道1柱面1扇區(qū),是操作系統(tǒng)可以直接訪問(wèn)的第一個(gè)扇區(qū),它包括一個(gè)引導(dǎo)程序和一個(gè)被稱(chēng)為 BPB(Bios Parameter Block)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時(shí),判斷本分區(qū)跟目錄前兩個(gè)文件是不是操作系統(tǒng)的引導(dǎo)文件(以DOS為 例,即是Io.sys和Msdos.sys)。如果確定存在,就把它讀入內(nèi)存,并把控制權(quán) 交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲(chǔ)格式、硬盤(pán)介質(zhì)描述符、根目錄大小、FAT個(gè)數(shù),分配單元的大小等重要參數(shù)。DBR 是由高級(jí)格式化程序(即Format.com等程序)所產(chǎn)生的。
3.FAT 區(qū) 在DBR之后的是我們比較熟悉的FAT(File Allocation Table文件分配表)區(qū)。在解釋文件分配表的概念之前,我們先來(lái)談?wù)劥兀–luster)的概念。文件占用磁盤(pán)空間時(shí),基本單位不是字節(jié)而是簇。一般情 況下,軟盤(pán)每簇是1個(gè)扇區(qū),硬盤(pán)每簇的扇區(qū)數(shù)與硬盤(pán)的總?cè)萘看笮∮嘘P(guān),可能是4、8、16、32、64…… 同一個(gè)文件的數(shù)據(jù)并不一定完整地存放在磁盤(pán)的一個(gè)連續(xù)的區(qū)域內(nèi),而往往會(huì)分成若干段,像一條鏈子一樣存放。這種存儲(chǔ)方式稱(chēng)為文件的鏈?zhǔn)酱鎯?chǔ)。由于硬盤(pán)上保 存著段與段之間的連接信息(即FAT),操作系統(tǒng)在讀取文件時(shí),總是能夠準(zhǔn)確地找到各段的位置并正確讀出。 為了實(shí)現(xiàn)文件的鏈?zhǔn)酱鎯?chǔ),硬盤(pán)上必須準(zhǔn)確地記錄哪些簇已經(jīng)被文件占用,還必須為每個(gè)已經(jīng)占用的簇指明存儲(chǔ)后繼內(nèi)容的下一個(gè)簇的簇號(hào)。對(duì)一個(gè)文件的最后一 簇,則要指明本簇?zé)o后繼簇。這些都是由FAT表來(lái)保存的,表中有很多表項(xiàng),每項(xiàng)記錄一個(gè)簇的信息。由于FAT對(duì)于文件管理的重要性,所以FAT有一個(gè)備 份,即在原FAT的后面再建一個(gè)同樣的FAT。初形成的FAT中所有項(xiàng)都標(biāo)明為“未占用”,但如果磁盤(pán)有局部損壞,那么格式化程序會(huì)檢測(cè)出損壞的簇,在相 應(yīng)的項(xiàng)中標(biāo)為“壞簇”,以后存文件時(shí)就不會(huì)再使用這個(gè)簇了。FAT的項(xiàng)數(shù)與硬盤(pán)上的總簇?cái)?shù)相當(dāng),每一項(xiàng)占用的字節(jié)數(shù)也要與總簇?cái)?shù)相適應(yīng),因?yàn)槠渲行枰娣?簇號(hào)。FAT的格式有多種,最為常見(jiàn)的是FAT16和FAT32。
4.DIR區(qū) DIR(Directory)是根目錄區(qū),緊接著第二FAT表(即備份的FAT表)之后,記錄著根目錄下每個(gè)文件(目錄)的起始單元,文件的屬性等。定位文件位置時(shí),操作系統(tǒng)根據(jù)DIR中的起始單元,結(jié)合FAT表就可以知道文件在硬盤(pán)中的具體位置和大小了。
5.?dāng)?shù)據(jù)(DATA)區(qū) 數(shù)據(jù)區(qū)是真正意義上的數(shù)據(jù)存儲(chǔ)的地方,位于DIR區(qū)之后,占據(jù)硬盤(pán)上的大部分?jǐn)?shù)據(jù)空間。
一、硬盤(pán)的物理結(jié)構(gòu):
硬盤(pán)存儲(chǔ)數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實(shí)現(xiàn)的。硬盤(pán)由一個(gè)或幾個(gè)表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤(pán)片以及盤(pán)片兩面所安裝的磁頭和相應(yīng)的控制電路組成(圖1),其中盤(pán)片和磁頭密封在無(wú)塵的金屬殼中。
硬 盤(pán)工作時(shí),盤(pán)片以設(shè)計(jì)轉(zhuǎn)速高速旋轉(zhuǎn),設(shè)置在盤(pán)片表面的磁頭則在電路控制下徑向移動(dòng)到指定位置然后將數(shù)據(jù)存儲(chǔ)或讀取出來(lái)。當(dāng)系統(tǒng)向硬盤(pán)寫(xiě)入數(shù)據(jù)時(shí),磁頭中 “寫(xiě)數(shù)據(jù)”電流產(chǎn)生磁場(chǎng)使盤(pán)片表面磁性物質(zhì)狀態(tài)發(fā)生改變,并在寫(xiě)電流磁場(chǎng)消失后仍能保持,這樣數(shù)據(jù)就存儲(chǔ)下來(lái)了;當(dāng)系統(tǒng)從硬盤(pán)中讀數(shù)據(jù)時(shí),磁頭經(jīng)過(guò)盤(pán)片指 定區(qū)域,盤(pán)片表面磁場(chǎng)使磁頭產(chǎn)生感應(yīng)電流或線圈阻抗產(chǎn)生變化,經(jīng)相關(guān)電路處理后還原成數(shù)據(jù)。因此只要能將盤(pán)片表面處理得更平滑、磁頭設(shè)計(jì)得更精密以及盡量 提高盤(pán)片旋轉(zhuǎn)速度,就能造出容量更大、讀寫(xiě)數(shù)據(jù)速度更快的硬盤(pán)。這是因?yàn)楸P(pán)片表面處理越平、轉(zhuǎn)速越快就能越使磁頭離盤(pán)片表面越近,提高讀、寫(xiě)靈敏度和速 度;磁頭設(shè)計(jì)越小越精密就能使磁頭在盤(pán)片上占用空間越小,使磁頭在一張盤(pán)片上建立更多的磁道以存儲(chǔ)更多的數(shù)據(jù)。
二、硬盤(pán)的邏輯結(jié)構(gòu):
硬盤(pán)由很多盤(pán)片(platter)組成,每個(gè)盤(pán)片的每個(gè)面都有一個(gè)讀寫(xiě)磁頭。如果有N個(gè)盤(pán)片。就有2N個(gè)面,對(duì)應(yīng)2N個(gè)磁頭(Heads),從0、1、2 開(kāi)始編號(hào)。每個(gè)盤(pán)片被劃分成若干個(gè)同心圓磁道(邏輯上的,是不可見(jiàn)的。)每個(gè)盤(pán)片的劃分規(guī)則通常是一樣的。這樣每個(gè)盤(pán)片的半徑均為固定值R的同心圓再邏輯 上形成了一個(gè)以電機(jī)主軸為軸的柱面(Cylinders),從外至里編號(hào)為0、1、2……每個(gè)盤(pán)片上的每個(gè)磁道又被劃分為幾十個(gè)扇區(qū)(Sector),通 常的容量是512byte,并按照一定規(guī)則編號(hào)為1、2、3……形成Cylinders×Heads×Sector個(gè)扇區(qū)。這三個(gè)參數(shù)即是硬盤(pán)的物理參 數(shù)。我們下面的很多實(shí)踐需要深刻理解這三個(gè)參數(shù)的意義。
硬盤(pán)存儲(chǔ)數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實(shí)現(xiàn)的。硬盤(pán)由一個(gè)或幾個(gè)表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤(pán)片以及盤(pán)片兩面所安裝的磁頭和相應(yīng)的控制電路組成(圖1),其中盤(pán)片和磁頭密封在無(wú)塵的金屬殼中。
三、磁盤(pán)引導(dǎo)原理:
3.1 MBR(master boot record)扇區(qū):
計(jì)算機(jī)在按下power鍵以后,開(kāi)始執(zhí)行主板bios程序。進(jìn)行完一系列檢測(cè)和配置以 后。開(kāi)始按bios中設(shè)定的系統(tǒng)引導(dǎo)順序引導(dǎo)系統(tǒng)。假定現(xiàn)在是硬盤(pán)。Bios執(zhí)行完自己的程序后如何把執(zhí)行權(quán)交給硬盤(pán)呢。交給硬盤(pán)后又執(zhí)行存儲(chǔ)在哪里的程 序呢。其實(shí),稱(chēng)為mbr的一段代碼起著舉足輕重的作用。MBR(master boot record),即主引導(dǎo)記錄,有時(shí)也稱(chēng)主引導(dǎo)扇區(qū)。位于整個(gè)硬盤(pán)的0柱面0磁頭1扇區(qū)(可以看作是硬盤(pán)的第一個(gè)扇區(qū)),bios在執(zhí)行自己固有的程序以 后就會(huì)jump到mbr中的第一條指令。將系統(tǒng)的控制權(quán)交由mbr來(lái)執(zhí)行。在總共512byte的主引導(dǎo)記錄中,MBR的引導(dǎo)程序占了其中的前446個(gè)字 節(jié)(偏移0H~偏移1BDH),隨后的64個(gè)字節(jié)(偏移1BEH~偏移1FDH)為DPT(Disk PartitionTable,硬盤(pán)分區(qū)表),最后的兩個(gè)字節(jié)“55 AA”(偏移1FEH~偏移1FFH)是分區(qū)有效結(jié)束標(biāo)志。
MBR不隨操作系統(tǒng)的不同而不同,意即不同的操作系統(tǒng)可能會(huì)存在相同的MBR,即使不同,MBR也不會(huì)夾帶操作系統(tǒng)的性質(zhì)。具有公共引導(dǎo)的特性。
我們來(lái)分析一段mbr。下面是用winhex查看的一塊希捷120GB硬盤(pán)的mbr。
MBR扇區(qū)代碼
你的硬盤(pán)的MBR引導(dǎo)代碼可能并非這樣。不過(guò)即使不同,所執(zhí)行的功能大體是一樣的。這里找wowocock關(guān)于磁盤(pán)mbr的反編譯,已加了詳細(xì)的注釋?zhuān)信d趣可以細(xì)細(xì)研究一下。
我們看DPT部分。操作系統(tǒng)為了便于用戶對(duì)磁盤(pán)的管理。加入了磁盤(pán)分區(qū)的概念。即將一塊磁盤(pán)邏輯劃分為幾塊。磁盤(pán)分區(qū)數(shù)目的多少只受限于C~Z的英文字母的數(shù)目,在上圖DPT共64個(gè)字節(jié)中如何表示多個(gè)分區(qū)的屬性呢?microsoft通過(guò)鏈接的方法解決了這個(gè)問(wèn)題。在DPT共64個(gè)字節(jié)中,以16個(gè)字節(jié)為分區(qū)表項(xiàng)單位描述一個(gè)分區(qū)的屬性。也就是說(shuō),第一個(gè)分區(qū)表項(xiàng)描述一個(gè)分區(qū)的屬性,一般為基本分區(qū)。第二個(gè)分區(qū)表項(xiàng)描述除基本分區(qū)外的其余空間,一般而言,就是我們所說(shuō)的擴(kuò)展分區(qū)。這部分的大體說(shuō)明見(jiàn)表1。
DPT代碼分析
注:上表中的超過(guò)1字節(jié)的數(shù)據(jù)都以實(shí)際數(shù)據(jù)顯示,就是按高位到地位的方式顯示。存儲(chǔ)時(shí)是按低位到高位存儲(chǔ)的。兩者表現(xiàn)不同,請(qǐng)仔細(xì)看清楚。以后出現(xiàn)的表,圖均同。
也可以在winhex中看到這些參數(shù)的意義:
winhex中參數(shù)的意義
說(shuō)明:每個(gè)分區(qū)表項(xiàng)占用16個(gè)字節(jié),假定偏移地址從0開(kāi)始。如圖3的分區(qū)表項(xiàng)3。分區(qū)表項(xiàng)4同分區(qū)表項(xiàng)3。
1、0H偏移為活動(dòng)分區(qū)是否標(biāo)志,只能選00H和80H。80H為活動(dòng),00H為非活動(dòng)。其余值對(duì)microsoft而言為非法值。
2、重新說(shuō)明一下(這個(gè)非常重要):大于1個(gè)字節(jié)的數(shù)被以低字節(jié)在前的存儲(chǔ)格式格式(little endian format)或稱(chēng)反字節(jié)順序保存下來(lái)。低字節(jié)在前的格式是一種保存數(shù)的方法,這樣,最低位的字節(jié)最先出現(xiàn)在十六進(jìn)制數(shù)符號(hào)中。例如,相對(duì)扇區(qū)數(shù)字段的值 0x3F000000的低字節(jié)在前表示為0x0000003F。這個(gè)低字節(jié)在前的格式數(shù)的十進(jìn)制數(shù)為63。
3、系統(tǒng)在分區(qū)時(shí),各分區(qū)都不允許跨柱面,即均以柱面為單位,這就是通常所說(shuō)的分區(qū)粒度。有時(shí)候我們分區(qū)是輸入分區(qū)的大小為7000M,分出來(lái)卻是 6997M,就是這個(gè)原因。 偏移2H和偏移6H的扇區(qū)和柱面參數(shù)中,扇區(qū)占6位(bit),柱面占10位(bit),以偏移6H為例,其低6位用作扇區(qū)數(shù)的二進(jìn)制表示。其高兩位做柱 面數(shù)10位中的高兩位,偏移7H組成的8位做柱面數(shù)10位中的低8位。由此可知,實(shí)際上用這種方式表示的分區(qū)容量是有限的,柱面和磁頭從0開(kāi)始編號(hào),扇區(qū) 從1開(kāi)始編號(hào),所以最多只能表示1024個(gè)柱面×63個(gè)扇區(qū)×256個(gè)磁頭×512byte=8455716864byte。即通常的8.4GB(實(shí)際上 應(yīng)該是7.8GB左右)限制。實(shí)際上磁頭數(shù)通常只用到255個(gè)(由匯編語(yǔ)言的尋址寄存器決定),即使把這3個(gè)字節(jié)按線性尋址,依然力不從心。 在后來(lái)的操作系統(tǒng)中,超過(guò)8.4GB的分區(qū)其實(shí)已經(jīng)不通過(guò)C/H/S的方式尋址了。而是通過(guò)偏移CH~偏移FH共4個(gè)字節(jié)32位線性扇區(qū)地址來(lái)表示分區(qū)所 占用的扇區(qū)總數(shù)。可知通過(guò)4個(gè)字節(jié)可以表示2^32個(gè)扇區(qū),即2TB=2048GB,目前對(duì)于大多數(shù)計(jì)算機(jī)而言,這已經(jīng)是個(gè)天文數(shù)字了。在未超過(guò) 8.4GB的分區(qū)上,C/H/S的表示方法和線性扇區(qū)的表示方法所表示的分區(qū)大小是一致的。也就是說(shuō),兩種表示方法是協(xié)調(diào)的。即使不協(xié)調(diào),也以線性尋址為 準(zhǔn)。(可能在某些系統(tǒng)中會(huì)提示出錯(cuò))。超過(guò)8.4GB的分區(qū)結(jié)束C/H/S一般填充為FEH FFH FFH。即C/H/S所能表示的最大值。有時(shí)候也會(huì)用柱面對(duì)1024的模來(lái)填充。不過(guò)這幾個(gè)字節(jié)是什么其實(shí)都無(wú)關(guān)緊要了。
雖然現(xiàn)在的系統(tǒng)均采用線性尋址的方式來(lái)處理分區(qū)的大小。但不可跨柱面的原則依然沒(méi)變。本分區(qū)的扇區(qū)總數(shù)加上與前一分區(qū)之間的保留扇區(qū)數(shù)目依然必須是柱面 容量的整數(shù)倍。(保留扇區(qū)中的第一個(gè)扇區(qū)就是存放分區(qū)表的MBR或虛擬MBR的扇區(qū),分區(qū)的扇區(qū)總數(shù)在線性表示方式上是不計(jì)入保留扇區(qū)的。如果是第一個(gè)分 區(qū),保留扇區(qū)是本分區(qū)前的所有扇區(qū)。
附:分區(qū)表類(lèi)型標(biāo)志如圖4
分區(qū)表類(lèi)型標(biāo)志
3.2 擴(kuò)展分區(qū)
擴(kuò) 展分區(qū)中的每個(gè)邏輯驅(qū)動(dòng)器都存在一個(gè)類(lèi)似于MBR的擴(kuò)展引導(dǎo)記錄( Extended Boot Record, EBR),也有人稱(chēng)之為虛擬mbr或擴(kuò)展mbr,意思是一樣的。擴(kuò)展引導(dǎo)記錄包括一個(gè)擴(kuò)展分區(qū)表和該扇區(qū)的標(biāo)簽。擴(kuò)展引導(dǎo)記錄將記錄只包含擴(kuò)展分區(qū)中每個(gè) 邏輯驅(qū)動(dòng)器的第一個(gè)柱面的第一面的信息。一個(gè)邏輯驅(qū)動(dòng)器中的引導(dǎo)扇區(qū)一般位于相對(duì)扇區(qū)32或63。但是,如果磁盤(pán)上沒(méi)有擴(kuò)展分區(qū),那么就不會(huì)有擴(kuò)展引導(dǎo)記 錄和邏輯驅(qū)動(dòng)器。第一個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表中的第一項(xiàng)指向它自身的引導(dǎo)扇區(qū)。第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR。如果不存在進(jìn)一步的邏輯驅(qū)動(dòng)器,第 二項(xiàng)就不會(huì)使用,而且被記錄成一系列零。如果有附加的邏輯驅(qū)動(dòng)器,那么第二個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表的第一項(xiàng)會(huì)指向它本身的引導(dǎo)扇區(qū)。第二個(gè)邏輯驅(qū)動(dòng)器的 擴(kuò)展分區(qū)表的第二項(xiàng)指向下一個(gè)邏輯驅(qū)動(dòng)器的EBR。擴(kuò)展分區(qū)表的第三項(xiàng)和第四項(xiàng)永遠(yuǎn)都不會(huì)被使用。
通過(guò)一幅4分區(qū)的磁盤(pán)結(jié)構(gòu)圖可以看到磁盤(pán)的大致組織形式。如圖5
關(guān)于擴(kuò)展分區(qū),如圖6所示,擴(kuò)展分區(qū)中邏輯驅(qū)動(dòng)器的擴(kuò)展引導(dǎo)記錄是一個(gè)連接表。該圖顯示了一個(gè)擴(kuò)展分區(qū)上的三個(gè)邏輯驅(qū)動(dòng)器,說(shuō)明了前面的邏輯驅(qū)動(dòng)器和最后一個(gè)邏輯驅(qū)動(dòng)器之間在擴(kuò)展分區(qū)表中的差異。
除 了擴(kuò)展分區(qū)上最后一個(gè)邏輯驅(qū)動(dòng)器外,表2中所描述的擴(kuò)展分區(qū)表的格式在每個(gè)邏輯驅(qū)動(dòng)器中都是重復(fù)的:第一個(gè)項(xiàng)標(biāo)識(shí)了邏輯驅(qū)動(dòng)器本身的引導(dǎo)扇區(qū),第二個(gè)項(xiàng)標(biāo) 識(shí)了下一個(gè)邏輯驅(qū)動(dòng)器的EBR。最后一個(gè)邏輯驅(qū)動(dòng)器的擴(kuò)展分區(qū)表只會(huì)列出它本身的分區(qū)項(xiàng)。最后一個(gè)擴(kuò)展分區(qū)表的第二個(gè)項(xiàng)到第四個(gè)項(xiàng)被使用。
擴(kuò)展分區(qū)表項(xiàng)中的相對(duì)扇區(qū)數(shù)字段所顯示的是從擴(kuò)展分區(qū)開(kāi)始到邏輯驅(qū)動(dòng)器中第一個(gè)扇區(qū)的位移的字節(jié)數(shù)。總扇區(qū)數(shù)字段中的數(shù)是指組成該邏輯驅(qū)動(dòng)器的扇區(qū)數(shù)目??偵葏^(qū)數(shù)字段的值等于從擴(kuò)展分區(qū)表項(xiàng)所定義的引導(dǎo)扇區(qū)到邏輯驅(qū)動(dòng)器末尾的扇區(qū)數(shù)。
有時(shí)候在磁盤(pán)的末尾會(huì)有剩余空間,剩余空間是什么呢?我們前面說(shuō)到,分區(qū)是以1柱面的容量為分區(qū)粒度的,那么如果磁盤(pán)總空間不是整數(shù)個(gè)柱面的話,不夠一個(gè)柱面的剩下的空間就是剩余空間了,這部分空間并不參與分區(qū),所以一般無(wú)法利用。照道理說(shuō),磁盤(pán)的物理模式?jīng)Q 定了磁盤(pán)的總?cè)萘烤蛻?yīng)該是整數(shù)個(gè)柱面的容量,為什么會(huì)有不夠一個(gè)柱面的空間呢。在我的理解看來(lái),本來(lái)現(xiàn)在的磁盤(pán)為了更大的利用空間,一般在物理上并不是按 照外圍的扇區(qū)大于里圈的扇區(qū)這種管理方式,只是為了與操作系統(tǒng)兼容而抽象出來(lái)CHS??赡芷鋵?shí)際空間容量不一定正好為整數(shù)個(gè)柱面的容量。
發(fā)表于 @ 2010年04月15日 10:21:00 | 評(píng)論( 0 ) | 編輯| 舉報(bào)| 收藏