【Grub&Grub2】Grub與Grub2安裝與引導Linux系統範例
-
一、Ubuntu的安裝與引導
以ubuntu-16.04-desktop-amd64.iso為例
1、提取引導檔案和壓縮核心
a) grub安裝方法
提取casper資料夾中的initrd.lz和vmlinuz.efi(支援UEFI),將檔案提取出來和ISO一起拷貝到一個fat32分割槽根目錄(假設為第一個磁碟的第3個分割槽)。
修改grub選單檔案,增加一條,內容如下:
title Install Ubuntu 16.04 root (hd0,2) kernel /vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-16.04-desktop-amd64.iso ro quiet splashlocale=zh_CN.UTF-8 initrd /initrd.lz
補充一下磁碟分割槽的知識:
在grub中,磁碟分割槽是從0,開始,例如磁碟2的分割槽3為(hd1,2),而在linux中,磁碟分割槽從1開始,例如磁碟2分割槽3為sdb3,在Windows中磁碟從C開始,第三分割槽就是E盤。
推測的分割槽位置可能與實際略有出入,在啟動後標題處會有停留,確認後會尋找檔案和引導,若是找不到會提示,返回標題後,按e鍵可以編輯neogrub內容,修改分割槽位置。例如將(hd0,1)改為(hd1,1),若是優盤很有可能就是(hd1,0),然後回車,再次嘗試。
b) grub2安裝方式
grub2可以直接載入大的iso映象,不需要解壓提取核心。
menuentry "Ubuntu 16.04" --class os{
set root=(hd0,msdos3)
loopback loop0 /ubuntu-16.04-desktop-amd64.iso
linux (loop0)/casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu-16.04-desktop-amd64.iso ro quiet splashlocale=zh_CN.UTF-8
initrd (loop0)/casper//initrd.lz
}
需要注意的是,grub2的分割槽表達方式有所變化,分割槽從1開始了,例如第一個磁碟第一分割槽(mbr分割槽)為:(hd0,msdos1)
2、進行安裝
引導完成進入安裝介面後,第一步就是要開啟中端,快捷鍵為 Ctrl+Alt+T,輸入:sudo umount -l /isodevice,注意是L不是i,這一步是為了彈出對應盤的佔用,方面後面格式化並建立分割槽。
點選桌面上的安裝程式,第二步讓你選擇安裝方式,第一個為與windows7共存,我們選擇最後一個:其他選項。然後格式化ext4需要使用的分割槽,掛載點為/,格式化完成後注意下方引導安裝位置,我們選擇剛剛格式化的分割槽,然後下一步,我們不使用swap,繼續,然後一步一步即可,最後慢慢就等著安裝吧,安裝完成提示重啟,重啟即可。
注意不要覆蓋現有引導。
3、重建引導
a) grub
重啟之後發現根本找不到從哪進入ubuntu,這是正常的,因為你的引導安裝在分割槽中,而電腦根本不知道。
這裡我們僅需要修改剛剛引導安裝使用的安裝引導,具體分割槽要修改root(hd0,1),這裡是認為安裝在第二個分割槽,grub選單修改為:
title ubuntu16.04
root (hd0,1)
kernel /vmlinuz root=/dev/sda2
initrd /initrd.img
一般來說,一個磁碟比較容易試,多個磁碟就有點麻煩,我裝了2個硬碟分了十個區,試了幾分鐘。如果是裝在第二個磁碟第一個分割槽:
title ubuntu16.04
root (hd1,0)
kernel /vmlinuz root=/dev/sda1
initrd /initrd.img
這是一個難點,我也是試了不少次才總結出來。
第一行時,還是grub,對於grub來說,主機板第二個磁碟就是物理上的第一個盤,但是到了第二行,啟動了ubuntu核心,linux會將自身安裝盤當做第一盤,所以這裡就變成了sda,而非sdb。
另外這裡initrd和vmlinuz的具體名稱與安裝的時候略有不同,這裡在啟動後開啟ubuntu系統根目錄看一下你就明白了,它跟裡面的是一致的,是從資料夾中引出的連結檔案
b) grub2
grub2僅個別命令語法不同
menuentry "ubuntu16.04" --class os{
set root=(hd0,msdos2)
linux /vmlinuz root=/dev/sda2
initrd /initrd.img
}
二、debian8.7的安裝與引導
1、準備檔案
安裝時,引導安裝檔案要與版本以及操作位數對應,例如debian8.7 amd64的引導檔案就在installer-amd64,下載3個檔案【boot.img.gz、initrd.gz 、vmlinuz】,不能使用映象中的install.amd中的這兩個同名檔案,因為映象中的initrd.gz沒有查詢ISO的功能,不適用於硬碟安裝。同時,debian引導檔案與Ubuntu不同,不能直接載入iso,只能從fat格式分割槽載入iso。
a) grub
將檔案都放到某個fat根目錄,修改grub選單,新增一條:
title debian8.7
root (hd0,2)
kernel /vmlinuz
initrd /initrd.gz
boot
b) grub2
將檔案都放到某個fat根目錄,修改grub選單,新增一條:
menuentry "debian8.7" --class os{
set root=(hd0,msdos3)
linux /vmlinuz
initrd /initrd.gz
boot
}
2、開始安裝
安裝過程就略了,引導不要選擇磁碟,注意不要覆蓋現有引導。
3、重建引導
a) grub
修改grub選單,假設裝在第二個分割槽
title debian 8.6
root (hd0,1)
kernel /vmlinuz ro root=/dev/sda2
initrd /initrd.img
boot
b) grub2
menuentry "debian 8.6" --class os{
set root=(hd0,msdos2)
linux /vmlinuz ro root=/dev/sda2
initrd /initrd.img
boot
}
三、openSUSU42.2的安裝與引導
注意:BIOS中最好禁用acpi,部分機器boot啟動安裝之後要立馬拔掉所有usb,包括鍵盤,不然會卡在loading
basic drivers,啟動之後再插上鍵盤。如果有安裝windows,若是後續無法啟動,則需要將acpi重新開啟。
1、準備檔案
下載openSUSE映象,解壓到某個分割槽的根目錄的openSUSE資料夾(隨意名稱),然後將linux和initrd-xen提取到根目錄,initrd_xen改名為initrd(可以不改,與下面對應)。
a) grub
修改grub選單,新增一條:
title openSUSE42.2
root (hd0,2)
kernel /linux
initrd /initrd
boot
b) grub2
menuentry "openSUSE42.2" --class os{
set root=(hd0,msdos3)
linux /linux
initrd /initrd
boot
}
2、系統安裝
安裝過程就略了。
安裝過程需要注意2點:
1、如果檔案放在ntfs格式盤,無法直接查詢,需要掛載,一直back,在主目錄選擇expert,然後選擇start shell,輸入cp /usr/bin/mount/bin,然後exit,再返回進行安裝,就可以識別了,硬碟選擇放置檔案的分割槽,目錄為開始解壓的目錄,即/openSUSE
2、選擇Experts模式自定義安裝時,安裝在某一個分割槽而非磁碟安裝時,是不會寫入grub2引導的,本例不需要引導,若是需要原裝引導,使用grub2-install/dev/sdax來安裝引導
3、重建引導
a) grub
title openSUSE42.2
root (hd0,2)
kernel /linux
initrd /initrd
boot
b) grub2
menuentry "openSUSE42.2" --class os{
set root=(hd0,msdos3)
linux /linux
initrd /initrd
boot
}
四、CentOS7安裝
1、準備檔案
a) grub
從映象中提取vmlinuz和initrd.img與iso檔案放到fat32分割槽,對於大於4g的iso,只能放到ext2分割槽。這裡我們放在第三個分割槽,安裝到第二個分割槽
載入kernel是關鍵,如果grub是安裝在優盤,並從優盤啟動的,在載入核心後,磁碟順序必然會發生變化,所以可能需要挨個啟動測試,如果出現nosuitableimage則證明sdb1並非優盤分割槽,更換重新實驗。如果grub安裝在硬碟,則保持一致,加熱grub中優盤為(hd1,0),則為/dev/sdb1以此類推。
title CentOS7
find --set-root /vmlinuz
kernel /vmlinuz linux repo=hd:/dev/sda3:/
initrd /initrd.img
boot
b) grub2
menuentry "CentOS7" --class os{
search.fs /vmlinuz root
linux /vmlinuz linux repo=hd:/dev/sda3:/
initrd /initrd.img
boot
}
2、開始安裝
安裝過程略,注意不要覆蓋現有引導。
3、重建引導
a) grub
修改grub選單。
title CentOS7
find --set-root /vmlinuz
kernel /vmlinuz linux repo=hd:/dev/sda2/
initrd /initrd.img
boot
b) grub2
menuentry "CentOS7" --class os {
search.fs /vmlinuz root
linux /vmlinuz linux repo=hd:/dev/sda2/
initrd /initrd.img
boot
}