1. 程式人生 > >【Grub&Grub2】Grub與Grub2安裝與引導Linux系統範例

【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
}