boot loader 的功能與意義:
我們在第一小節的地方,曾經講過,在 BIOS 讀完資訊後,接下來就是會到第一個開機裝置的 MBR 去讀取 boot loader 了,這個 boot loader 可以具有選單功能,而且『還能辨識硬碟的 filesystem , 並且指向核心檔案,以將他讀入主記憶體當中』呢!所以囉,特點是: 我們系統能夠使用的 boot loader 必須要能夠認識我們系統的 filesystem 才行。 目前台灣常見的有 grub, lilo 以及 spfdisk 這幾個 loader 啦!
但是我們都知道, MBR 是整個硬碟的第一個 sector,充其量整個大小不可能超過 512 bytes 的,那麼, 我們的 loader 功能這麼強,不可能只佔不到 512 bytes 的容量吧? 而且某些情況下,設定檔還會佔用掉不少的容量呢!怎麼辦?
為了解決這個問題,我們將 boot loader 分成兩個階段來執行 (stage):
果然是好問題~如果這個地方搞懂了,你的主機多重開機就可以搞定囉~不過,最難懂得卻也是這個地方。 其實針對開機的項目, boot loader 可以做到:
但如果我真的是忘記了,先安裝 Linux 後才安裝 Windows 呢?怎麼辦? 沒關係啊!只要你安裝類似 spfdisk 的軟體在 MBR 裡面,因為他同時認識 Linux 與 Windows , 所以就可以用他來進入 Linux 啦!或者使用類似 KNOPPIX 的 Live CD 以光碟開機進入 Linux 之後, 再以 chroot 軟體切換根目錄 (/) ,然後重新安裝 grub 等 boot loader , 同樣也可以重新讓兩個作業系統存在啦!總之, 只要你知道 MBR / Super block / boot loader 之間的相關性,怎麼切換都可能啊! ^_^
但是我們都知道, MBR 是整個硬碟的第一個 sector,充其量整個大小不可能超過 512 bytes 的,那麼, 我們的 loader 功能這麼強,不可能只佔不到 512 bytes 的容量吧? 而且某些情況下,設定檔還會佔用掉不少的容量呢!怎麼辦?
為了解決這個問題,我們將 boot loader 分成兩個階段來執行 (stage):
- Stage 1:第一階段為 boot loader 的主程式,這個主程式必須要被安裝在開機區, 亦即是 MBR 或者是 Super block (first sector)。但如前所述,因為 MBR 實在太小了, 所以,這個 stage 1 通常僅安裝 boot loader 的最小主程式, 並沒有安裝 loader 的相關設定檔;
- Stage 2:第二階段為載入 boot loader 的所有設定檔與相關的環境參數檔案。 一般來說,設定檔都在 /boot 底下。
果然是好問題~如果這個地方搞懂了,你的主機多重開機就可以搞定囉~不過,最難懂得卻也是這個地方。 其實針對開機的項目, boot loader 可以做到:
- boot loader 可以直接指定並取用 kernel 檔案,來載入到主記憶體當中;
- 也可以將 loader 的控制權移交給下一個 loader !
- 直接指定核心 (在 /dev/hda2 的 /boot/vmlinux ) 來進行開機;
- 將控制權交給 /dev/hda2 super block 當中的 grub 進行管理;
- 將控制權交給 /dev/hda1 super block 當中的 Windows 的 loader 來管理。
但如果我真的是忘記了,先安裝 Linux 後才安裝 Windows 呢?怎麼辦? 沒關係啊!只要你安裝類似 spfdisk 的軟體在 MBR 裡面,因為他同時認識 Linux 與 Windows , 所以就可以用他來進入 Linux 啦!或者使用類似 KNOPPIX 的 Live CD 以光碟開機進入 Linux 之後, 再以 chroot 軟體切換根目錄 (/) ,然後重新安裝 grub 等 boot loader , 同樣也可以重新讓兩個作業系統存在啦!總之, 只要你知道 MBR / Super block / boot loader 之間的相關性,怎麼切換都可能啊! ^_^
grub 的設定檔 /boot/grub/menu.lst 與安裝型態
grub 是較新的 boot loader ,他的優點很多,包括:
與硬碟的關係:
/boot/grub/menu.lst 設定檔:
- 認識與支援較多的 filesystem ,並且可以使用 grub 的主程式直接在 filesystem 當中搜尋核心;
- 開機的時候,可以『自行編輯與修改開機設定項目』,類似 bash 的指令模式;
- 可以動態搜尋設定檔,而不需要在修改設定檔後重新安裝 grub 。亦即是我們只要修改完 /boot/grub/menu.lst 裡頭的設定後,下次開機就生效了!
既然 grub 主程式是安裝在 MBR ( super block ) 當中,並且動態去搜尋設定檔的資訊, 所以囉,他必須要認識硬碟才行啊!那麼 grub 到底是如何認識硬碟的呢? 嘿嘿! grub 對硬碟的代號設定與傳統的 Linux 磁碟代號可完全是不同的! 他的代號有點像:
這樣應該比較好看出來了吧?第一顆硬碟的 MBR 安裝處的硬碟代號就是『(hd0)』, 而第一顆硬碟的第一個 partition 的 Super block 代號就是『(hd0,0)』第一顆硬碟的第一個 logical partition 的 super block 代號為『(hd0,4)』瞭了吧!
- (hd0,0)
- 硬碟代號以小括號 ( ) 包起來;
- 硬碟以 hd 表示,後面會接一組數字;
- 以『搜尋順序』做為硬碟的編號,而不是依照硬碟排線的排序!(這個重要!)
- 第一個搜尋到的硬碟為 0 號,第二個為 1 號,以此類推;
- 每顆硬碟的第一個 partition 代號為 0 ,依序類推。
硬碟搜尋順序 | 在 Grub 當中的代號 |
第一顆 | (hd0) (hd0,0) (hd0,1) (hd0,4).... |
第二顆 | (hd1) (hd1,0) (hd1,1) (hd1,4).... |
第三顆 | (hd2) (hd2,0) (hd2,1) (hd2,4).... |
這樣應該比較好看出來了吧?第一顆硬碟的 MBR 安裝處的硬碟代號就是『(hd0)』, 而第一顆硬碟的第一個 partition 的 Super block 代號就是『(hd0,0)』第一顆硬碟的第一個 logical partition 的 super block 代號為『(hd0,4)』瞭了吧!
瞭解了 grub 當中最麻煩的硬碟代號後,接下來,我們就可以瞧一瞧設定檔的內容了。 先看一下鳥哥的 FC4 內的 /boot/grub/menu.lst 好了:
在 title 以前的前四行,都是屬於 grub 的整體設定,包括預設的等待時間與預設的開機項目, 還有顯示的畫面特性等等的項目。至於 title 後面才是指定開機的核心檔案或者是 boot loader 控制權。 在整體設定方面的項目主要常見的有:
1. 直接指定核心開機
2. 利用 chain loader 的方式:
[root@linux ~]# vi /boot/grub/menu.lst |
- default=0
這個必須要與 title 作為對照。以上表為例,我們不是有兩個 title 嗎?按照前後順序來排列, 第一個 title 代表的是 0 ,第二個 title 代表的是 1 ,以此類推~ 這個 default 說的是,如果開機過程當中,您並沒有選擇其他的項目, 那麼就會用預設值 (第 1 個 title) 來開機啦! - timeout=5
這個是開機時,不是會顯示選單嗎?如果你在幾秒內(單位就是秒!)沒有按下任何按鍵, 那就會用 default 那個設定值來進行開機! - splashimage=(hd0,0)/boot/grub/splash.xpm.gz
這個 splashimage 是在選單上面顯示的一些圖片或者是相關的影像資料啦! 這個設定有個地方比較有趣!因為在開機的過程當中並沒有硬碟, 所以我們必須要明確的指出某個檔案在那個 partition 內的那個目錄; 因此,上面的設定說的是:在 (hd0,0) 那個 partition 內的 /boot/grub/splash.xpm.gz 該檔案為開機時顯示的畫面啦!更多 splash 可以參考: http://ruslug.rutgers.edu/~mcgrof/grub-images/ - hiddenmenu
這個說的是,開機時,是否要顯示選單?目前 FC4 預設是不要顯示選單, 如果您想要顯示選單,那就將這個設定值註解掉!
既然要指定核心開機,所以當然要找到核心檔案啦!此外,有可能還需要用到 initrd 的 RAM Disk 設定檔案 (通常是放置在 /boot 底下啊!)。但是如前說的, 尚未開機完成,所以我們必須要以 grub 的硬碟認識方式找出完整的 kernel 與 initrd 檔名才行。 因此,我們可能需要有底下的方式來設定才行!
注意到:kernel 後面其實只要接 『核心檔案檔名』與 『根目錄 (/) 的所在磁碟代號 (用一般 Linux 磁碟代號) 就可以了。 老實說,以第二個方式來書寫你的 title 的內容會比較好一點~ 不會造成兩個 root 是啥意思的紊亂!上面的案例還很好理解,如果是底下的案例呢? 思考看看:
因為 vmlinuz-2.6.11-1.1369_FC4 這個檔案其實是在 /boot 所在的 partition 上, 而 /boot 是 (hd0,1) ,因此,整個檔名就成為 (hd0,1)/vmlinuz-2.6.11-1.1369_FC4 了! 只要你能夠瞭解這個檔名的來源,那麼 grub 對你而言,已經沒有什麼大問題了! ^_^
1. 先指定核心檔案放置的 partition,再讀取檔案 (目錄樹), |
例題: 我的 Linux 主機僅有一顆硬碟,但為了製作多重開機,所以我將 /boot 獨立出來成為一個 partition, partition 的對應是『 /boot → /dev/hda2 』 『 / → /dev/hda1 』,而且我僅有 kernel file, 檔名為 /boot/vmlinuz-2.6.11-1.1369_FC4 請問 grub 當中的 title 要如何寫? 答:
/boot/vmlinuz-2.6.11-1.369FC4 --> (/dev/hda2)/vmlinuz-2.6.11-1.1369_FC4 --> (hd0,1)/vmlinuz-2.6.11-1.1369_FC4 因為 /boot 是一個完整的 partition 嘛!所以說,整個核心檔案的寫法,可以這樣做: title FC4 default |
因為 vmlinuz-2.6.11-1.1369_FC4 這個檔案其實是在 /boot 所在的 partition 上, 而 /boot 是 (hd0,1) ,因此,整個檔名就成為 (hd0,1)/vmlinuz-2.6.11-1.1369_FC4 了! 只要你能夠瞭解這個檔名的來源,那麼 grub 對你而言,已經沒有什麼大問題了! ^_^
所謂的 chain loader 僅是在將控制權交給下一個 boot loader 而已, 所以 grub 並不需要認識與找出 kernel file ,『 他只是將 boot 的控制權交給下一個 super block 或者是 MBR 內的 boot loader 而已 』 所以通常他也不需要去查驗下一個 boot loader 的開機磁區啊! 一般來說, chain loader 的設定只要兩個就夠了,一個是指定開機區的 root partition,另一個則是設定 chainloader 在那個磁區上!所以說,假設我的 Windows 磁區在 /dev/hda1 ,且我又只有一顆硬碟, 那麼要 grub 將控制權交給 windows 的 loader 只要這樣就夠了:
那個 root 代表的就是 Windows 的 C 槽啦!而 chainloader 則是載入 boot loader 的定義值, 那個 +1 代表的是『第一個 sector 』也可以說成 Super block 啊!這樣說,理解嗎?! 但其實我們的 grub 功能是很強大的!他還可以隱藏某些 partition 呢! 讓您的 Windows 不會去讀取 Linux 的 partition 啊!舉例來說,以上面的例子在延伸, 假設我的 /dev/hda5 是 Linux 的磁碟系統,我想將他隱藏,並且把原先隱藏的 /dev/hda2 開啟,並且不去檢查 /dev/hda1 的開機區,所以,會變成:
最後那個 makeactive 是讓開機區的 boot 項目 (記得用 fdisk -l 的顯示結果嗎? ^_^) 具有 active 的標誌而已啦!有沒有加都可以!很簡單吧!
這樣一來,您對於 grub 的硬碟以及 menu.lst 的設定應該有一定程度的認識了吧?好~ 接下來,讓我們實際的依據您的環境來安裝囉~ 在下一小節,我們會以鳥哥自己宿舍的電腦來做解釋呢! ^_^ [root@linux ~]# vi /boot/grub/menu.lst |
[root@linux ~]# vi /boot/grub/menu.lst |
initrd 的重要性
我們在本章稍早之前『 boot loader 與 kernel 載入』的地方有稍微講過這個 initrd 的咚咚, 這玩意兒可以被稱為 Initial RAM Disk (初始化虛擬磁碟)。前面也提到過 initrd 可以幫助提供核心模組, 讓 Linux 核心在『開機的過程』當中不需要掛載根目錄就能夠載入所需要的模組,最後得以順利進入 Linux 系統。 那妳會問啊,啥時後需要 initrd 呢?這就得要從開機的流程談起了。
我們知道核心解壓縮之後會開始偵測並且驅動所有硬體,但是核心檔案並沒有包含所有的硬體驅動程式, 而是一堆驅動程式以模組的方式存放在 /lib/modules/`uname -r`/kernel/.... 當中。 也就是說,在開機的過程當中我們還需要掛載根目錄以方便讓核心讀取 /lib/modules/.... 內的核心模組, 這樣才能夠開機完成。簡單的流程如下所示:
initrd 可以將 /lib/modules/.... 內的『開機過程當中一定需要的模組』包成一個檔案 (檔名就是 initrd), 然後在開機時透過主機的 INT 13 硬體功能將該檔案讀出來解壓縮,此時核心就不需要掛載根目錄, 因為核心所需要的模組都在 initrd 內了!其實所有的核心模組都在 /lib/modules/ 內, 因此只要能夠掛載根目錄,其他的模組讀取都沒有問題的,所以說:『initrd 內所包含的模組大多是與開機過程有關,而主要以檔案系統及硬碟模組 (如 usb, SCSI 等) 為主』的啦!
一般來說,需要 initrd 的時刻為:
一般來說,各 distribution 提供的核心都會附上 initrd 檔案,但如果妳有特殊需要所以想重製 initrd 檔案的話, 可以使用 mkinitrd 來處理的。這個檔案的處理方式很簡單, man mkinitrd 就知道了! ^_^。 我們還是簡單的介紹一下去!
initrd 建立完成之後,同時核心也處理完畢後,我們就可以使用 grub 來建立選單了! 底下繼續瞧一瞧吧!
我們知道核心解壓縮之後會開始偵測並且驅動所有硬體,但是核心檔案並沒有包含所有的硬體驅動程式, 而是一堆驅動程式以模組的方式存放在 /lib/modules/`uname -r`/kernel/.... 當中。 也就是說,在開機的過程當中我們還需要掛載根目錄以方便讓核心讀取 /lib/modules/.... 內的核心模組, 這樣才能夠開機完成。簡單的流程如下所示:
- 讀取 BIOS 設定,取得開機裝置與主機板晶片等資訊;
- 讀取 MBR 內的開機載入器 (loader),並透過主機的 INT 13 硬體功能讀取核心檔案
- 核心解壓縮並且偵測硬體
- 掛載根目錄,視需要載入 /lib/modules/`uname -r`/... 內的核心模組
- 開始執行 init 這支程式的後續流程等......
initrd 可以將 /lib/modules/.... 內的『開機過程當中一定需要的模組』包成一個檔案 (檔名就是 initrd), 然後在開機時透過主機的 INT 13 硬體功能將該檔案讀出來解壓縮,此時核心就不需要掛載根目錄, 因為核心所需要的模組都在 initrd 內了!其實所有的核心模組都在 /lib/modules/ 內, 因此只要能夠掛載根目錄,其他的模組讀取都沒有問題的,所以說:『initrd 內所包含的模組大多是與開機過程有關,而主要以檔案系統及硬碟模組 (如 usb, SCSI 等) 為主』的啦!
一般來說,需要 initrd 的時刻為:
- 根目錄所在磁碟為 SATA、USB 或 SCSI 等連接介面;
- 根目錄所在檔案系統為 LVM, RAID 等特殊格式;
- 根目錄所在檔案系統為非傳統 Linux 認識的檔案系統時。
一般來說,各 distribution 提供的核心都會附上 initrd 檔案,但如果妳有特殊需要所以想重製 initrd 檔案的話, 可以使用 mkinitrd 來處理的。這個檔案的處理方式很簡單, man mkinitrd 就知道了! ^_^。 我們還是簡單的介紹一下去!
[root@linux ~]# mkinitrd [--with=模組名稱] initrd檔名 核心版本 |
測試與安裝 grub
如果你的 Linux 主機本來就是 grub 的話,那麼你就不需要重新安裝 grub 了, 因為 grub 本來就會主動去讀取設定檔啊!您說是吧!但如果你的 Linux 原來使用的並非 grub , 那麼就需要來安裝啦!如何安裝呢?首先,你必須要使用 grub-install 將一些必要的檔案複製到 /boot/grub 裡面去,你應該這樣做的:
所以說, grub-install 是安裝 grub 到你的裝置上面,但是,還需要設定好設定檔 (menu.lst) 後, 再以 grub shell 來安裝 grub 到 MBR 或者是 Super block 裡面去喔!好了,那我們來思考一下想要安裝的資料。 鳥哥的 Linux 主機上面,其實僅有一個 Linux 系統,但我的 FC4 已經升級過很多次,所以我的 Linux 有『很多核心』,我想讓每個核心都能夠使用來開機,而且,還想要將 grub 同時安裝在 MBR 與 Super block 當中, 並且 MBR 的 grub 可以將 loader 的控制權轉交給 super block ,那麼該如何安裝呢? 基於這樣的想法,我的設定檔應該是這樣的:
然後再開始以 grub shell 來進行安裝!整個安裝與 grub shell 的動作其實很簡單, 如果您有興趣研究的話,可以使用 info grub 去查閱~鳥哥這裡僅介紹幾個有用的指令而已。
如此一來,就已經將 grub 安裝到 MBR 及 super block 裡面去了! 而且讀取的是 (hd0,0) 裡面的 /boot/grub/menu.lst 那個檔案喔! 真是很重要啊!重要到不行!
[root@linux ~]# grub-install [--root-directory=DIR] INSTALL_DEVICE |
[root@linux ~]# vi /boot/grub/menu.lst |
- 用『 root (hdx,x) 』選擇含有 /boot 目錄的那個 partition 代號;
- 用『 find /boot/grub/stage1 』看看能否找到安裝資訊檔案;
- 用『 find /boot/vmlinuz 』看看能否找到 kernel file (不一定要成功!);
- 用『 setup (hdx,x) 』或『 setup (hdx) 』將 grub 安裝在 super block 或 MBR;
- 用『 quit 』來離開 grub shell !
[root@linux ~]# grub |
開機前的額外功能修改
事實上,上一個小節設定好之後,您的 grub 就已經在你的 Linux 系統上面了,而且同時存在於 MBR 與 Super block 當中呢!所以,我們已經可以進行重新開機來查閱查閱看看啦! 另外,如果你正在進行開機,那麼請注意,我們可以在預設選單 (鳥哥的範例當中是 5 秒) 按下任意鍵, 還可以進行 grub 的「線上編修」 功能喔!真是棒啊!先來看看開機畫面吧!
圖二、 grub 的開機圖示
帥吧!鳥哥的主機上面竟然有七個可開機的選單呢!當然啦!要看到這樣的選單,你必須要在開機的過程中, 五秒內就得要按下任意鍵,否則就會進入到正常的開機程序當中了。 這個時候,注意看到上圖當中的最底下的一些文字說明,其實,我們可以進行線上編修喔! 在圖二當中,如果我在第一個開機選單當中按下『 e 』這個按鍵,就會進入 grub shell 的修改, 有點像底下這樣:
圖三、 grub 的編修畫面
這個時候,我可以使用上下鍵移動游標到想要修改的那一行,然後注意看到圖三畫面最底下的一些說明文字, 可以使用:
按下 [Enter] 按鍵後,然後輸入 b 來 boot ,就可以開機啦!所以說, 萬一你的 /boot/grub/menu.lst 設定錯誤,或者是因為安裝的緣故, 或者是因為核心檔案的緣故,導致無法順利開機時,記得啊,可以在 grub 的選單部分, 使用 grub shell 的方式去查詢 (find) 或者是直接指定核心檔案,就能夠開機啦! ^_^
另外,我們剛剛圖二畫面當中的最後一個選項不是指定到 Super block 嗎? 如果你選擇那個項目開機會怎樣?哈哈!立刻又進入 grub 的畫面當中! 因為此時 grub 是 super block 當中的,而不是 MBR 當中的! 如此一來,您就應該會瞭解到 loader 控制權的轉移了吧?也能夠知道如何製作多重開機了吧? 呼呼!加油的啦!
另外,很多時候我們的 grub 可能會發生錯誤,導致『連 grub 都無法啟動』,那麼根本就無法使用 grub 的線上編修功能嘛!怎麼辦?沒關係啊!我們可以利用具有 grub 開機的 CD 來開機, 然後再以 CD 的 grub 的線上編修,嘿嘿!同樣可以使用硬碟上面的核心檔案來開機啦! 很好玩吧! ^_^
圖二、 grub 的開機圖示
帥吧!鳥哥的主機上面竟然有七個可開機的選單呢!當然啦!要看到這樣的選單,你必須要在開機的過程中, 五秒內就得要按下任意鍵,否則就會進入到正常的開機程序當中了。 這個時候,注意看到上圖當中的最底下的一些文字說明,其實,我們可以進行線上編修喔! 在圖二當中,如果我在第一個開機選單當中按下『 e 』這個按鍵,就會進入 grub shell 的修改, 有點像底下這樣:
圖三、 grub 的編修畫面
這個時候,我可以使用上下鍵移動游標到想要修改的那一行,然後注意看到圖三畫面最底下的一些說明文字, 可以使用:
- e:進入 grub shell 的編輯畫面;
- o:在游標所在行底下再新增一行;
- d:將游標所在行刪除。
grub edit> kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 |
另外,我們剛剛圖二畫面當中的最後一個選項不是指定到 Super block 嗎? 如果你選擇那個項目開機會怎樣?哈哈!立刻又進入 grub 的畫面當中! 因為此時 grub 是 super block 當中的,而不是 MBR 當中的! 如此一來,您就應該會瞭解到 loader 控制權的轉移了吧?也能夠知道如何製作多重開機了吧? 呼呼!加油的啦!
另外,很多時候我們的 grub 可能會發生錯誤,導致『連 grub 都無法啟動』,那麼根本就無法使用 grub 的線上編修功能嘛!怎麼辦?沒關係啊!我們可以利用具有 grub 開機的 CD 來開機, 然後再以 CD 的 grub 的線上編修,嘿嘿!同樣可以使用硬碟上面的核心檔案來開機啦! 很好玩吧! ^_^
關於核心功能當中的 vga 設定:
或許剛剛我們在前幾個小節提到 menu.lst 內的 kernel 設定當中,你就看到這樣的一行:『 kernel /boot/vmlinuz ro root=/dev/hda1 vga=771 』怪怪~那個 771 是啥玩意兒? 沒有他可不可以啊?當然可以啊!只是這個 vga 的設定項目主要功能用來:『 設定終端機 tty1~tty6 的解析度與色彩度 』啦! 他的十進位代碼與相對應的解析度與彩度為:
不過,某些作業系統支援的是 16 進位制,所以還需要修改一下格式呢!一般使用上表當中的值應該就可以了。 鳥哥我的螢幕是 17 吋的,所以我是將終端機解析度調整成 800x600 ,使用 vga=787 就綽綽有餘囉~^_^ 不過,由於不同的作業系統與硬體可能會有不一樣的情況,因此, 上面的值不見得一定可以在您的機器上面測試成功, 建議您可以分別設定看看哩~以找出可以使用的值! ^_^
彩度\解析度 | 640x480 | 800x600 | 1024x768 | 1280x1024 | bit |
256 | 769 | 771 | 773 | 775 | 8 bit |
32768 | 784 | 787 | 790 | 793 | 15 bit |
65536 | 785 | 788 | 791 | 794 | 16 bit |
16.8M | 786 | 789 | 792 | 795 | 32 bit |
不過,某些作業系統支援的是 16 進位制,所以還需要修改一下格式呢!一般使用上表當中的值應該就可以了。 鳥哥我的螢幕是 17 吋的,所以我是將終端機解析度調整成 800x600 ,使用 vga=787 就綽綽有餘囉~^_^ 不過,由於不同的作業系統與硬體可能會有不一樣的情況,因此, 上面的值不見得一定可以在您的機器上面測試成功, 建議您可以分別設定看看哩~以找出可以使用的值! ^_^
關於大硬碟的問題
雖然我們前面講過 grub 已經克服了核心放置在 1024 磁柱以後的問題, 不過,如果主機板還是不支援大硬碟裝置,那麼,嘿嘿嘿嘿! 可能還是會無法啟動 Linux 喔!他會一直告訴你,有 error 18 產生~ 實際的代號可以到底下查詢: 解決的方法則如同底下兩篇講的:
可惜的是,這個大前提是『 Linux kernel 可以被載入到系統當中』才行~ 但是, BIOS 都讀不到核心檔案了,該如何載入啊!因此,如果你的 / 切的太大, 偏偏又沒有製作 /boot 的 partition ,同時主機板又不支援大硬碟,哈哈哈哈! 那麼首次安裝完成之後,就會直接跑到 grub> 的畫面當中, 是沒有辦法進入 Linux 的啦!
在這樣的情況下,你可以有一個最簡單的做法,就是,直接重灌, 並且製作出 /boot 掛載的 partition ,同時確認該 partition 是在 1024 cylinder 之前才行。 如果實在不想重灌,沒有關係,利用我們剛剛上頭提到的 grub 功能, 額外建立一個可開機軟碟,或者是直接以光碟機開機,然後以 grub 的編寫能力進入 Linux 。
當然,最好的辦法其實是騙過 BIOS ,直接將硬碟的 cylinder, head, sector 等等資訊直接寫到 BIOS 當中去,如此一來,嘿嘿嘿嘿!你的 BIOS 可能就可以讀得到與支援的到你的大硬碟了。 不過,鳥哥還是建議您可以重新安裝,並且製作出 /boot 這個 partition 啦! ^_^
- http://wiki.linuxquestions.org/wiki/GRUB_boot_menu
- http://forums.gentoo.org/viewtopic.php?t=122656&highlight=grub+error+collection
可惜的是,這個大前提是『 Linux kernel 可以被載入到系統當中』才行~ 但是, BIOS 都讀不到核心檔案了,該如何載入啊!因此,如果你的 / 切的太大, 偏偏又沒有製作 /boot 的 partition ,同時主機板又不支援大硬碟,哈哈哈哈! 那麼首次安裝完成之後,就會直接跑到 grub> 的畫面當中, 是沒有辦法進入 Linux 的啦!
在這樣的情況下,你可以有一個最簡單的做法,就是,直接重灌, 並且製作出 /boot 掛載的 partition ,同時確認該 partition 是在 1024 cylinder 之前才行。 如果實在不想重灌,沒有關係,利用我們剛剛上頭提到的 grub 功能, 額外建立一個可開機軟碟,或者是直接以光碟機開機,然後以 grub 的編寫能力進入 Linux 。
當然,最好的辦法其實是騙過 BIOS ,直接將硬碟的 cylinder, head, sector 等等資訊直接寫到 BIOS 當中去,如此一來,嘿嘿嘿嘿!你的 BIOS 可能就可以讀得到與支援的到你的大硬碟了。 不過,鳥哥還是建議您可以重新安裝,並且製作出 /boot 這個 partition 啦! ^_^