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的根分区的,所以,要在此分区中创建根目录下的一级目录,如:binsbinboot roothomeusretcdevsrvprocvartmpmntmediasysliblib64等等

然后进入到/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.178linux.com/45718

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

相关推荐

  • yum更多用法及源码编译安装apache和当天作业

    一、yum的更多用法 上篇文章介绍了yum的基础用法及yum源的基本配置,除此之外yum还有更多的用法,以下将继续介绍yum的使用方法。 1、yum-config-manager工具,该工具可以自动生成yum的repo文件,而不需要手动创建编写,使用方法如下: 用法:yum-config-manager [options] [section] -add-re…

    Linux干货 2016-08-24
  • 文件查找命令之find

    文件查找命令之find   特点:实时查找,精确查找,由于find是全磁盘文件查找所有查找速度要比locate略慢一些。   find查找功能强大,下面主要介绍find查找条件的一个重要特性–德·摩根定律     德·摩根定律      非(A &&B)=(非A…

    Linux干货 2016-08-16
  • Linux哲学思想以及自己的理解

    Linux哲学思想: #1 一切接文件 #2  单一目的小程序 #3 组合小程序完成复杂任务 #4 文本文件保存配置信息 #5 尽量避免捕获用户接口 #6 提供机制,而非策略 自己的理解:(玩Linux时间比较短,没什么太深刻的理解) #1 一切皆文件 我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件,我们可以…

    Linux干货 2016-08-15
  • bash脚本编程之select语法详解

    shell编程之select select控制结构(在tcsh中不可用)基于Korn Shell中的控制结构 select语句首先显示一个菜单,然后根据用户的选择给变量赋予相应的值,最后执行一系列命令 其语法如下: select varname in list do commands done select 表达式是一种bash的扩展应用,动作包括: 自动用…

    Linux干货 2016-08-24
  • M22 Centos6上编译安装httpd2.4并实现HTTPS浏览

    随着网络技术的发展,人们对信息安全越来越重视,传统的http浏览互联网的方式由于未经加密,其安全性广为人们诟病,https协议作为加密的互联网解决方案解决了这一问题。下面我就简要说明下如何实现通过https发布web页面的。   实验目的: 模拟Centos6上安装httpd2.4,并实现https加密访问主页 实验器材: Centos6.8虚拟机…

    Linux干货 2017-04-20
  • httpd配置

    1、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式

    2、简述request报文请求方法和状态响应码

    3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

    Linux干货 2018-02-05

评论列表(1条)

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

    总结的还不哦,只是排版是不是太随意了?