GRUB2 還可以即時編寫 GRUB 指令或修改 menuentry
燒錄在光碟或獨立於另一個磁碟裝上的 GRUB2 可以啟動因 MBR 被破壞而不能起動的作業系統
自製 GRUB2 除了安裝 grub2 還需要安裝 Xorriso
可以執行
sudo apt-get install xorriso來安裝 Xorriso
再利用
grub-mkrescue --output=grub2.iso便可以製作最簡單的 GRUB2
然後可燒錄成光碟或利用 Portable Drive boot 機
由於 GRUB2 沒有任何 menuentry 會自動設定至 GRUB2 command mode ,使用者便可以自行編製啟動程序
雖然 GRUB2 並非難編寫,但完全只使用 command mode 進行啟動需要具備充足的 GRUB2 認識
因此通常會自製設定檔,方便操作
自訂設定檔還可以透過 ISO boot (參考在下的文章) 將 ISO 存放在於自製的 GRUB2 Live Boot 中
製作成多系統安裝光碟或 Portable Drive
先建立 fakeroot/boot/grub 並在目錄 fakeroot/boot/grub 建立 grub.cfg
fakeroot 並非指定名稱,只是方便製作 GRUB2 Live Boot 時的虛擬根目錄
fakeroot/boot/grub 是根據 Linux 的 /boot/grub 所製訂的啟動目錄
fakeroot/boot/grub/grub.cfg 是 GRUB2 Live Boot 的設定檔
利用
grub-mkrescue --output=grub2.iso fakeroot便可以將 fakeroot 中的資料參照目錄結構,寫入至 GRUB2 Live Boot 中
讓 GRUB2 Live Boot 的選單人性化,最簡單的方法就是複製 Linux 原來的 GRUB2 加以修改
但原來的 GRUB2 設定檔結構非常繁複,因此在下將 GRUB2 設定檔的主要功能抽出,其他功能都刪除
insmod part_msdos insmod ext2 set root=(cd) loadfont /boot/theme/unicode.pf2 set gfxmode=1024x768 insmod vbe insmod vga insmod video_bochs insmod video_cirrus insmod gfxterm insmod part_msdos insmod ext2 set root=(cd) insmod gettext terminal_output gfxterm set default=0 set timeout=10 insmod part_msdos insmod ext2 set root=(cd) insmod png background_image /boot/theme/splash.png set menu_color_normal=white/black set menu_color_highlight=blue/green這是 GRUB2-1.99+ 的寫法
有幾個位置需要主意
- set root=(cd)
這是 GRUB2-1.99+ 的 ISO 燒錄至光碟,GRUB2 直接視光碟機為 (cd)
若是 GRUB2-1.98- 的 ISO 燒錄至光碟,GRUB2 會將光碟機編為 (hd96) ,代號 96 是因為 GRUB2 將光碟機視為記憶體
不管 GRUB2 的版本,將 GRUB2 ISO 存放至 Portable Drive 便要指定 Drive 及 Partition 代號,如 hd2,msdos1
但即是不使用 set root=(cd) 的情況下,GRUB2 預設的 root 為媒體本身
即是不管理使用 GRUB2-1.99+ / GRUB2-1.98- / Portable Drive , GRUB2 會自動選擇自己
但當需要改變 root 時而使用並不清楚 GRUB2 對於媒體的代號時,仍可於 GRUB2 command 輸入 ls 來查自媒體代號 - loadfont /boot/theme/unicode.pf2
預設的 GRUB2 並沒有提供 unicode 字體,若果清單有 unicode 文件,便會變成亂碼
要讓 GRUB2 顯示 unicode 便需要讓 GRUB2 載入具 unicode 字形的字形檔,利用 loadfont /path/to/file 載入字形檔
Linux 預載的 GRUB2 使用 Linux 的 /usr/share/grub/unicode.pf2
簡單地將 /usr/share/grub/unicode.pf2 複製至 fakeroot 中載該檔案便可以使用 - background_image /boot/theme/splash.png
background_image 就是載入清單背景
與 loadfont 一樣,可以將圖像存放於 fakeroot 中載該檔案便可以使用
但留意圖像格式
格式為 png 需要使用 insmod png 載入 png 模組
格式為 jpe, jpeg, jpg 需要使用 insmod jpeg 載入 jpeg 模組
格式為 tga 需要使用 insmod tga 載入 tga 模組
tga 為 GRUB 能接受的圖像格式,但由於現在能使用 png, jpeg 模組,tga 於 GRUB2 已經甚少使用
並非 tga 的質量不高,或體積過大,而是一般圖像瀏覽器不一定能夠開啟
根據需要編製 menuentry
menuentry "Reboot" { reboot } menuentry "Shutdown" { halt }基本的 GRUB2 指令,reboot 為 重新啟動電腦, halt 為關閉電腦
menuentry "Ubuntu 12.10 32-bit Live" { insmod part_msdos insmod ext2 set root=(cd) file=/boot/iso/ubuntu-12.10-32bit.iso loopback loop $file set root=(loop) linux /casper/vmlinuz iso-scan/filename=$file root=/ boot=casper ro quiet splash noprompt # GUI # linux /casper/vmlinuz iso-scan/filename=$file root=/ boot=casper ro single noprompt # CLM initrd /casper/initrd.lz }載入 Ubuntu 發行版或以 Ubuntu 衍生的發行版
menuentry "GParted 0.14.0 Live" { insmod part_msdos insmod ext2 set root=(cd) file=/boot/iso/gparted-0.14.0-live.iso loopback loop $file set root=(loop) linux /live/vmlinuz findiso=$file union=aufs boot=live toram=filesystem.squashfs config noswap noprompt initrd /live/initrd.img }載入 GParted ISO
menuentry "Memory Test 86+" { insmod part_msdos insmod ext2 set root=(cd) loopback loop /boot/iso/ubuntu-12.10-32bit.iso set root=(loop) linux16 /install/mt86plus }借用 Ubuntu 的 /install/mt86plus 執行 Memory Test 86+
menuentry "Chainload Bootloader in First Harddisk" { insmod part_msdos # insmod ntfs set root=(hd0) chainloader +1 } menuentry "Chainload Bootloader in First Harddisk First Partition" { insmod part_msdos # insmod ntfs set root=(hd0,msdos1) drivemap -s (hd0) $root chainloader +1 }將啟動程序交給另一個啟動器,如 Windows 的 NTLDR
menuentry "Chainload GRUB2 in First Harddisk First Partition" { insmod part_msdos insmod ext2 set root=(hd0,msdos1) multiboot /boot/grub/core.img }將啟動程式交給另一個 GRUB2 啟動器
請問一下,若是要加上簡單的密碼(只是讓不太懂電腦的普通使用者不要隨便亂按)該如何設定?謝謝呢。
回覆刪除要用 password 保護 menuentry
回覆刪除可以係 grub.cfg 加上
#
set superusers="user1"
password user1 password1
#
#
#
menuentry "some-bootable-device" --user user1{
# do something
}
那麼若果需要啟動 some-bootable-device menuentry 時
便需要輸入 user1 的 password 即 password1
如果你忘記了 password 可以到 grub2 command
利用 cat 指令取回 grub.cfg 中的文件內容
因此這種方法只能防護不懂使用 grub2 command 的使用者
對資深使用者並沒有意義