2008-11-13

「手把手」你裝Ubuntu要幾分?我從硬碟裝只要「20」分

有時候要實驗看看新版的Ubuntu或Kubuntu,常常抓好都要燒起來,雖說能用複寫片燒錄,可以節省光碟片,我都把光碟片亂亂丟常常找不到XD,找到有時之前沒放好磨損到,燒錄起來會讀不完整或讀不到。

加上用 Live CD試用或者安裝,光讀取光碟就會花費不少時間,總想看看能不能把ISO檔放在硬碟讀取,應該會比放在光碟機會來的快很多。

網路上大都是教你從Windows用Grub4DOS修改開機選單,由於我電腦上都沒裝Windows,加上本來就有安裝Ubuntu可以直接修改Grbu選單,那就參考了Windows的硬碟安裝方式,瞭解他要做什麼事情懂了在試驗修改Grub選單就來的容易點。




首先當然是下載ISO檔囉,你可以到Ubuntu Wiki安裝光碟下載點列表挑選你要試用的版本,我是下載Ubuntu 8.10 DVD I386版來使用。
wget http://tw.archive.ubuntu.com/ubuntu-dvd-releases/releases/8.10/release/ubuntu-8.10-dvd-i386.iso

下載後把ISO檔放在/home底下
sudo mv ubuntu-8.10-dvd-i386.iso /home/

在用fdisk -l來查看磁碟分割
sudo fdisk -l

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x27e1de7a

所用裝置 Boot Start End Blocks Id System
/dev/sda1 * 1 2550 20482843+ 83 Linux
/dev/sda2 2551 2805 2048287+ 82 Linux swap / Solaris
/dev/sda3 2806 19457 133757190 83 Linux

Disk /dev/sdb: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0004f556

所用裝置 Boot Start End Blocks Id System
/dev/sdb1 1 1530 12289693+ 83 Linux
/dev/sdb3 1531 48641 378419107+ 83 Linux



我有兩顆硬碟sda1是/根目錄,根目錄下本來就有vmlinuz,如果覆蓋到的話就不能開機了,我把ISO檔放到sda3也就是/home底下,如果我把ISO檔放在sdb3的話,等於安裝時又要讀取又要安裝,沒試過這樣裝要幾分,我想會比放在sda3來的慢點這樣裝只要20分就好了。

在來掛載ISO檔取出initrd.gz和vmlinuz檔案,等會需要用到
sudo mkdir /media/iso
sudo mount -o loop /home/ubuntu-8.10-dvd-i386.iso /media/iso
sudo cp /media/iso/casper/initrd.gz /home/ && sudo cp /media/iso/casper/vmlinuz /home/


先備份一下grub選單需要的時候可以還原
sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.back

如需要還原的話就這樣做
sudo cp /boot/grub/menu.lst.back /boot/grub/menu.lst

打開grub檔先來看一下原本的結構
cat /boot/grub/menu.lst

title Ubuntu intrepid (development branch), kernel 2.6.27-5-generic #選單顯示的標題
root (hd0,0) #由此可得root根目錄在第1顆第1個分割區,每個人的可能不太一樣安裝方法不同
kernel /boot/vmlinuz-2.6.27-5-generic root=UUID=5c7b72be-36b1-40c0-b82a-a86ab2b27af4 ro quiet splash #kernel核心通常都放在/boot底下
initrd /boot/initrd.img-2.6.27-5-generic #initrd也是放在/boot底下


皆下來就修改grub選單了
sudo gedit /boot/grub/menu.lst

打開後把以下這段插入到最下面或適合的地方

title Ubuntu 8.10 Live
root (hd0,2)
kernel /vmlinuz boot=casper locale=zh_TW.UTF-8 iso-scan/filename=/ubuntu-8.10-dvd-i386.iso
initrd /initrd.gz


root
記得嗎我ISO檔是放在sda3也就是第1顆硬碟的第3個分區,那就是要改成root (hd0,2)囉,如果照原本的是(hd0,0)他會找不到開機檔而出現錯誤
krnel
在看krnel這一行你要裝中文版的話,就要加入locale=zh_TW.UTF-8否則試用時,沒有可選擇語系的選單只能用英文版,iso-scan/filename=為你的ISO檔,當選則Ubuntu 8.10 Live開機時,ISO是在/根目錄下面不是在/home路徑要寫對哦

都寫好後存檔重開機試試看吧!成功的話以後就不用在找光碟來燒錄,可以從硬碟執行很有快感的哈!

進階惡搞法XD

如你已經可以從硬碟執行Live CD的話,可以像我一樣把他改成Ubuntu跟Kubuntu都從硬碟執行

建立/home/iso/U、/home/iso/K資料夾,把iso資料夾擁有者改為你,hepha:hepha取代為你的使用者跟群組
sudo mkdir -p /home/iso/U && sudo mkdir /home/iso/K
sudo chown -R hepha:hepha /home/iso

把剛剛下載的ubuntu-8.10-dvd-i386.iso與取出來的initrd.gz、vmlinuz搬到/home/iso/U/
mv ubuntu-8.10-dvd-i386.iso /home/iso/U/ && mv vmlinuz /home/iso/U/ && mv initrd.gz /home/iso/U/

在去Ubuntu Wiki下載kubuntu-8.10-dvd-i386.iso,其它跟剛剛一樣把從Kubuntu取出的vmlinuz、initrd.gz與kubuntu-8.10-dvd-i386.iso放在/home/iso/K
如你要卸除剛掛載的ISO檔指令為
sudo umount /media/iso


在來修改grub選單
sudo gedit /boot/grub/menu.lst

把剛剛新增的刪掉或者修改為

title Ubuntu 8.10 Live
root (hd0,2)
kernel /iso/U/vmlinuz boot=casper locale=zh_TW.UTF-8 iso-scan/filename=/iso/U/ubuntu-8.10-dvd-i386.iso
initrd /iso/U/initrd.gz

title KUbuntu 8.10 Live
root (hd0,2)
kernel /iso/K/vmlinuz boot=casper iso-scan/filename=/iso/K/kubuntu-8.10-dvd-i386.iso
initrd /iso/K/initrd.gz



  • 如果移除舊核心或安裝新核心的時候,用新產生的grub開機選單,Live CD選項不見要重建比較麻煩,你可以這樣做
先建立一個Live CD選項範本
gedit /home/iso/menu
把兩個Live CD選項的程式碼貼進去後存檔

需要還原Live CD選項時執行這個,就會把你剛建的範本直接寫入grub選單了
cat /home/iso/menu | sudo tee -a /boot/grub/menu.lst


注意:Live CD選項不見在執行,否則grub選單會多Live CD選項,你還要自已修改回去

後記

  1. 沒有限制檔案一定要放在根目錄底下,如果路徑對的話也是可以正確執行的
  2. 我只有試Ubuntu跟Kubuntu,Kubuntu不能加locale=zh_TW.UTF-8,試用時選單會出不來,只能先裝英文版重開機後在裝中文語系﹙我沒裝只有試用﹚
  3. 放ISO檔那個分割磁碟區會被鎖住,你無法使用那個分割磁碟區

2008.12.04
  • 解決鎖住硬碟的問題


按Alt+F2輸入以下指令後按run
sudo umount -l /isodevice



就解除鎖定囉