1. 程式人生 > >利用U盤安裝grub 引導ubuntu安裝

利用U盤安裝grub 引導ubuntu安裝

這幾天給學弟安裝ubuntu,學習了利用U盤安裝grub 引導ubuntu,感謝這篇文章的主人,給了我知識和啟發http://www.ybty.net/thread-529-1-1.html

1、安裝mbr到u盤
打造自己的多功能USB啟動盤——grub2引導WinPE、Archlinux安裝映象和Ubuntu liveCD
利用U盤製作啟動盤,引導WinPE、Linux安裝的文章多如牛毛,與他們相比本文的特點有:


1.用且僅用grbu2做引導。不使用grub4dos,不是使用msdos mbr轉到活動分割槽,到ntldr,然後再到grldr,到LDRXPE,啟動winpe……

2.使用grub-install命令安裝引導。

使用windows下的UltraISO、linux下的dd命令、以及其他第三方軟體改寫mbr,保證U盤容量、資料和完整性。

3.grub2直接引導各系統。各系統分目錄存放,grub2直接引導目錄內檔案,不使用chailoader,u盤根目錄下可無任何檔案,不通過任何其他方式間接引導,簡潔明快、避免混亂。

U盤內容如下,包括:
arch——Archlinux安裝映象
grub——grub各配置項
WXPE和Programs——WinPE及其各種Windows實用程式
ubuntu.iso——Ubuntu liveCD



一、安裝grub2到u盤。
grub2在各大linux版本中均有采用,它的強大這裡就不多說了,基本上任何系統都是有可能通過它引導起來的,而且引導介面可定製,彩色選單,圖片顯示都不在話下。
這裡先把grub2安裝到U盤上:

U盤不分割槽,任何格式都可以,因為兼顧windows和linux所以建議採用fat32格式,大小1G以上(這包括除了U系統外平時還能當正常U盤使用的空間)。格不格式化隨你,因為資料可以安全保留。
我這裡從一個空白的2G kingston U盤開始,先格式化為fat32,查尋一下uuid為:696C-0B1C,卷標為:fairy,備用。
然後安裝grub2到U盤,進入你的linux:

Archlinux下執行命令:
——————————————————————————————————————————————
$ sudo grub-install --boot-directory=/run/media/lcc/fairy --no-floppy --target=i386-pc --recheck /dev/sdb

$ sudo cp /usr/share/grub/{unicode.pf2,ascii.pf2} /run/media/lcc/fairy/grub
$ sudo cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /run/media/lcc/fairy/grub/locale/en.mo

$ sudo GRUB_PREFIX="/run/media/lcc/fairy/grub" grub-mkconfig -o /run/media/lcc/fairy/grub/grub.cfg
——————————————————————————————————————————————

注:這裡/dev/sdb為U盤對應裝置,/run/media/lcc/fairy為U盤的掛載點,請參照修改。也可以不執行中間兩條命令,只是增加了一些ascii,en支援。

Ubuntu下執行命令:
——————————————————————————————————————————————
$ sudo grub-install --root-directory=/media/u /dev/sdb
$ sudo update-grub

——————————————————————————————————————————————
注:這裡/dev/sdb為U盤對應裝置,/media/u為U盤的掛載點,請參照修改。此處未親自測試,不對指出請指正。

好了,現在grub2已經安裝到U盤mbr上了,而且還按照機子上的系統生成了預設的啟動選單/grub/grub.cfg,這時通過U盤啟動,可以看到grub2的引導介面,並且可以完美引導電腦硬碟上的系統了。當然這些硬碟系統的引導項我們不需要,可通過修改U盤上的/grub/grub.cfg來刪除。

二、grub2引導WinPE
1.U盤上建立WXPE目錄,將WinPE檔案放置入內:
目前網路上的WinPE到處都是,各種版本其實都差不多,主要需要如下5個檔案:

LDRXPE  NTCOM  PE  SETUPLDR.BIN  WINPE.IS_


大致過程是:LDRXPE呼叫NTCOM和SETUPLDR.BIN讀取PE找到WINPE.IS_映象,載入WinPE。


2.修改grub.cfg,加入winpe引導項:
—————————————————————
menuentry 'LDRXPE for WinCE (on /usb/fairy)'{
insmod part_msdos
insmod fat
set root='hd0,msdos1'
search --no-floppy --fs-uuid --set=root 696C-0B1C
ntldr /WXPE/LDRXPE
}
—————————————————————

說明:此處的696C-0B1C為U盤分割槽uuid,其實這一句也可以不要,因為上面已經set root了,主要為了雙保險。


這裡的關鍵是:ntldr /WXPE/LDRXPE,而不是chainloader或者linux,我用後者嘗試了一週都不得成功,最後才發現了可以直接用ntldr命令,強大啊!!


三、grub2引導Archlinux映象
1.解壓Archlinux最新安裝映象:archlinux-2012.11.01-dual.iso,複製其中的arch目錄到U盤。
      EFI  isolinux  loader這三個目錄不需要。


2.精簡arch目錄:
因為我要用的是32位的,而不用64位的所以刪掉64位的相關目錄和檔案,包括:
刪除arch/x86_64目錄;
刪除arch/boot目錄下的:memtest  memtest.COPYING  syslinux  x86_64

修改arch/aitab,註釋掉x86_64的兩行。
當然你的空間足夠大,這些都可以不做。

3.修改grub.cfg,加入arch引導項:
———————————————————————————————
menuentry 'archlinux-2012.11.01-setup (on /usb/fairy)'{
insmod part_msdos
insmod fat
set root='hd0,msdos1'
search --no-floppy --fs-uuid --set=root 696C-0B1C
linux/arch/boot/i686/vmlinuz archisobasedir=arch archisolabel=fairy
initrd/arch/boot/i686/archiso.img
}
———————————————————————————————

說明:同上此處的696C-0B1C為U盤分割槽uuid,其實這一句也可以不要,因為上面已經set root了,主要為了雙保險。



這裡的關鍵是:archisobasedir=arch archisolabel=fairy ,這裡的fairy是U盤的卷標,少了這句是不得成功的。


四、grub2引導Ubuntu liveCD

1.複製ubuntu-12.04-desktop-i386.iso到U盤根目錄,當然為了根目錄乾淨放到iso或者其他目錄也可以,以下做對應修改。

2.修改grub.cfg,加入ubuntu引導項:
——————————————————————————————————————————————
menuentry 'ubuntu-12.04-desktop-i386.iso' {
insmod fat
insmod loopback
insmod iso9660
loopback loop (hd0,1)/ubuntu-12.04-desktop-i386.iso
set root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-12.04-desktop-i386.iso noprompt noeject locale=zh_CN.UTF-8 --
initrd /casper/initrd.lz
}
——————————————————————————————————————————————

說明:
hd0,1 指得是U盤第一分割槽,我這裡只有一個分割槽。
iso-scan/filename=/ubuntu-12.04-desktop-i386.iso這裡要注意ubuntu前面的“/”,如果找不到檔案會出現can't open /dev/sr0錯誤。
locale=zh_CN.UTF-8 是設定中文環境,很多人引導成功卻是英文環境的,加上這條就可以了。




轉換menu.lst 到 grub.cfg

grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg