grub安装的 三种安装方式
1. 引言 grub是什么?最常態(tài)的理解,grub是一個(gè)bootloader或者是一個(gè)bootmanager,通過(guò)grub可以引導(dǎo)種類豐富的系統(tǒng),如linux、freebsd、windows等。但一旦進(jìn)入linux操作系統(tǒng)(如無(wú)特殊聲明,以下提及操作系統(tǒng)或系統(tǒng)皆為linux操作系統(tǒng)),可以敲一個(gè)grub命令,就進(jìn)入”grub>”提示狀態(tài),然后可以進(jìn)入操作若干命令。這時(shí)候的grub是什么?是shell,是一個(gè)和bash類似的一個(gè)shell。并且提供了兩種工作模式,交互(interactive)模式和非交互(batch)兩種模式,grub-install命令正是利用了grub的非交互模式,在系統(tǒng)下直接完成了grub的安裝。
??????????????????????? ?
2. 三種安裝方式 安裝grub其實(shí)有3種方式,最常用的是grub-install,其實(shí)還有兩種grub>install和grub>setup,其中g(shù)rub>install是最底層的方式,grub>setup是更高一層的方式,而grub-install是最高級(jí)最簡(jiǎn)單的方式。接下來(lái)我們從grub>install開(kāi)始講,來(lái)對(duì)3個(gè)不同的方式作一下區(qū)分:
2.1. grub>install 進(jìn)入grub>提示符之后,輸入help install命令,會(huì)有如下提示:
install: install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]其中,STAGE1 DEVICE STAGE2是必不可少的,以下為示例:
install (hd0,0)/grub/stage1 (hd0) (hd0,0)/grub/stage2
或者可以如下:
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2
通過(guò)這樣一種方式可以成功安裝grub,但系統(tǒng)reboot之后,不能進(jìn)入系統(tǒng),卻直接進(jìn)入grub>.why?
因?yàn)檫@種安裝方式?jīng)]有告知grub去哪里找grub.conf,stage2找不到grub.conf就會(huì)進(jìn)入grub>.
用以下形式安裝就ok了。
root (hd0,0)
install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf?????????????????????????????? ?
2.2. grub>setup 進(jìn)入grub>提示符之后,輸入help setup命令,會(huì)有如下提示:
?setup: setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]
????? Set up the installation of GRUB automatically. This command uses
????? the more flexible command "install" in the backend and installs
????? GRUB into the device INSTALL_DEVICE.??? 從以上內(nèi)容我們可以看出,setup是一個(gè)自動(dòng)化(automatically)的grub安裝,它在后臺(tái)(backend)運(yùn)行了更靈活多變的install命令。看示例:
?grub> root (hd0,0)
?? Filesystem type is ext2fs, partition type 0x83
? 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)"...? 16 sectors are embedded.
? succeeded
?? Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded Done.
從以上可以看出,setup命令將install命令封裝了,使用setup命令比使用install命令簡(jiǎn)單很多。但實(shí)際的過(guò)程比install卻要復(fù)雜一些,其中尤其重要的一點(diǎn)是:使用setup會(huì)植入e2fs_stage1_5到硬盤(pán)的第一柱面第16扇區(qū)之后(這個(gè)沒(méi)有準(zhǔn)確驗(yàn)證過(guò)),這會(huì)帶來(lái)和通過(guò)install安裝一個(gè)很大的區(qū)別。
2.3. grub-install 安裝grub最常用的方式是在進(jìn)入系統(tǒng)之后,通過(guò)grub-install腳本進(jìn)行安裝,通過(guò)這個(gè)腳本安裝和前兩種方式有何不同呢?
腳本其實(shí)是通過(guò)grub的非交互模式,調(diào)用了setup命令安裝grub的。[*]腳本的安裝源是/usr/share/grub/i386-redhat/下的stage1、2和各種stage1.5,而前兩種方式使用的源是/boot/grub/下的相同內(nèi)容。所以通過(guò)grub-instal安裝grub,原先在/boot/grub下的stage文件都刪除也沒(méi)關(guān)系,該腳本每次執(zhí)行都會(huì)刪除這些文件的。反之,通過(guò)前兩種方式安裝的話,相應(yīng)的stage文件是不可或缺的,否則會(huì)報(bào)錯(cuò),安裝失敗。[*]通過(guò)grub-install安裝grub之后,如果我們刪除了/boot/grub/下的stage2文件,系統(tǒng)會(huì)無(wú)法啟動(dòng),報(bào)如下錯(cuò):????????????????????????????????? GRUB loading stage 1.5
? GRUB loading, please wait...
? Error 15?????????????????????????????? ?
但是,如果是通過(guò)grub>install方式安裝的grub,刪除/boot/grub/stage2就沒(méi)有問(wèn)題,why?因?yàn)橥ㄟ^(guò)grub>install安裝grub,stage1是直接通過(guò)stage2所在的blocklist找stage2,我們刪除或者改名stage2文件,文件的存放位置是不變的,因此能找到。而通過(guò)grub-install腳本,或者grub>setup,會(huì)智能的找到相應(yīng)的stage1.5,例如:/grub/e2fs_stage1_5,然后通過(guò)stage1.5認(rèn)識(shí)文件系統(tǒng),是通過(guò)文件名去找stage2的,所以通過(guò)這兩種方式安裝的grub,不可刪除或者改名/boot/grub/stage2。 ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
了很多關(guān)于grub的資料,但還是有一些地方不是很明白,希望在這里和大家討論一下
說(shuō)法一
stage1是放在bootloader里的系統(tǒng),他是為了找stage1.5和stage2存在的。在安裝grub時(shí)已經(jīng)在stage1
里嵌入了stage1.5和stage2的磁盤(pán)物理地址,當(dāng)stage1找到stage1.5時(shí)由stage1.5找stage2,要是找不到
stage1.5就以寫(xiě)在stage1里stage2的磁盤(pán)物理地址直接去找stage2。
但是現(xiàn)在有疑問(wèn)的地方是:
stage1找到stage1.5后沒(méi)有將控制權(quán)交給stage1.5,如果是將控制交給了stage1.5,那么當(dāng)stage1.5
以文件系統(tǒng)的方式找不到時(shí)stage2時(shí)直接以磁盤(pán)物理地址去找stage2,那這就是說(shuō)stage1.5里也嵌有
stage2的物理地址。還是:
stage1找到stage1.5后并沒(méi)有將控制權(quán)交給stage1.5,讓stage1.5以文件系統(tǒng)的方式去找stage2,要是找不到
再由stage1直接去找stage2。也就是說(shuō)stage2的磁盤(pán)物理地址只寫(xiě)在了stage1里。
說(shuō)法二
stage1并不是去找的stage1.5和stage2的。而是在引導(dǎo)時(shí),會(huì)去找第二扇區(qū)的start,然后由start去找stage1.5和stage2。
stage1里并沒(méi)有嵌入stage1.5和stage2的磁盤(pán)物理地址。
疑問(wèn)和上面是相同的。他們的控制區(qū)是怎么交割的!及stage1.5和stage2的磁盤(pán)物理地址是否嵌入在start中。及stage1.5里是否
嵌入了stage2的磁盤(pán)物理地址。
可以肯定是:
stage1.5是放在0磁道第3扇區(qū)和第64扇區(qū)的扇區(qū)集里,且當(dāng)你安裝grub時(shí)會(huì)根據(jù)你/boot分區(qū)所屬的文件系統(tǒng),來(lái)選者stage1.5。
(如果你的/boot分區(qū)是ext3的。那么安裝時(shí)就只將ext3的stage1.5安裝,其他的是以文件的形式放在/boot/grub里)
stage2是放在/boot/grub里
轉(zhuǎn)載于:https://www.cnblogs.com/zhengah/p/4238396.html
總結(jié)
以上是生活随笔為你收集整理的grub安装的 三种安装方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓开发日记(1) - 安装 Andro
- 下一篇: 修改DEDECMS文章标题长度,解决DE