Grub: GRand Unified Bootloader,一個GNU項目下的多操作系統啓動引導程序,主要用於選擇磁盤上不同的的操作系統或內核
grub 0.x: grub legacy #傳統grub(Centos5,CentOS6均使用grub legacy)
grub 1.x: grub2 (CentOS7)
傳統grub可分文3個階段:
grub 1: 存儲在MBR中
grub 1_5:存儲在MBR之後的扇區,讓stage1中的bootloader 能夠識別stage2所在分區的文件系統
grub 2:存儲在磁盤分區(/boog/grub)
grub 配置文件:/boot/grub/grub.conf [root@S2 ~]# ll /etc/grub.conf lrwxrwxrwx. 1 root root 22 Sep 12 18:25 /etc/grub.conf -> ../boot/grub/grub.conf
stage2及內核等通常放置於一個基本磁盤分區;否則啓動時候,無法被內核加載,因爲缺少文件系統的驅動,即/boot應該
是一個基本磁盤分區
功用:
(1) 提供菜單、並提供交互式接口
e: 編輯模式,用於編輯菜單;
c: 命令模式,交互式接口;
(2) 加載用戶選擇的內核或操作系統
允許傳遞參數給內核
可隱藏此菜單
(3) 爲菜單提供了保護機制
爲編輯菜單進行認證
爲啓用內核或操作系統進行認證
如何識別設備:
(hd#,#)
hd#: 磁盤編號,用數字表示;從0開始編號
#: 分區編號,用數字表示; 從0開始編號
root (hd#,#):可以指定根
grub的命令行接口
help: 獲取幫助列表
help KEYWORD: 詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#) 指定根分區路徑
kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk(版本號必須與內核版本號完全匹配)
boot: 引導啓動選定的內核;
手動在grub命令行接口啓動系統:
grub> root (hd#,#) (hd0,0) 表示第一個磁盤的,第一個分區
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:/boot/grub/grub.conf (開機啓動的菜單都是通過此配置文件設置的)
配置項:
default=#: 設定默認啓動的菜單項;菜單項(title)編號從0開始;
timeout=#:指定菜單項等待選擇的時長;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
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: 啓動選定的內核或操作系統時進行認證;
系統啓動時,在如下頁面,按任意可進入菜單頁面
按c即可進入命令模式,命令模式下也可以使用find 等命令
啓用認證:
grub菜單編輯認證和啓動選定的內核或操作系統時進行認證
編輯 grub.conf 配置文件
如下配置:啓動了菜單認證,並對Test System 單獨啓用了操作系統認證
[root@S2 ~]# grub-md5-crypt #對密碼使用md5加密算法加密
Password:
Retype password:
$1$w2jUR$DjJTCxZKcg9kb76nLKgvY1 #將加密過的密碼寫入到如下grub.conf配置文件中去
重啓後,需要按'p' 輸入密碼纔可以編輯grub 菜單,如果輸入錯誤的密碼,將無法進入菜單編輯頁
如果驗證用過,則會正常進入編輯界面
驗證啓動Test System是否需要輸入密碼(如果此時選擇啓動Centos 6 將不需要輸入密碼,因爲配置文件中未對其做啓動操作系統認證)
如果密碼錯誤,會提示如下
如果密碼正確,就會正常啓動系統
如何進入單用戶模式:
(1) 編輯grub菜單(選定要編輯的title,而後使用e命令);
(2) 在選定的kernel後附加1, s, S或single都可以;
(3) 在kernel所在行,鍵入“b”命令;
練習: 在空白磁盤安裝grub,併成功引導系統
[root@localhost ~]# fdisk -l /dev/sdb #創建瞭如下三個分區,分別是sdb1(將作爲/boot),sdb2 (swap),sdb3(將作爲/root)
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x501be724
Device Boot Start End Blocks Id System
/dev/sdb1 1 14 112423+ 83 Linux
/dev/sdb2 15 276 2104515 82 Linux swap / Solaris
/dev/sdb3 277 930 5253255 83 Linux
# mkdir /mnt/root #爲sdb1創建掛載點
# mkidr /mnt/sysroo #爲sdb3創建掛載點
# mount /dev/sdb1 /mnt/boot #掛載sdb1
# mount /dev/sdb3 /mnt/sysroot #掛載sdb2
# grub-install --root-directory=/mnt /dev/sdb #向磁盤sdb安裝grub程序
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
# vim /mnt/boot/grub/grub.conf #創建grub.conf 配置文件
default=0
timeout=5
title Test Centos
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bash #將使用/bin/bash 作爲系統啓動後運行的第一個程序
initrd /initramfs.img #指定ramdisk文件
複製/bin/bash 和其所依賴的庫文件到/mnt/sysroot (sdb3)
#cp /bin/bash /mnt/sysroot/bin
# ldd /bin/bash #查看/bin/bash依賴的庫文件
linux-vdso.so.1 => (0x00007fffd7143000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fc7e3f01000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc7e3cfd000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc7e3968000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc7e4130000)
複製/bin/bash以來的所有的庫文件到對應的目錄
#cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
#cp /lib64/libdl.so.2 /mnt/sysroot/lib64/
#cp /lib64/libc.so.6 /mnt/sysroot/lib64/
#cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64
[root@S2 ~]# ls /mnt/boot/grub/ #查看/boot目錄有有沒grub相關文件,證明grub已經安裝成功
device.map e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 stage1 stage2 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
第二步:準備內核文件和ramdisk文件
# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinuz #直接複製當前系統的vmliuz文件到新硬盤sdb上的boot目錄
# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img #直接複製當前系統的ramdisk到新硬盤sdb上的boot目錄
# chroot /mnt/sysroot/ #切換到新根目錄下,驗證複製過去的bash能否正常工作
bash-4.1#
第三步:創建虛擬機,然後使用剛剛安裝有grub的空白磁盤來啓動系統
選擇稍後安裝操作系統
選擇使用現有虛擬磁盤
瀏覽到虛擬磁盤的具體位置,並加載
接下來啓動虛擬機,驗證能否成功grub引導系統,看到#提示符,就已經OK了