一,簡介:linux
GRUB legacy存在於MBR(主引導記錄)的446字節中,是一個本來由 GNU Project 維護的 多啓動 引導器(官方已經中止對其的維護,以升級到GRUB version 2.x),其前身爲 GRUB (GRand Unified Bootloader), 最初由 Erich Stefan Boleyn 設計和實現。shell
簡單的說,啓動引導程序是計算機啓動時運行的第一個程序。它可用於選擇操做系統分區上的不一樣內核,也可用於向這些內核傳遞啓動參數。而後內核逐個初始化操做系統的其他部分。
vim
二,功用:bash
1,GRUB的啓動階段:
網絡
stage1:加載mbr;
ide
stage1_5:加載mbr以後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的文件系統;
ui
stage2:磁盤分區(/boot/grub/);this
stage2及內核等一般放置於一個基本磁盤分區:
加密
功用:
spa
⑴提供菜單,並提供交互式藉口;
e:編輯模式,用於編輯菜單;
c:命令模式,交互式接口;
⑵加載用戶選擇的內核式操做系統;
容許傳遞參數給內核;
可影藏此菜單;
⑶爲菜單提供了保護機制;
爲編輯菜單進行認證 ;
爲啓用內核或操做系統進行認證;
GRUB菜單:
按c進入命令行藉口:
經常使用命令:
help:獲取幫助列表;
help KEYWORD:詳細幫助信息;
find (hd#,#) /PATH/TO/SOMEFILE:查找;
root (hd#,#):把哪一個磁盤設定爲根設備;
kernel /PATH/TO/KERNEL_FILE:設定本次啓動時用到的內核文件,額外還能夠添加許多內核支持使用的cmdline參數;
initrd /PATH/TO/INITRAMFS_FILE:設定爲選定的內核提供額外文件的ramdisk;
boot:引導啓動選定的內核;
grub如何識別設備:
(hd#,#)
hd#:磁盤編號,用數字表示,從0開始編號
#:分區編號,用數字表示,從0開始編號
例:手動選定內核啓動
2,grub配置文件:/boot/grub/grub.conf <---- /etc/grub.conf
[root@localhost ~]# ll /etc/grub.conf lrwxrwxrwx. 1 root root 22 Dec 3 2015 /etc/grub.conf -> ../boot/grub/grub.conf [root@localhost ~]# vim /etc/grub.conf
配置項:
default=#:設定默認啓動的菜單項;菜單項(title)編號從0開始;
timeout=#:指定菜單項等待選項選擇的時長;
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddenmenu:隱藏菜單;
password [--md5] STRING:菜單編輯認證;
title TITLE:定義菜單項「標題」,可出現屢次;
root (hd#,#):grub查找stage2及kernel文件所在設備分區,爲grub的「根」;
kernel /PATH/RO/VMLIUNZ_FILE [PARAMETERS]:啓動的內核;
initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件;
password [--md5] STRING:啓動選定的內核或操做系統是,進行認證;
可用命令:greb-md5-crypt 命令生成加密密碼;
例:
1,咱們給grub菜單編輯加密,只有輸入密碼認證才能編輯
1,首先用grub-md5-crypt命令生存密文密碼:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$4O3AC/$K5PIzVEaUIC10k5IfhYT31
2,而後打開配置文件:/boot/grub/grub.conf
[root@localhost ~]# vim /boot/grub.grub.conf
default=0
timeout=5
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$4O3AC/$K5PIzVEaUIC10k5IfhYT31 <---添加這一行
title CentOS (2.6.32-431.el6.i686)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-431.el6.i686 ro root=UUID=06492fe8-720d-4f10-b140-6943db271086 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-431.el6.i686.img
[root@localhost ~]#reboot
重啓以後看到grub菜單,須要按p輸入密才能編輯:
2,若是咱們忘記了root密碼,也能夠利用grub進入單用戶模式找回密碼:
步驟:
⑴,編輯grub菜單(選定要編輯的title,然後使用e命令)
⑵,在選定的kernel後附加:1,s,S或single均可以;
⑶,在kernel所在行鍵入「b」命令;
⑷,進去單用戶模式後,直接修改密碼就能夠了;
三,安裝grub:
grub-install 命令安裝:
[root@localhost ~]# mount /dev/sdc2 /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
bin etc lib media mogdata opt root selinux testing users
dev home lost+found mnt oot proc sbin sys tmp var
[root@localhost mnt]# mkdir ./boot
[root@localhost mnt]# ls
bin dev home lost+found mnt oot proc sbin sys tmp var
boot etc lib media mogdata opt root selinux testing users
[root@localhost mnt]# cd
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc (--root-directory=指定的目錄爲boot目錄的上級目錄)
sdc sdc1 sdc2
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc2
Probing devices to guess BIOS drives. This may take a long time.
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'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
[root@localhost ~]# ls /mnt/boot/grub/
device.map ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
安裝完成。
另外,grub-install命令也能夠用了修復grub:
例:
先破壞grub:
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000748108 s, 596 kB/s
[root@localhost ~]# reboot
重啓以後在BIOS中調整從光盤引導系統;
而後選擇進入救援模式:
而後會讓你選擇語言,需不須要網絡,而後提示你把當前系統掛載至那個目錄,最後會進入shell命令行
有兩種方法修復:
第一種:
chroot /mnt/sysp_w_picpath
grub-install --root-directory=/ /dev/sda
第二種:
grub
grub> root (hd#,#)
grub> setup (hd#)
reboot重啓
修復完成後,啓動前記得拆除磁盤。