一、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界面(一般是隱藏的,會啓動默認的系統)選擇我們想要啓動的不同系統。我這裏只有一個系統,所以只有一項可以選
按e進入編輯模式
按上下選擇要編輯的項,按e對其編輯,按enter鍵保存編輯,按o新添一行,d刪除此行,b啓動系統
2、命令行模式
系統啓動前倒數秒數的時候按esc進入圖形界面,之後按c鍵會進入命令行模式
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的磁盤,過程圖解:
2、啓動虛擬機,並給新的磁盤分3個區
/dev/sdb1(/boot):100M 文件系統使用ext4
/dev/sdb2(swap):2G
/dev/sdb3(/):5G 文件系統使用ext4
[root@pyhon ~]# fdisk /dev/sdb //給磁盤分區,分區過程如下圖所示(紅框標識)
[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
[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
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
[root@pyhon sysroot]# cp /bin/bash /mnt/sysroot/bin/ [root@pyhon sysroot]# ldd /bin/bash
[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目錄下面對應的目錄中,測試如下
5、修改/mnt/boot/grub/grub.conf文件,並關閉此虛擬機
[root@pyhon ~]# sync [root@pyhon ~]# sync [root@pyhon ~]# sleep 10 [root@pyhon ~]# shutdown -h now
6、將磁盤拆下來放到一個新的虛擬機上,測試如下