事情是這樣的,我為了要裝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/rootchroot /mnt/root
虛擬根目錄,以下會開始修改sdb1硬碟mount -t devpts none /dev/pts
掛載devptsmount -t proc none /proc
掛載procaptitude 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=後面的值,並以你預設的值更新開機選單
更新完之後他會變成以下內容
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選單方法為
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他是開源的,那我的心也要跟著打開換新,學習處理各種問題!為什麼我都用終端機都打指令,這也是學習的一種方式,下指令有錯誤他也會提示你是那錯,如果你懂他(英文)的話很快就能修正哩!可惜他都跟我不太熟,常常打錯指令哇哈哈,還好可以用方向鍵的↑找之前打過的指令
沒有留言:
張貼留言