Linux學習筆記之 Grub簡單介紹

spacer.gif

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: 啓動選定的內核或操作系統時進行認證;

系統啓動時,在如下頁面,按任意可進入菜單頁面

  wKiom1YG20eBpQmPAAFgRs_zgBg649.jpg

按c即可進入命令模式,命令模式下也可以使用find 等命令

  wKioL1YG26OiJkI9AADucVsLMnA760.jpg

啓用認證:

grub菜單編輯認證和啓動選定的內核或操作系統時進行認證

編輯 grub.conf 配置文件

如下配置:啓動了菜單認證,並對Test System 單獨啓用了操作系統認證

[root@S2 ~]# grub-md5-crypt        #對密碼使用md5加密算法加密

Password: 

Retype password: 

$1$w2jUR$DjJTCxZKcg9kb76nLKgvY1  #將加密過的密碼寫入到如下grub.conf配置文件中去

wKiom1YG2-bCrA90AARgob1Kecs170.jpg


重啓後,需要按'p' 輸入密碼纔可以編輯grub 菜單,如果輸入錯誤的密碼,將無法進入菜單編輯頁

wKioL1YG3LuDF00RAAFyMDASuMo058.jpg

如果驗證用過,則會正常進入編輯界面

wKiom1YG3QjihgljAAGEXpkN5vM343.jpg

驗證啓動Test System是否需要輸入密碼(如果此時選擇啓動Centos 6 將不需要輸入密碼,因爲配置文件中未對其做啓動操作系統認證)     wKiom1YG3YuQiu8dAAFgymGzc1A006.jpg 

如果密碼錯誤,會提示如下

   wKioL1YG3gPy-NjxAABnF5cDEMM585.jpg

如果密碼正確,就會正常啓動系統

   wKioL1YG3sGxZF5vAABy7pYBP08510.jpg

如何進入單用戶模式:

(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的空白磁盤來啓動系統

選擇稍後安裝操作系統

wKiom1YG3vGT_royAAHtQTptzak473.jpg


選擇使用現有虛擬磁盤

wKiom1YG3xqTKUNqAAIjU-tvxlI477.jpg


瀏覽到虛擬磁盤的具體位置,並加載

wKioL1YG3zHj-iawAAJsynj1sic870.jpg


接下來啓動虛擬機,驗證能否成功grub引導系統,看到#提示符,就已經OK了

wKioL1YG32Tzkcz4AAMW92wc2cc114.jpg


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