Linux操作系統啓動管理器-grub

一、GRUB簡介

    GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多操作系統啓動程序。GRUB是多啓動規範的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啓動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啓動參數。

=========================================================================================


二、GRUB的組成

grub分爲三個部分

    第一部分被放在MBR中前446字節裏(MBR共512字節,中間54字節存放磁盤分區信息,最後2字節判斷MBR是否損壞),主板啓動時首先會讀取MBR裏的內容,所以grub是系統內核啓動之前就啓動的。

    第二部分放在MBR之後的扇區中,存放的是文件系統的驅動程序,可以在系統內啓動分區沒掛載的情況下讀取磁盤內裏的指定內容

    第三部分就是存在磁盤分區中的內容,裏面是grub的配置信息,內核文件,這裏就是gurb的根分區

==============================================================================


三、GRUB的功能

1、提供菜單,並提供交互式接口(e: 進入編輯模式 在內核後添加single,後按b就可以進入單用戶模式、c:進入命令行接口模式)

2、選擇要啓動的內核或系統(允許傳遞引導參數給內核,選擇界面可隱藏)

3、爲編輯功能提供保護機制(選擇運行指定的內核得先輸入密碼、使用e命令得先輸入密碼)

=============================================================================  


四、 grub的兩種形式(使用虛擬機演示)

1、圖形模式

     系統啓動之前開始出現倒數秒數的時候,按esc可以進入grub界面(一般是隱藏的,會啓動默認的系統)選擇我們想要啓動的不同系統。我這裏只有一個系統,所以只有一項可以選

wKiom1XpCenxwyxWAAEomjK1Y-w723.jpg

按e進入編輯模式

wKioL1XpDFHijgokAAGtxQZM1nk781.jpg

按上下選擇要編輯的項,按e對其編輯,按enter鍵保存編輯,按o新添一行,d刪除此行,b啓動系統

2、命令行模式   

  系統啓動前倒數秒數的時候按esc進入圖形界面,之後按c鍵會進入命令行模式

wKioL1XpDOXy8tS0AAEQPs5vn2E733.jpg

wKiom1XpEGPDgnYBAAG16mprjOI435.jpg

grub的命令行接口 :

help:獲得幫助列表  

