聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

五月 3, 2014

小惡魔AppleBOY
AppleBOY
小惡魔 - 電腦技術 - 工作筆記 - AppleBOY is about »

tag cloud

» 修復 Ubuntu 開機 boot loader

logo-Ubuntu

昨天下午本來想幫自己的筆電 (Ubuntu OS) 升級記憶體,結果因為機型過於老舊,以現在的記憶體時脈 1600 裝上去後,直接讓 Ubuntu 當機,反覆重新開機,無法向下相容,加上現在記憶體狂漲價,找不到更低階的記憶體安裝了,無奈的是,店員幫忙測試筆電,換個記憶體,結果連 Ubuntu 的 boot loader 都可以壞掉。我看店員很緊張的說,不好意思,可以幫忙備份,幫忙我重灌。結果我還是自己拿回家處理比較安心。自己也不知道為什麼換個記憶體,可以讓 boot loader 消失。底下是修復 boot loader 過程

製作 Ubuntu Live USB

請先準備好 Ubuntu Live USB,製作方式很簡單,在 Windows 底下請先下載 unetbootin,以及 Ubuntu 任何一版 Desktop OS,可以參考高登寫的教學: 如何製作 Ubuntu Live USB

修復開機磁區

完成上述步驟後,請使用 USB 開機,選擇 Try Ubuntu Desktop,這時候會進到桌面,接著開啟系統內建的 Terminal,打入 fdisk -l 看看系統磁碟分割狀態

$ fdisk -l

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002c315

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      194559       96256   83  Linux
/dev/sda2          196606   625141759   312472577    5  Extended
/dev/sda5          196608    78319615    39061504   82  Linux swap / Solaris
/dev/sda6        78321664   117381119    19529728   83  Linux
/dev/sda7       117383168   625141759   253879296   83  Linux

上述結果可以發現只有一顆硬碟 /dev/sda 開機磁驅為 /dev/sda1 這是 /boot,而根目錄則是 /dev/sda6,接著將這些磁驅掛載到 /mnt/

$ sudo mount /dev/sda6 /mnt
$ sudo mount /dev/sda1 /boot
$ sudo mount /dev/sda7 /home

使用 grub-install 指令重新製作開機 boot loader

$ sudo grub-install --root-directory=/mnt/ /dev/sda

最後重新啟動系統,將 USB 移除即可,就可以看到登入畫面了

一月 27, 2012

小惡魔AppleBOY
AppleBOY
小惡魔 - 電腦技術 - 工作筆記 - AppleBOY is about »

tag cloud

» 用 Ubuntu 10.10 Live CD 重新安裝 GRUB 2 到 Bootloader

logo-Ubuntu

今天起床打開電腦,Ubuntu 跳出 Warning 訊息,boot 磁區剩下 84MB,所以我手殘進去 /boot/ 目錄,把舊的 Kernel 清除,不小心砍掉 initrd.img-2.6.35-32-generic Linux Image 開機所需要的檔案,結果之後開機出現

You need to load the kernel first

大家好像都是升級 Kernel 之後才會出現上述狀況,網路上找到的解答都不符合我的需求,所以我又往 GRUB2 開機 Boot 去瞭解,新的 GRUB 2 跟原先的 GRUB 的解法已經完全不同了,沒有 /boot/grub/menu.list,而被 /boot/grub/grub.cfg 取代,所以不應該在手動編輯此檔案。grub.cfg 會在有更新 Kernel 版本時,手動執行 update-grub 的時候被修改覆寫。這次發生的原因是在我把舊版 Kernel 刪除,而忘記執行 update-grub,這時候的最佳解法就是透過 Live CD 來救援。

Ubnutu Live CD 救援

先把 Ubuntu Live CD 放入,直接先選 Try Ubuntu,接著就會進入桌面,將 Terminal 打開 (Applications -> Accessories -> Terminal),之後只要按照底下步驟就可以成功還原 boot loader。

1. 首先確定系統的根目錄以及 boot 磁區代號,大致上都是 sda1, sda5 等等,可以透過 fdisk -l 來瞭解這些資訊。

$ fdisk -l

輸出底下結果

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13       96256   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              13       38914   312471553    5  Extended
/dev/sda5              13         499     3905536   82  Linux swap / Solaris
/dev/sda6             499        5362    39061504   83  Linux
/dev/sda7            5362       38914   269502464   83  Linux

2. 將 / 跟 /boot mount 到任意目錄

$ sudo mkdir /mnt/root
$ sudo mount -t ext4 /dev/sda6 /mnt/root
$ sudo mount /dev/sda1 /mnt/root/boot

建立 /mnt/root 目錄,用來掛載自己的 Linux 系統,/dev/sda6 是原先 / 磁區,而 /dev/sda1 則是 /boot 區域

3. 掛載 critical virtual filesystems,請執行底下 command

$ for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt/root$i; done

4. 用 chroot 指令切換到 system device

$ chroot /mnt/root /bin/bash

5. 重新將 Kernel 安裝

$ sudo apt-cache search linux-image

找到您要的版本後重新安裝

$ sudo apt-get install linux-image-x.x.x-xx

6. 更新 /boot/grub/grub.cfg

$ update-grub

7. 重新安裝 GRUB 2

$ grub-install /dev/sda

8. 重新確認是否安裝成功

$ grub-install --recheck /dev/sda

9. 按 CTRL-D 離開 chroot

10. 卸載全部虛擬系統

$ for i in /sys /proc /dev/pts /dev; do sudo umount /mnt/root$1; done

卸載 boot 及 / 系統

$ sudo umount /mnt/root/boot
$ sudo umount /mnt/root

11. 重新開機

$ sudo reboot

結論

因為不小心砍一個系統開機檔案,所以花了一些時間找資料,以及瞭解 GURB2,這樣也是不錯啦 XD,底下是參考的一些資料

Reference:
[SOLVED] Can’t start ubuntu (WUBI) : You need to load the kernel first
Clean up your grub menu and the kernels you do not use
Ubuntu Wiki Grub2
How to Restore Grub 2 As The Main Bootloader
How to create edit/extract initrd in Ubuntu/Debian and Redhat/Fedora Linux ?
Howto: Upgrade Linux Kernel
Clean Up the New Ubuntu Grub2 Boot Menu

Related View

A Feedjack powered Planet
A Django site.