GRUB詳解

GRUB的啟動流程:

grub

centos56中:0.X版本 grub legacy

centos7中:1.X版本  grub2

grub可分為三個階段:

stage1mbr446字節中保存的Boot Loader程序

stage1.5mbr之后的扇區,讓stage1中的Boot Loader能夠識別stage2所在的分區上的文件系統

stage2:存放在磁盤分區中(/boot/grub

   配置文件:/boot/grub/grub.conf 有個鏈接文件 /etc/grub.conf

工作流程:當我們系統啟動的時候,如果加載grub所在的磁盤時會讀取磁盤上的MBR從而找到stage1stage1加載完以后,它會嘗試去讀取隨后扇區中的stage1.5stage1.5讀到以后從而就能夠驅動真正的stage2所在的磁盤分區了,所加載的磁盤分區上不但有第二階段,還有內核文件及ramdisk等都放置在此分區,所以,這就是為什么我們grub能夠加載到內核文件的原因,要記得,我們當前硬件平臺的主板BIOS一定要能夠識別硬盤,然后BIOS才會幫你去加載硬盤中的Boot Loader磁盤中的Boot Loade自身加載完之后就能直接識別當前主機能識別到的硬盤設備了,要注意,硬盤設備能識別不代表硬盤設備中的文件系統也能識別,因為文件系統是額外附加在硬盤上的一層軟件組織的文件結構通常我們要對接文件系統要用到文件系統驅動你的應用程序必須能夠識別理解文件系統才可以,在stage1.5階段其實就是給grub提供了文件系統驅動,從它而就能夠訪問第二階段和內核所在的分區了。

stage2及內核等通常放置于一個基本的磁盤分區。

grub的功用:

(1)    提供菜單、并提供交互式接口

e:編輯模式,用于編輯菜單

c:命令模式,交互式接

a:修改kernel參數

(2)    加載用戶選擇的內核或操作系統

允許傳遞參數給內核

可隱藏此菜單

(3)    為菜單提供了保護機制

為編輯菜單機型認證

為啟用內核或操作系統進行認證

grub如何識別設備:

(hd#,#)

     hd#:磁盤編號,用數字表示 0開始編號

       #:分區編號,用數字表示 0開始編號

     例如:(hd0,0)第一塊磁盤的第一個分區

      /boot目錄有兩種可能:

                         /boot為單獨的分區

                         在根文件系統上

grub的命令行口

       help:獲取幫助列表

             在列表中的root命令是用來設置當前grub

的根設備的,在我們啟動設備時,對于grub來說,根設備不是操作系統的根文件系統,而是grub的第二階段所在的磁盤才為grub的根。root命令只能設置設備或分區為根;

        findhd#,#/path/to/somefile:根據路徑查找文件

        root (hd#,#)

        kernel /PATH/TO/KERNEL_FILE:設定本次啟動時使用到的內核文件,額外還可以添加許多內核支持使用的cmdline參數;

        例如:init=/path/to/init, selinux=0  quied:靜默模式ro只讀        initrd /PATH/TO/INITRAMFS_FILE:設定為選定的內核提供額外文件的ramdisk,ramdisk必須與內核版本號完全匹配。

         boot:引導啟動選定的內核

      手動在grub命令行接口啟動系統:

         grub> roothd#,#

         grub>kernel /vimlinuz-VERSION-RELEASE ro root=/dev/DEVICE

         grub>initrd /initramfs-VERSION-RELEASE.img

         grub>boot

配置文件:/boot/grub/grub.conf

   配置項:

         default=#:指定默認啟動菜單項;落單項(title)編號從0開始

         timeout=0:指定菜單項等待選擇的時常

         splashimage=hd#,#/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑

         hiddenmenu:隱藏菜單

         password [–md5] STRING:菜單編輯認證

         title TITLE:定義菜單項“標題”,可出現多次

         roothd#,#):grub查找stage2kernel文件所在的設備分區;為grub的“根”;

         kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核

         initrd /PATH/TO/INITRAMFS_FILE:內核匹配的ramfs文件

         password [–md5] STRING:啟動選定的內核或操作系統時進行認證

grub-md5-crypt命令:可以生成md5加密密碼串

進入單用戶模式:

(1)    編輯grub菜單(選定要編輯的title而后使用e命令);

(2)    在選定的kernel后附加

1 s S single都可以

(3)    kernel所在行,鍵入“b”命令

只要Boot Loader壞了,系統就不能夠啟動

安裝grub

   安裝命令:

     (1)grub-install –root-direction=/boot的父目錄  /dev/DISK

2grub>root(hd#,#)

grub>setup(hd#)l

ldd命令:查看某程序依賴的庫

緊急救援模式:

使用光盤引導,把光盤引導調至最上面

按提示選擇下一步,最后進入救援模式所提供的shell環境中進行系統的修復。

自制linux

在虛擬機中添加一塊新硬盤,將新硬盤分三個區,分別作為自制linux的根分區、boot分區和swap分區;然后格式化各分區,創建掛載點目錄,將分好的區進行掛載,(注意:創建的boot分區的掛載點名稱一定叫boot,因為grub-install命令一定要找boot目錄才行,所以就需要創建一個boot目錄作為掛載點 例如:/mnt/boot進入到根分區的掛載點目錄,因為此分區是要作為自制linux的根分區的,所以,要在此分區中創建根目錄下的一級目錄,如:bin、sbin、boot 、roothome、usretc、devsrv、procvar、tmpmnt、media、sys、liblib64等等

然后進入到/boot分區所在的掛載點目錄中,執行grub-install /dev/DISK 安裝grub,而后進入到grub目錄中,創建grub.conf配置文件,具體內容為:

      default=0

      timeout=5

      title centos linux

      root (hd0,0)

      kernel /vm……. selinux=0 init=/bin/bash root=/dev/sda2(因為當硬盤加到新的系統上后,此硬盤就為第一塊硬盤了)

      initrd /initramfs…….

然后復制內核文件和initrd文件到/boot目錄

cp /boot/vm…….  /mnt/boot

cp /boot/initramfs……  /mnt/boot

創建完這些后就可以去導入一些基本的命令了,可以手動的復制到自制linux的根分區目錄中,也可以使用腳本往里導入

手動導入:用cp命令從/bin目錄中復制出需要的命令,

然后用ldd命令查看此命令所依賴的共享庫文件;

ldd命令:用來查看各應用程序所依賴的庫

格式為:

ldd [選項] …FILE…

導入共享庫文件到自制linux 的根目錄中(一般存放在lib目錄或lib64目錄中)

 使用腳本,可以使用腳本導入,腳本內容如下:

#!/bin/bash

ch_root="/mnt/sysroot"      //這里改成自制linu的根分區位置 (例如:/mnt/sdb2

[ ! -d $ch_root ] && mkdir $ch_root

 

bincopy() {

    if which $1 &>/dev/null; then

 

        local cmd_path=`which –skip-alias $1`

        local bin_dir=`dirname $cmd_path`

        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}

        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}

        return 0

    else

        echo "Command not found."

        return 1

    fi

}

 

libcopy() {

    local lib_list=$(ldd `which –skip-alias $1` | grep -Eo '/[^[:space:]]+')

    for loop in $lib_list;do

        local lib_dir=`dirname $loop`

        [ -d ${ch_root}${lib_dir} ] || mkdir -p  ${ch_root}${lib_dir}

        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}

    done

}

 

 

read -p "Please input a command or quit: " command

 

while [ "$command" != "quit" ];do

    if bincopy $command ;then

        libcopy $command

    fi

    read -p "Please input a command or quit: " command

done

創建/etc/fstab文件

   是在根分區的掛載目錄中的/etc/目錄下創建的

   vim /etc/fstab

      /dev/sda2  /boot  ext4  defaults 1  1

      /dev/sda1  /   ext4   defaults 1  2

   這輛個掛載設備都應該改為/dev/sda#因為自建的系統加上此塊盤后,磁盤為第一塊,這個應根據情況而定。

做完以上步驟就可以硬盤卸下,去創建一個新的虛擬機,然后把這塊硬盤當作新虛擬機第一硬盤,就可以使用了。

grub菜單修復

當破壞了MBR的前446字節的內容后怎么修復?

  修復方法:

可以進入到救援模式,

切換到根chroot /mnt/sysimage

grub-install –root-direction=/ /dev/sda  //安裝grub

reboot

當誤刪除了/boot目錄以及/etc/fstab文件后該如何修復?

修復方法:

重啟系統,在bios界面選擇光盤引導,進入救援模式,在救援模式的shell環境中,執行以下命令:

fdisk –l                    //查看分區情況

mkdri /mnt/cdrom           //創建掛載點目錄

然后,把剛才查看到的分區一一掛載至此目錄,去找出根分區和boot分區,找到后就掛載根分區至此目錄,

mkdir /mnt//boot            //創建boot分區的掛載點目錄

切換到根分區的掛載點目錄,創建/etc/fstab文件

vi /etc/fstab

   /dev/DISK1  /  ext4  defaults  1  2

   /dev/DISK2  /boot  ext4  defaults  1  1

reboot                    //重新進入,使fstab文件生效

再次進入到救援模式是shell環境中

chroot /mnt/sysimages       //切換到真正的根

cd boot                    //切換至boot目錄

grub-install /dev/DISK        //安裝grub

cd grub                    //進入grub目錄

vi grub.conf                 //創建grub配置文件

   default=0

   timeout=5

   title centos6

   root (hd0,0)

   kernel /ve……… ro root=/dev/DISK1

   initrd /initramfs……

mount /dev/sr0 /media/cdrom  //掛載光盤

rpm –ixh /media/cdrom/Package/kernel-2……  –force  //強制重新安裝內核

exit                        //退出

reboot                     // 重啟,

修復完成,進入系統后,可自行將grub配置文件和/etc/fstab文件進行完善

原創文章,作者:ZJM,如若轉載,請注明出處:http://www.www58058.com/45718

(1)
ZJMZJM
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • VIM入門及進階

    什么是VIM?     VIM類似于Vi編輯器, 它是一個功能強大、可高度定制的文本編輯器, 是一個純粹的自由軟件。注意:vi和vim不完全相同 為什么要使用VIM?     相信大多數人接觸Linux時使用的第一個文本編輯器都不是VIM,很多人看到VIM復雜的命令操作就望而祛步…

    系統運維 2016-03-04
  • sed簡介及常見用法

    sed是一個文本流處理器,配合正則表達式用可以實現很多文本處理操作。 和grep一樣,sed是一行一行的處理的。sed處理文本時,首先會將源文件復制一份到內存中,然后將文本一行一行拿到模式空間內進行操作,最后輸出到標準輸出,即屏幕上。 在模式空間中,每一行都會根據用戶給的條件進行匹配,匹配到了進行編輯后輸出,沒有匹配到,直接輸出到標準輸出。sed除了模式空間…

    2018-01-04
  • MAN手冊各章節功能介紹及快捷鍵鍵位整理

       初學linux ,請教別人的時候,遇到人不耐煩回答我等菜菜的問題,都會說一句,“自己去man”,“翻過man了嗎,再來問吧”,哦,my gd,這個man到底是何方超人啊,其實man就是linux自帶的文檔,假如你不知道ls這個命令的用法,你可以試著敲入 man  ls  ,然后來看看,會有啥結果。效果不錯吧,一般…

    Linux干貨 2016-10-18
  • HTTP詳解(1)-工作原理

    1. HTTP簡介          HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸…

    Linux干貨 2015-04-04
  • nginx負載均衡實驗

    實驗一、 實驗環境:     1、一臺director主機。并部署nginx服務。        內網iP:192.168.1.1  外網iP:10.1.64.1     2、一臺后端服務器。并部署h…

    Linux干貨 2016-10-30
  • NET25-第7周作業

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@node1 ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI o…

    Linux干貨 2017-03-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 13:21

    總結的還不哦,只是排版是不是太隨意了?

欧美性久久久久