把別的 live-cd 置入隨身碟 (如何修改 grub 開機選單 menu.lst)


Grub 選單的最重要選項

第四分割下的 boot/grub/menu.lst 是 grub 的選單。 以下是幾個常見的設定

        default  2
        timeout 10
        splashimage=/boot/grub/gnu-tux-usb.xpm.gz

gnu tux 及 usb 碟 開機時若未手動選擇, 10 秒後將自動進入第二個選項。 選項從零數起。 第三句指定背景圖片。 想拿你喜歡的圖片當做開機畫面? 請看這裡。 例如到 這裡 取得圖片, 並用 gimp 加上 usb 姆指碟的相片, 存檔成 gnu-tux-usb.png。 然後安裝 ImageMagick 套件, 下指令: convert -resize 640x480 -colors 14 gnu-tux-usb.png gnu-tux-usb.xpm ; gzip gnu-tux-usb.xpm 把 png 或其他圖檔轉成 grub 所需要的 xpm 格式, 並加以壓縮, 再放到適當位置。 最後在 menu.lst 裡面加上 splashimage=/boot/grub/gnu-tux-usb.xpm.gz 即可。

若要進一步研究 grub, 請參考 「動手學 grub」

例: Ezgo7

在 isolinux/isolinux.cfg 裡面看到這段:

        LABEL live
          menu label ^Try Ubuntu without any change to your computer
          kernel /casper/vmlinuz1
          append  file=/cdrom/isolinux/preseed/ubuntu.seed boot=casper initrd=/casper/initrd1.img debian-installer/locale=zh_TW quiet splash --

其中的 append 及 initrd= 是 isolinux 的語法; 若要換成 grub 的 menu.lst, 就進行以下修改:

  1. 把 LABEL 改成 title; 後面的標題只是顯示用的字串, 可以隨意改。
  2. 把 menu 那一列刪掉。
  3. 把 initrd= 那一串獨立出來, 放到最後一列, 並且把等號改成空格。
  4. 把剩下的所有東西放在同一列, append 刪掉。
  5. 如果 "KERNEL" 是大寫, 還要將它改成小寫。

變成這樣:

        title ezgo 7
        kernel /casper/vmlinuz1 file=/cdrom/isolinux/preseed/ubuntu.seed boot=casper debian-installer/locale=zh_TW quiet splash --
        initrd /casper/initrd1.img

當然, 這只是個起點。 如果測試正常, 還可以再增加更多選項。 例如原始的設定和光碟一樣: 不論你做任何修改, 關機後一律消失; 下次再開機時, 一切還原。 (除非你刻意將檔案存到指定的分割指定的目錄下。) 如果在 kernel 那一長串之後, 加上 "persistent", 則開機時 ubuntu 會去尋找一個具有 "casper-rw" label 的 ext2 分割, 或是一個名為 "casper-rw" 的 loopback device, 把它與唯讀的系統 "聯集" 起來, 這樣你的隨身碟才可正常讀寫。 詳見 LiveCD Persistence

更多開機選項請搜尋 "ubuntu boot options" 及 "linux boot options" 。 例如遇到沒有驅動程式的顯示卡, 也許可以試試 xforcevesa 選項。

好幾個版本共用一個分割

有些版本的 live-cd 擺放的位置彈性很大, 不一定要獨自佔用一個分割。 例如想把 slax, dsl, 和 clonezilla 三個版本全部放在同一個分割 (假設是 /dev/sda17), 分別安置在各自的目錄 ( dsl-4.4.10/ slax-6.1.2/ clonezilla/ ) 裡面, 那麼你的 menu.lst 應該類似如下設定:

title           DSL 4.4.10
kernel          (hd0,16)/dsl-4.4.10/boot/isolinux/linux24 ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=791 nomce noapic quiet knoppix_dir=dsl-4.4.10/KNOPPIX BOOT_IMAGE=knoppix
initrd          (hd0,16)/dsl-4.4.10/boot/isolinux/minirt24.gz 

title           slax 6.1.2 work space
kernel          (hd0,16)/slax-6.1.2/boot/vmlinuz ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;telinit~4 from=/slax-6.1.2/ changes=/slax-6.1.2/slax/
initrd          (hd0,16)/slax-6.1.2/boot/initrd.gz

title           Clonezilla live 1.2.7-11-i686
kernel          (hd0,16)/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=788 ip=frommedia  nosplash live-media-path=/clonezilla/live
initrd          (hd0,16)/clonezilla/live/initrd.img 

也就是說: 除了指定 kernel 和 initrd 的位置時需要加上子目錄名稱之外, 每個不同版本的 live-cd 可能都還要另外用一兩個選項告訴開機程式系統檔案的位置改變了。 請用版本名稱加上 「boot options」 搜尋, 就可找到以下文件。

版本 需設定的選項 參考文件
dsl knoppix_dir=... dsl cheat codes (可能也適用於整個 knoppix 系列)
slax from=..., changes=... slax boot parameters
clonezilla live-media-path=... Debian Live initramfs boot options (可能也適用整個 debian live 系列)

將控制權交給另一個開機管理員

我的 eeepc 每次都從內建的 ssd 開機; 但我好寶貝它, 總是按 ESC 改從記憶卡開機, 因為記憶卡如果玩壞了, 換起來比內建 ssd 便宜簡單。 於是我在 ssd 的 grub 設定檔裡面加了這一段:

title   sd card
root    (hd1)
chainloader +1
    

(注意: root 那一句僅指定哪一顆碟, 不指定哪一個分割。) 並且把它設為預設開機選項。 這樣每次開機時, ssd 上的 grub 會自動將控制權交給 /dev/sdb4 (也就是記憶卡的開機分割) 不必再狂按 ESC 鍵。