網頁

2013年3月13日 星期三

GRUB 的安裝及製作

1. GRUB 簡要說明


      如果想要研究 Linux Kernel, 或是從事 Linux 有關的 firmware, 了解 boot loader 及 boot loader 的運作, 應該是很重要的.

1. 關於 GRUB

      GRUB 是一個 boot loader.

      簡單地說,boot loader 是計算機啟動時運行的第一個軟體。它負責裝載作業系統 (Linux, Windows,...)並且把控制權轉交給作業系統.

      GRUB 是是一個非常強大的 bootloader,它可以載入各式各樣的作業系統.
      GRUB的重要特徵之一是靈活性. GRUB 認識各種檔案系統, 以及核心可執行檔的格式, 所以, 可以任意設定作業系統的載入方式.

2. GRUB 的特性


      支援多重開機, 可選擇載入不同作業系統.
      支援各種 a.out ELF 格式, symbol 可以一同載入.
      支援非多重開機的核心.
      支援多重模組載入.
      可載入設定檔.
      提供 menu 選單.
      提供彈性的命令列介面.
      支援各種檔案格式.
      支援自動解壓縮, 可支援 gzip, xz
      可存取各種週邊.
      可偵測已安裝記憶體 ( RAM)
      支援硬碟的 LBA mode
      支援網路開機
      支援遠端終端機

2. 安裝 GRUB


1. 安裝 GRUB 系統.


      這個地方會有一點混淆. 在開機的時候, 我們可以看到 GRUB 已經在運作, 並且也載入了預期的作業系統. GRUB 系統, , 指的是在作業系統運作下, 設定及編成下次開機的部份. 這部份和開機時運作的並不相同. GRUB 系統, 也可以稱之為 boot loader manager.

2.  GRUB 版本.


      GRUB 0.97, 被更名為 GRUB legacy. 而以 GRUB2 1.97 ~ 稱為 GRUB.

      GRUB2 GRUB legacy 的不同在於, 沒有什麼是一樣的. GRUB2 整個重寫過了.

3.   GRUB on Ubuntu


      執行以下命令

      $ grub-install -v

      可以查看目前系統中 GRUB 的版本, 若是 GRUB Legacy ( version 0.9x) , 請參考
      https://help.ubuntu.com/community/Grub2#Upgrading_to_GRUB_2_From_GRUB

 

3. GRUB 製作開機磁區


1. 磁片


      以下每一個指令都需要 root 權限, 最好先切換到 root,再執行以下命令
      先將磁片格式化成 ext2 file system
      $ mke2fs /dev/fd0

      將磁碟機掛載到 /mnt
      $ mount -t ext2 /dev/fd0 /mnt

      在磁片上建立 /boot 目錄
      mkdir /mnt/boot

      GRUB 裝載到磁片中
      $ grub-install --boot-directory=/mnt/boot /dev/fd0

      解除掛載磁碟機
      $ umount /mnt
     

      然後重開機, 電腦就會用磁片開機.

      但是, 實際上, grub-install --boot-directory=/mnt/boot /dev/fd0 這個步驟的時候, 會出現錯誤. 因為磁片的空間不足. 然後在開機的時候, 雖然可以聽到 磁碟機的動作聲, 但是最後開機會失敗.

      要解決這個問題, 需要對開機的映像檔編成, 使得它可以放在磁片中. 目前, 只確認到 boot loader 確實被掛到磁片中.

      部份 BIOS 會把 USB 裝置當成磁碟機, 而非硬碟, 這樣的情形下, 需要使用以下的指令.

      $ losetup /dev/loop0 /dev/sdb1
      $ mount /dev/loop0 /mnt/usb
      $ grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0
     

2. USB Flash Drive


      首先, 先看看它被掛在什麼地方.

      $ sudo fdisk -l

      注意, 如果沒有用 root 權限, fdisk 的命令是完全不回應
      我這邊看到的是在 /dev/sdb1, 以下命令沿用.

      boot loader 一定要裝在 linux file system. 所以如果原本是FAT/FAT32/....最好先格式化. 不然到安裝時, 也是會出現錯誤.
      $ sudo umount /dev/sdb1

      * 以下格式化 USB Flash Drive
      $ sudo mke2fs /dev/sdb1

      * 以下建立預備裝載到 usb flash drive 的資料夾
      $ sudo mkdir /mnt/usb

      *掛載 USB 裝置
      $ sudo mount /dev/sdb1 /mnt/usb
 
      *以下建立裝載到 usb flash drive 的檔案
      $ sudo grub-install --force --no-floppy --root-directory=/mnt/usb /dev/dsb1

      * 這時候, boot loader 已經裝載到 USB Flash Drive . 可以試試看重開機, 記得設定 USB 開機. 會出現一個命令列模式的畫面, 命令列提示如下

      grub >

      輸入
      grub> ls
      可以看到 (hd0), (hd0, msdos1).... 等磁碟分割的資訊.

      * 如果要安裝完整的系統, 可以繼續進行以下操作, 但是需要光碟片,

      先看看光碟片掛在什麼地方

      $ df

      我的是在 /dev/sr0, 以下沿用

      $ sudo mount /dev/sdb1 /mnt/usb
      $ cd /mnt/usb/boot/grub
      $ sudo wget pendrivelinux.com/downloads/grub.cfg
      $ sudo dd if=/dev/sr0 of=/mnt/usb/ubuntu.iso

      就完成了 USB Flash Drive 的製作.

      由於 ubuntu.iso 檔很大, 大約 790 MB, 所以 USB Flash Drive 至少要有 1G. 我用 1 G 試是沒有問題的.
                 

3. 製作救援光碟


      首先執行 grub-mkrescue, 但是 grub-mkrescue 會用到 xorriso, 所以要先安裝 xorriso

      $ sudo apt-get install xorriso
      $ grub-mkrescue --output=rescue.iso /boot/grub

      然後把 rescue.iso 燒成光碟就可以了.

     

沒有留言:

張貼留言

請提供您寶貴的意見