GRUB legacy 的記錄。

一,簡介: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菜單:

wKiom1jPUKyRD8HyAAAjobz4fkk461.png-wh_50


按c進入命令行藉口:

wKioL1jPUmfjp1aWAABab9H_nU0257.png-wh_50

經常使用命令:

    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開始編號


例:手動選定內核啓動

wKioL1jPr0LxSiWjAAAthcux6iE152.png-wh_50



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

wKiom1jPtYjBEFkvAABfpF0FXTQ216.png-wh_50

    配置項:

        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輸入密才能編輯:

wKioL1jPuW-hi9RjAAAhfdfSy-o411.png-wh_50


2,若是咱們忘記了root密碼,也能夠利用grub進入單用戶模式找回密碼:

    步驟:

        ⑴,編輯grub菜單(選定要編輯的title,然後使用e命令)

        ⑵,在選定的kernel後附加:1,s,S或single均可以;

        ⑶,在kernel所在行鍵入「b」命令;

        ⑷,進去單用戶模式後,直接修改密碼就能夠了;

wKiom1jPu9CwB0eNAAAUt6lf1e4021.png-wh_50


三,安裝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中調整從光盤引導系統;

        而後選擇進入救援模式:

                wKioL1jPwzHBHtz7AAaiYS2qnwg818.png-wh_50

        而後會讓你選擇語言,需不須要網絡,而後提示你把當前系統掛載至那個目錄,最後會進入shell命令行

                wKiom1jPxLGAWnRiAAAk1FRtsII291.png-wh_50

            有兩種方法修復:

                第一種:

                    chroot /mnt/sysp_w_picpath

                    grub-install --root-directory=/ /dev/sda

                wKioL1jPxlbyZSf-AAA191mRKeU327.png-wh_50

                

                第二種:

                    grub

                    grub> root (hd#,#)

                    grub> setup (hd#)

                wKioL1jPxvOCK23RAABAJ_Cfakk748.png-wh_50

            reboot重啓

        修復完成後,啓動前記得拆除磁盤。

相關文章
相關標籤/搜索