root  (hd#,#) 設置哪兒塊磁盤爲根         

kernel /path/to/kernel_file :設置本次啓動時用到的內核文件  vmlinuz(z表示壓縮的意思);額外還可以添加許多內核支持使用的cmdline參數

initrd /path/to/initrd_file : 設定爲選定的內核提供額外文件的ramdisk;要和內核版本一樣

boot:引導啓動選定的內核

==========================================================================================


五、GRUB的配置文件: /boot/grub/grub.conf

 配置項:支持命令行補全(tab)

default=#: //設定默認啓動的菜單項

timeout=#:  //指定菜單項等待選項選擇的時長

splashp_w_picpath=(hd#,#)/path/to/xpm_pic_file :   //指明菜單背景圖片所在路徑(gimp 640*680)

hiddenmenu :     //隱藏菜單

password [--md5] string :   //菜單編輯認證

title TITLE :           //定義菜單項“標題”

          root (hd#,#): //grub查找stage2及kernel文件所在設備分區;爲grub的“根”

kernel /path/to/vmlinuz_file [parameters]:  //啓動內核並設置額外參數

initrd /path/to/initramfs_file:   //內核匹配的ramfs文件

          password [--md5] string :    //啓動選定的內核或操作系統時進行認證 【grub-md5-crypt 生成密碼】

=========================================================================================


六、安裝GRUB命令

使用grub-install命令

    # grub-install [--root-directory=DIR] DEVICE

     --root-directory=指定的路徑必須是內核及initrd文件所在的分區的掛載點的父目錄,且此掛載點必須叫boot

========================================================================================


七、實例,安裝GRUB至令一個磁盤,並使用這個磁盤啓動一個帶bash的linux的系統

1、給虛擬機新建1個20G的磁盤,過程圖解:

wKiom1XpE8vi8x2TAAHYpeGPkUs795.jpg

wKioL1XpFfCTAiaVAAEfvSQ0bco852.jpg

wKiom1XpE8ySORt9AAFex52Y1-g864.jpg

wKioL1XpFfCyKD3LAAGdWr91wzY523.jpg

wKiom1XpE8zA7rL_AAE3xk2MVu4445.jpg

wKioL1XpFfGSzYqeAAFTp1jsuYw655.jpg


2、啓動虛擬機,並給新的磁盤分3個區

/dev/sdb1(/boot):100M  文件系統使用ext4

/dev/sdb2(swap):2G 

/dev/sdb3(/):5G  文件系統使用ext4

[root@pyhon ~]# fdisk /dev/sdb         //給磁盤分區,分區過程如下圖所示(紅框標識)

wKioL1XpGOqzh1BEAAUr6LtBchU964.jpg

wKiom1XpFzSSIBwAAAGe84VVArM591.jpg//讓內核讀取磁盤分區

[root@pyhon ~]# mke2fs -t ext4 /dev/sdb1      //格式化分區,文件系統爲ext4
[root@pyhon ~]# mke2fs -t ext4 /dev/sdb3
[root@pyhon ~]# mkswap /dev/sdb2

至此磁盤分區準備完成!!


3、創建/boot目錄,掛載/dev/sdb1,具體操作過程如下

[root@pyhon ~]# mkdir /mnt/boot
[root@pyhon ~]# mount /dev/sdb1 /mnt/boot/
[root@pyhon ~]# grub-install --root-directory=/mnt /dev/sdb

wKioL1XpHMjyVaDIAAEeqhw9XuY480.jpg

wKiom1XpGuLyrS-WAAMV6WoBdg4945.jpg

[root@pyhon ~]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz
[root@pyhon ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img

wKiom1XpJLqz6TURAACfl7QDa9U811.jpg


4、創建/sysroot目錄,掛載/dev/sdb3,具體操作過程如下

[root@pyhon ~]# mkdir /mnt/sysroot
[root@pyhon ~]# mount /dev/sdb3 /mnt/sysroot/
[root@pyhon ~]# cd /mnt/sysroot/
[root@pyhon sysroot]# mkdir -pv bin boot dev etc home lib lib64 media mnt opt proc root sbin srv sys tmp usr var

wKiom1XpHSnxfTy4AAHqZxU0WuY528.jpg

[root@pyhon sysroot]# cp /bin/bash /mnt/sysroot/bin/
[root@pyhon sysroot]# ldd /bin/bash

wKioL1XpIDvzABRnAADYyexS6ZI569.jpg

[root@pyhon sysroot]# cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/   
[root@pyhon sysroot]# cp /lib64/libdl.so.2 /mnt/sysroot/lib64/
[root@pyhon sysroot]# cp /lib64/libc.so.6 /mnt/sysroot/lib64/
[root@pyhon sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/


將ls及依賴的庫文件複製到/mnt/sysroot目錄下面對應的目錄中,測試如下

wKiom1XpIGGxDCSfAAWU7MpErmo652.jpg


5、修改/mnt/boot/grub/grub.conf文件,並關閉此虛擬機

wKioL1XpKtfiNSO9AAC5cslv8fg282.jpg

[root@pyhon ~]# sync
[root@pyhon ~]# sync
[root@pyhon ~]# sleep 10
[root@pyhon ~]# shutdown -h now


6、將磁盤拆下來放到一個新的虛擬機上,測試如下

wKioL1XpKmOg4sskAADa5DHfiRQ492.jpg

wKiom1XpKD_jQdI6AAFVfagSNho953.jpg

wKioL1XpKmTixTvxAAGblQM6Rgg684.jpg

wKioL1XpKmTiGIRiAAGVyHd0Vc8081.jpg

wKiom1XpKECRTYaCAAKHz9yuUuE347.jpg




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章