2008年8月2日 星期六

「親愛的」我把核心刪光了,核心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進入桌面環境了



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

    sudo -i

    使用root權限,下面我很懶不想每個指令都用sudo

  2. mkdir /mnt/root

    在/mnt/新增一個root資料夾

  3. 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=

  4. mount -t ext3 /dev/sdb1 /mnt/root

    我ubuntu是裝在sdb1使用ext3格式,用mount掛載到/mnt/root

  5. chroot /mnt/root

    虛擬根目錄,以下會開始修改sdb1硬碟

  6. mount -t devpts none /dev/pts

    掛載devpts

  7. mount -t proc none /proc

    掛載proc

  8. aptitude update

    升級資料庫,哦要可以上網哦,我是用dhcp不用設定就可以上網囉

  9. aptitude install linux-image

    安裝linux-image,他是meta包含最新核心

  10. cp /boot/grub/menu.lst /boot/grub/menu.old

    備份menu.lst有需要可以在還原

  11. update-grub

    這會更新你的grub開機選單,使其更正到你原本安裝的路徑

  12. reboot

    重開機後就正常用硬碟開機,看看是否正常了

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




  1. 每個磁碟分區都有一個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








  2. 我是裝在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=後面的值,並以你預設的值更新開機選單

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







    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-genericquiet












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



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



    hd代表硬碟

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

    hd0,0=第一顆硬碟的第一個分區

    hd0,1=第一顆硬碟的第二個分區

    hd1,2=第二顆硬碟的第三個分區

    hd1,3=第二顆硬碟的第四個分區



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




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



  • 正規的安裝grub選單方法為

  1. sudo grub

    記得要加sudo哦否則,你不行更新grub選單,除非你是用root登入

  2. find /boot/grub/stage1

    (hd0,0)

    尋找/boot/grub/stage1在那個硬碟的什麼分區裡,每個人安裝/boot的位置可能不一樣,他顯示的位置也跟著不一樣了

  3. root (hd0,0)

    我裝在hd0,0里你要依照你剛剛所出現的位置打哦

  4. setup (hd0)

    開始安裝boot選單

  5. quit

    好了之後離開安裝grub




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



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



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

沒有留言:

張貼留言