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 、root、homeusr、etc、devsrv、proc、vartmp、mntmedia、sys、lib、lib64等等

然后進入到/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 11:17
下一篇 2016-09-13 11:17

相關推薦

  • 我的第一篇博客

        第二天,很早的來到,不知道做些什么,未來也l許很忙碌,希望能夠一直堅持,不管是難吃的飯菜,還是不良的作息,起碼做個對得起這四個半月的人吧…

    Linux干貨 2017-07-11
  • N26-肉肉-第一周作業

    1.描述計算機的組成及其功能CPU:運算器、控制器、寄存器、緩存存儲器:內存,RAM(Random Access Memory)    IO:輸入輸出設備2.按系列羅列linux的發行版本,并描述不同發行版本之間的聯系與區別。發行版有數百種之多,著名的主流發行版有3種Debian,Slackware,RedHatDebian:使…

    Linux干貨 2017-01-03
  • 文本處理三劍客之Gawk ?

        AWK可以說是一種語言,他有著自己的語法,可以實現函數定義,變量賦值,條件選擇(循環,判斷,選擇)…總之是值得深入研究一下的。     AWK的起源:是個報告生成器,可以格式化文本輸出內容,它的命名是由Aho,Weinberger,Kernighan三位作者首…

    Linux干貨 2016-09-21
  • Linux Basics-重定向與管道:第一部分

    Linux Basics-重定向與管道:第一部分 概述 本教程將介紹 Linux 中重定向標準 IO 流的基本技術。學習: 什么是重定向與標準 IO 流:標準輸入、標準輸出和標準錯誤 各種流和管道的實際應用   前提條件 你應該了解 Linux 基本知識以及擁有一個正常工作的 Linux 系統,在本文說明的實例中,我采用是CentOS 7 內核版本…

    Linux干貨 2016-10-29
  • 網絡的冰山一角

        這周我們學習了網絡管理,每一天進度特別快,上課認真聽了,但是感覺也只能聽懂一半。所以我決定把網絡管理作為這周博客寫一寫,這樣相當于又復習了一邊,能加深印象。 一、用戶應用程序對網絡的影響     1、批處理應用程序:無需直接人工交互,寬帶很重要,但是并非關鍵性因素。 &n…

    2017-09-04
  • 第一周作業

    1. 描述計算機的組成及其功能 CPU:CPU包括運算器和控制器,并采用大規模集成電路工藝制成的芯片,又稱微處理器芯片。 運算器又稱算術邏輯單元(Arithmetic Logic Unit簡稱ALU)。它是計算機對數據進行加工處理的部件,包括算術運算(加、減、乘、除等)和邏輯運算(與、或、非、異或、比較等)。 控制器負責從存儲器中取出指令,并對指令進行譯碼;…

    Linux干貨 2017-01-04

評論列表(1條)

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

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

欧美性久久久久