ubuntu linux set-by-set 教學
星期六, 八月 2, 2008
親愛的我把核心刪光了,核心kernel刪光了免重灌(非正規方法)

這一篇寫好久才寫好,中間過程一直不斷的重試,不斷的找資料有幾度灰心不想寫哩,有些地方不是很理解,所以有什麼錯誤的地方請指正囉

事情是這樣的,我為了要裝amdk8的專用核心,想說用專用核心來講的話,速度會比較好,也比較穩定,那我就不斷的嘗試,後來不幸的事發生了,我把舊核心刪掉新核心又沒有裝好,重開機後出現grub 15的錯誤,本人抱著能不重灌就不重灌的心態,拿起了ubuntu安裝光硬進入了下面的旅程。

  •  dpkg --get-selections|grep linux
    為了還原當時的情形,我又把核心都給刪光了,只剩下這些有安裝

libselinux1                    install
libselinux1-dev                    install
linux-libc-dev                    install
linux-sound-base                install
llk-linux                    install
util-linux                    install
util-linux-locales                install

在來就是插入你的ubuntu-desktop光碟,使用光碟開機試用ubuntu進入桌面環境了

好了之後開啟終端機應用程式→附屬應用程式→終端機

  • sudo -i
    使用root權限,下面我很懶不想每個指令都用sudo
  • mkdir /mnt/root
    在/mnt/新增一個root資料夾
  • sudo vol_id /dev/sdb1
    我是裝在sdb1,忘記分割格式可以用這個指令查看哦,ID_FS_TYPE=ext3我的格式是用ext3
    ID_FS_USAGE=filesystem
    ID_FS_TYPE=ext3
    ID_FS_VERSION=1.0
    ID_FS_UUID=5c967975-9ba3-4dc4-8adc-70098da10d18
    ID_FS_UUID_ENC=5c967975-9ba3-4dc4-8adc-70098da10d18
    ID_FS_LABEL=
    ID_FS_LABEL_ENC=
    ID_FS_LABEL_SAFE=
  •  mount -t ext3 /dev/sdb1 /mnt/root
    我ubuntu是裝在sdb1使用ext3格式,用mount掛載到/mnt/root
  • chroot /mnt/root
    虛擬根目錄,以下會開始修改sdb1硬碟
  • mount -t devpts none /dev/pts
    掛載devpts
  • mount -t proc   none /proc
    掛載proc
  • aptitude update
    升級資料庫,哦要可以上網哦,我是用dhcp不用設定就可以上網囉
  • aptitude install linux-image
    安裝linux-image,他是meta包含最新核心
  • cp /boot/grub/menu.lst /boot/grub/menu.old
    備份menu.lst有需要可以在還原
  • update-grub
    這會更新你的grub開機選單,使其更正到你原本安裝的路徑
  • reboot
    重開機後就正常用硬碟開機,看看是否正常了


小講解一下為什麼要執行update-grub這指令

每個磁碟分區都有一個uuid代號,要查你硬碟的uuid可以用

 

  •  ls -l /dev/disk/by-uuid/

總計 0
lrwxrwxrwx 1 root root 10 2008-08-02 03:31 2ed563d5-fd74-4306-81b9-72f3f1d94004 -> ../../sdb2
lrwxrwxrwx 1 root root 10 2008-08-02 03:31 5303e00e-7a69-4901-b350-79310b6a9c8d -> ../../sda1
lrwxrwxrwx 1 root root 10 2008-08-02 03:31 5c967975-9ba3-4dc4-8adc-70098da10d18 -> ../../sdb1
lrwxrwxrwx 1 root root 10 2008-08-02 03:31 97cf4110-a0d7-4961-8729-4c152c8968f7 -> ../../sdb3
lrwxrwxrwx 1 root root 10 2008-08-02 03:31 f207ae60-e1b2-4df0-8bae-8f41769648aa -> ../../sda2
 

我是裝在sdb1他的uuid是5c967975-9ba3-4dc4-8adc-70098da10d18,接下來打開開機選單

  • sudo gedit /boot/grub/menu.lst

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=UUID=5c967975-9ba3-4dc4-8adc-70098da10d18 ro

kopt=root就是你的/boot位置UUID=你看後面就是我/dev/sdb1的uuid代號5c967975-9ba3-4dc4-8adc-70098da10d18

## Setup crashdump menu entries
## e.g. crashdump=1
# crashdump=0

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)
groot=為你當初安裝開機選單的磁碟機,我是裝在(hd0,0)等會更新的話唯持不變
## ## End Default Options ##

title           Ubuntu 8.04.1, kernel 2.6.24-20-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-20-generic root=/dev/hda1 ro quiet splash
用chroot安裝後,他的開機位置會跟你原本的不同,執行update-grub會讀取# kopt=後面的值,並以你預設的值更新開機選單
initrd          /boot/initrd.img-2.6.24-20-generic
quiet

更新完之後他會變成以下內容

 title           Ubuntu 8.04.1, kernel 2.6.24-20-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.24-20-generic root=UUID=5c967975-9ba3-4dc4-8adc-70098da10d18 ro quiet splash
initrd          /boot/initrd.img-2.6.24-20-generic
quiet

=================================

我們先來瞭解以下hd0,0與hd0所代表的關係吧!

hd代表硬碟

0,0代表第幾顆磁碟機的第幾個分區,改一下數值會比較好理解用0,1代替好了,前面的0代表的是第一顆硬碟,後面的1代表第二個分區,我想你會問為什麼?

hd0,0=第一顆硬碟的第一個分區
hd0,1=第一顆硬碟的第二個分區
hd1,2=第二顆硬碟的第三個分區
hd1,3=第二顆硬碟的第四個分區

這樣有看出他的規律嗎?這樣好了,第一個數值+1,第二個數值-1,你照這樣對照下看就很容易懂了。

=================================

正規的安裝grub選單方法為

  • sudo grub
    記得要加sudo哦否則,你不行更新grub選單,除非你是用root登入
  •  find /boot/grub/stage1
    (hd0,0)
    尋找/boot/grub/stage1在那個硬碟的什麼分區裡,每個人安裝/boot的位置可能不一樣,他顯示的位置也跟著不一樣了
  • root (hd0,0)
    我裝在hd0,0里你要依照你剛剛所出現的位置打哦
  • setup (hd0)
    開始安裝boot選單
  • quit
    好了之後離開安裝grub

=================================

我本來也想用正規的方法安裝grub可惜始終出錯,只好用update-grub叫他讀取之前的預設值下去更新,沒想到還真的可以嘿嘿!

有 人或許會說,直接重灌不是比較快,可是我不想像用windows一樣,出什麼問題都以重灌來解決,既然換ubuntu他是開源的,那我的心也要跟著打開換 新,學習處理各種問題!為什麼我都用終端機都打指令,這也是學習的一種方式,下指令有錯誤他也會提示你是那錯,如果你懂他(英文)的話很快就能修正哩!可惜他都跟我不太熟,常常打錯指令哇哈哈,還好可以用方向鍵的↑找之前打過的指令

 


Collablog Portal enabled