2016年10月17日 星期一

DIY紀錄:雙作業系統 - Linux 作業系統重灌以及 grub 修復

以前寫過一篇文章,是講述怎麼在有 win8 作業系統的狀況下安裝另一套 Linux 作業系統

DIY紀錄:雙作業系統 - win8 筆電安裝 Ubuntu

但是 Linux 作業系統這麼多種,若是想裝別套系統該怎麼辦呢?
又如果想整個砍掉重新裝最新版本的呢?

這篇講的是如果把當初配置給 Linux 作業系統的硬碟空間以及置換空間整個砍掉
重新安裝後要如何透過 grub shell 進入 Linux 作業系統,以及該怎麼修復 grub



在進入正題之前要先簡單說明一下開機的流程
BIOS(basic input output system)
→ 開機管理程式(boot loader)
→ 作業系統核心(kernel)
→ 作業系統(operating system)

在安裝雙系統的時候,我們必然會去更改 BIOS 裡頭的開機裝置優先順序選項
再來,BIOS 會到開機裝置的主啟動磁區 (MBR, master boot record) 去尋找開機管理程式
開機管理程式會決定要載入裝置上哪個作業系統的核心到主記憶體
最後核心再讓作業系統整個跑起來

Linux 作業系統主流的開機管理程序為 grub2,是從 grub(GRand Unified Bootloader) 延伸而來,雖然 grub 本身已經停止開發
後面我會把 grub2 直接用 grub 代稱

由於 grub 支援載入 windows 的核心,因此我們才可以用 grub 選擇使用哪個作業系統
但 windows 的開機管理程式就做不到這樣的事情

也不知道該不該說自己傻,我直接把安裝 Linux 作業系統的硬碟空間一口氣全部砍掉
重新安裝一個新的作業系統,參考之前的文章很順利的就裝完了
但是因為這樣不謹慎的舉動,開機出現的畫面是 grub shell

grub shell

並不是我以前熟悉的 grub 畫面

grub

在完全沒有使用過 grub shell 的狀況下,查了一些資料
試圖透過他來進入到 Linux 作業系統中

不得不說 grub shell 非常的不好用
輸入指令很容易就覆蓋到先前顯現的文字
明明應該是在最後一行輸入指令,指令卻總是跑到前幾行,導致上述不愉快的使用者體驗

總之找到了參考資料,依序輸入以下指令就可以進到 Linux 作業系統中

grub> ls

會列出所有硬碟分割區
首要任務是找到先前 Linux 作業系統安裝在哪個硬碟分割區
如果忘記在哪個分割區的話,可以用 ls 指令來幫助你找到,例如下面這個指令

grub > ls (hd0,gpt4)/

注意後面的 / 符號,缺少的話就會印不出底下的內容物
要注意的地方是這邊只是提供一個範例,結果會印出 (hd0,gpt4) 底下所有的資料夾及檔案
真實的硬碟分割區還是要參考先前輸入 ls 所列出來的所有分割區,不要傻傻地照著範例輸入
hd0, hd1, ...... 代表的是哪個硬碟,從 0 開始
gpt1, gpt2, ...... 代表的是硬碟的哪個分割區,從 1 開始
gpt 代表分割表類型,因此也有可能看到其他不是 gpt 的分割表類型

我們必須找到含有 boot/ bin/ home/ root/ 等等資料夾的 Linux 作業系統分割區,後續會使用到它

grub > set root=(hd0,gpt4)

設定 root 在哪個分割區,範例為 (hd0,gpt4) 這個分割區

grub > linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda4

這個指令告訴 grub 我們要使用哪個核心,當然這只是個範例
實際上你要使用自己電腦上的 Linux 核心,而不是按照範例直接輸入
在我們輸入 linux /boot/vmli 之後,就可以透過 tab 鍵來補完剩下的部分
這樣就算不知道核心的全名也沒有關係
後面的 root=/dev/sda4 則跟剛剛的 set root=(hd0,gpt4) 有關
hd0 對應到 sda,hd1 對應到 sdb,以此類推
至於數字部分則是相同,代表第幾個分割區

grub > initrd /boot/initrd.img-3.13.0-29-generic

設定 initrd 檔案,版本號碼必須跟核心檔案相同
同樣可以用 tab 鍵來補完剩下的部分

grub > boot

開機

很順利的成功開機了,開機之後要進入終端機修復 grub
在桌面時按下 ctrl+alt+t 就可以開啟,然後輸入

$ update grub

出現一連串資訊,最後一行顯現
done

$ grub-install /dev/sda

把啟動磁區安裝到硬碟,也就是開機裝置,而不是分割區
一樣這只是範例,請確保你安裝到你想要的那顆硬碟
最後一行顯現
Installation finished. No error reported.

原本以為就這樣順順利利的修復了 grub,但當我重開機之後
一樣,還是進入 grub shell 畫面,總不能每次都叫我輸入這麼一長串指令吧?

結果就查到了一個很好用的開機修復軟體,叫做「Boot-Repair」

首先我們要成功地進到我們的 Linux 作業系統

安裝 Boot-Repair
$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt-get update
$ sudo apt-get install -y boot-repair

安裝完之後執行
$ boot-repair

會出現這個視窗
Boot Repair 介面

選擇 Recommended repair
之後的步驟,Boot-Repair 會陸續給你許多指令,要你輸入到終端機裡
當全部都結束後,重開機確認是否成功,就完成啦!

基本上這次的圖檔比以往少很多,可能說明也不足
因為是先修復成功之後,才開始撰寫網誌
導致很多步驟來不及截圖或是拍照

雖然第一個嘗試的方法有成功讓我進入 Linux 作業系統,但並沒有解決我碰到的問題
後來嘗試了強大的 Boot-Repair 才成功讓我順利開機,選擇要啟動哪個作業系統

非常感謝以下參考資料的協助,大部分說明都跟參考資料雷同
我只是以我的方式整理撰寫,並不是完全自己發想解決

後記:後來發現很多 Linux 作業系統在安裝的時候就已經有 Boot-Repair 這個軟體了
所以應該是不太需要自己額外安裝,

參考資料:
Open foundary:grub shell 如何進入 Linux 作業系統
Wiki:何為 initrd
grub 疑難排解(英文)
Boot-Repair 使用說明(英文)
grub 中文指南

沒有留言:

張貼留言