GRUB Legacy&Trouble Shooting

GRUB (Grand Unified Bootloader)

       位于系统引导盘的MBR中的Boot Loader。

       GRUB是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

       Grub分为2个版本:

              grub 0版本:也叫grub legacy。CentOS6、CentOS5采用此版本

              grub 1版本:也叫grub2。CentOS7采用此版本

一、grub legacy:

       stage1:mbr

       stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统。

              功能:为grub提供文件系统驱动。从而能访问2阶段内核所在的分区。

       stage2:磁盘分区(/boot/grub)

       stage2及内核通常放置于一个基本磁盘分区。

       stage2的功用:

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

                     e:编辑模式,用于编辑菜单

                     c:命令模式。交互式接口。

              (2)加载用户选择的内核或操作系统

                     运行传递参数给内核

                     可隐藏菜单          

              (3)为菜单提供了保护机制

                     为编辑菜单进行认证

                     为启用内核或操作系统进行认证

二、配置文件:/boot/grub/grub.conf,有一链接文件/etc/grub.conf

2.1、grub配置文件:      

/boot/grub/grub.conf 配置项:              
 default=#:设定默认启动的菜单项,菜单项编号从0开始             
 timeout=#:指定菜单项等待选项选择的时长              
 splashimage=(hd#,#)/path/to/xpm_pic_file:指明菜单背景图片文件路径。              
 hiddenmenu:隐藏菜单              
 passwd [--md5] String:菜单编辑认证              
 title TITLE:定义菜单项“标题”,可出现多次                     
 root (hd#,#):grub查找stage2及kernel文件所在的设备分区。为grub的根。                     
 kernel /path/to/vmlinuz ro root=/dev/mapper/some_path:启动的内核                     
 initrd /path/to/initramfs_file:内核匹配的ramfs文件。                     
 passwd [--md5] String:启动选定的内核或操作系统时进行认证。

2.2、如何生成加密密码串:

1)openssl生成加密密码串

~]#openssl passwd -1 -salt "123456"

       -1 指定加密方式为md5

       -salt 在生成加密密码时,注入“盐质”

blob.png

2)grub-md5-crypt命令:生成要保护密钥的密码串

 blob.png

三、grub中如何识别设备 

       (1)boot目录单独分区,并挂载于/目录。

        这个时候,由于内核还未加载,所以不存在真正意义上的根,那么存放于/boot上的内核文件以及ramdisk文件和grub配置文件如何能够被识别呢?

        stage1会将/boot选举为boot的根,在grub阶段查找/boot上的文件时, 是以boot为跟查找。比如,查找磁盘上的/boot/vmlinuz在grub阶段表现为查找/vmlinuz;查找/boot/grub/grub.conf表现为查找/grub/grub.conf。          

       (2)boot目录没有单独分区,而是位于/所在的分区。

        这种情况下,grub阶段查找boot下的vmlinuz文件表现为查找/boot/vmlinuz;查找boot下grub目录下的grub.conf文件表现为查找/boot/grub/grub.conf文件。

       (3)什么样的情形下boot单独分区,而不是位于/所在的分区?

 grub访问的分区只能是基本磁盘分区,LVM&RAID等都不支持。当要使用LVM按需扩展/时,boot要单独分区。

       (4)如何在grub中指定boot的根

       grub中的root指令用于指定系统启动处于grub阶段时,文件系统的跟。若boot单独分区,则以boot分区为根;若boot未单独分区,则以文件的绝对路径查找文件。

root (hd#,#)

       hd#:磁盘编号,用数字表示;从0开始编号

       #:分区编号,用数字表示;从0开始编号

四、grub的命令行接口

4.1、在命令行中可使用的命令  

 help:获取帮助立标 
 help Command:获取对应命令的帮助信息 
 find (hd#,#) /path/to/some_file 
 root (hd#,#) :设置在grub阶段的/ 
 kernel /path/to/kernel_file:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数 如:init=/path/to/init,selinux=0 
 initrd /path/to/initframfs_file:设定为选定的内核提供额外文件的ramdisk,其版本号必需与内核的版本号完全一致。 
 boot:引导启动选定的内核

4.1、如何手动在grub命令行接口启动系统:      

grub>root (hd#,#)
grub>kernel /vmlinuz-Version-Release ro root=/dev/Device
grub>initrd /initramfs-Version-Release.imggrub>boot

五、GRUB Trouble Shooting:

5.1 如何进入单用户模式

       (1)开机,进入系统,在grub菜单选择要使用的内核,摁“e”键,进入grub菜单,选定要编辑的title,而后使用e进行编辑      

blob.png

       (2)选定kernel项,摁“e”进行编辑,在选定的kernel后附加:1、s、S或single都可进入单用户模式,输入完成,回车

blob.png

blob.png

       (3)在kernel所在行,摁"b"键引导系统。

5.2 如何进入救援模式

选择通过光盘引导

blob.png

选择进入救援模式

blob.png

选择语言

blob.png

选择键盘类型

blob.png

根据需要选择是否开启网络功能

blob.png

选择继续

blob.png

选择shell,进入命令行模式

blob.png

之后,可在命令行进行修复操作.

5.3 安装grub

grub-install命令:完整安装stage1、stage1_5、stage2

       grub-install –root-directory=Root /dev/Disk

              –root-directory=/  #指定/

              /dev/Disk               #指定/所在的硬盘,注:不是/所在的硬盘分区

5.4 grub被破坏或配置文件丢失。

如何为本机修复GRUB:

       破坏stage,无法看见grub启动菜单,若退出,只能进入救援模式修复。若未退出,使用下面第一种、第二种方式进行修复。

       模拟破坏:破坏之前先备份,也可以对虚拟机做备份。

dd if=/dev/sda of=/src/mbr.bak bs=1 count=512dd if=/dev/zero of=/dev/sda bs=1 count=200
sync

       修复

       第一种方式           

grub-install --root-directory=Root /dev/Disksync

第二种方式      

grub#进入grub提示符 
grub >root (hd#,#)    #指定/分区 
grub >setup (hd#)     #指定在那块磁盘上安装stage1 sync

注意:第二种方式仅限于/目录下必须事先存在boot目录,且stage1、stage1_5、stage2等文件必须存在,否则安装失败

       第三种方式:破坏之后重启,进入救援模式修复

       如何进入救援模式:

              (1)载入系统光盘

              (2)敲esc键,进入命令行模式,键入“linux rescue”命令;或者通过启动菜单中的rescue选项进入救援模式。

              (3)chroot /mnt/sysimage   #切换至原有系统的/目录下

              (4)grub-install –root-directory=Root /dev/Disk

              (5)exit

              (6)reboot

1) 破坏stage1

              在命令行模式进行修复

              模拟破坏stage1,即MBR的前446字节

blob.png

              查看,发现前446字节已被破坏

blob.png

~]#grub-install  --root-directory=/ /dev/sda

再次查看MBR

blob.png

       重启系统可以正常进入系统

2) 破坏stage1.5

~]#dd if=/dev/zero of=/dev/sda bs=1 count=1024 seek=512

       seek=n:跳过of指定的文件的前n个字节

 blob.png

不退出系统,使用grub命令进行修复

blob.png

 blob.png

之后,重启系统,启动正常

3) 破坏stage2

stage2是加载内核及伪根文件系统initramfs的,要破坏stage2,删掉/boot下的vmlinuz文件和initramfs文件即可。

blob.png

进入救援模式,恢复丢失的2个文件

       a、系统上挂载有安装光盘,可以通过拷贝安装光盘上isolinux目录下的vmlinuz文件到/boot目录下,并使用mkinitrd命令生成initramfs文件,之后修改grub/grub.conf文件,修改kernel、initrd对应的文件。  

chroot /mnt/sysimage
cp  /mnt/iso/isolinux/vmlinuz  /boot/
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

 blob.png

blob.png

       修改grub/grub.conf文件

blob.png

exit退出救援模式,选择reboot Reboot选项,重启系统

blob.png

b、若系统不能挂载安装光盘,则可以选择通过网络来拷贝vmlinuz文件。在进入救援模式时,选择启用网络功能。之后使用scp 命令来拷贝远程文件。拷贝vmlinuz文件之后,使用mkinitrd命令生成initramfs文件,修改grub.conf文件,重启系统即可。

注:在这一过程中,损坏的系统必须与拷贝的目标主机在同一个局域网中。且目标主机应允许远程拷贝文件。

选择启用网络功能

blob.png

选中要使用的网卡,摁"tab"键切换至ok选项,回车

blob.png

若局域网中有dhcp服务器,可选择通过dhcp获取ip地址。没有dhcp服务器可选择手动添加ip地址。这里选择dhcp获取,ok确认

blob.png

       之后操作不再赘述。

4)破坏grub配置文件

要恢复grub.conf配置文件较简单,若未退出系统,手动编辑一份配置文件即可;若退出系统重启,进入救援模式编译grub.conf配置文件即可。修复过程不再赘述。

blob.png

5)破坏/etc/fstab

删除/etc/fstab文件。重启不能正常启动。

blob.png

启动报错

blob.png

不能进入系统

blob.png

重启进入救援模式

进入救援模式,能看到没有发现linux分区的错误,摁"ok"继续进入救援模式修复。

blob.png

进入到命令行之后,使用fdisk -l查看磁盘分区情况,可以查看到,/dev/sda1为boot分区。但是无法确认/分区。

blob.png

怎么确认/分区是那块磁盘呢,通过fdisk可以看到,除了boot分区之外,共有4个分区。为每个分区建立一个挂载点,分别挂载各分区,之后,进入挂载目录,查看目录结构,/分区的目录结构还是很好区分的。这里,挂载/dev/sda2报错,查看,发现sda2是LVM。

blob.png

如果/是普通文件系统,可以直接挂载;若果是LVM,则需先激活,才能挂载。、

使用vgchange -ay 激活LVM

blob.png

之后,挂载分区,进入分区查看。

其实通过lvscan直接就看出/dev/vg0/root是根分区了。如果/是普通分区的话,需要一一查看。

blob.png

使用blkid可以查看到分区的文件系统。

blob.png

 blob.png

查找到/之后,切换/

chroot /mnt/sda2(/dev/vg0/root的挂载点)

若在其他目录,有fstab文件的备份,可以拷贝该备份;若没有备份,则编辑/etc/fstab文件。注:若/usr单独分区,则/usr也应该挂载

blob.png

保存,退出。重启系统。启动正常。

系统是能够正常启动,但是,若fstab文件没有备份,又不知道具体的每个分区挂载情况,有可能导致某些数据或功能或业务不能正常使用。所以,关键数据的备份是非常重要的,当系统出现错误时,我们能够通过备份快速恢复系统,并能保障业务的正常运行。

6) 破坏/boot

删除/boot下的所有文件,并umount /boot

blob.png

进入救援模式修复

若/etc/fstab文件没被破坏,则直接切换根至/mnt/sysimage;若/etc/fstab文件被破坏,则先修复fstab文件,之后重启系统,再次进入救援模式,修复/boot。

chroot /mnt/sysimange

挂载安装光盘

安装光盘中的kernel-Version包。安装时使用–force选项。

blob.png

kernel包安装完成之后,会生成vmlinuz文件及initramfs文件,但是grub目录及目录下的文件并没有生成,使用grub-install命令,生成grub目录及文件。

blob.png

grub-install执行完成之后,生成grub目录及相关文件,但是grub.conf文件并没有生成,需要我们手动配置。重写grub.conf配置文件不再是个难题啦。

blob.png

配置完成之后,重启系统,在grub菜单栏可以查看到我们填写的配置,回车选择,等待系统修复。

blob.png

blob.png

启动正常

7) /sbin/init文件被删除

       删除/sbin/init文件

blob.png

重启进入系统,无法正常工作。

blob.png

进入救援模式,若有文件备份,直接拷贝使用,也可以重其他机器上拷贝使用;若没有备份,则需安装upstart的rpm包。

blob.png

退出,重启,系统启动正常。

blob.png

总结:系统重要文件应该备份,在出错时能及时得到恢复。在对配置文件做修改时,应先备份再修改,当配置出现错误时能得到还原。熟悉系统启动流程对于系统排故非常重要。熟练掌握在救援模式下修复系统非常重要。

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/46042

(0)
上一篇 2016-09-13 10:19
下一篇 2016-09-13 11:17

相关推荐

  • 20本最好的Linux免费书籍

    前些天Neo推荐了一个网站有《超过100本的linux免费书籍》,这里,我也向大家推荐20本最好的Linux免费书籍,当然,也是英文版的。 1. Ubuntu Pocket Guide and Reference 一本介绍关于Ubuntu 8.04和8.10的使用书。 Website www.ubuntupocketguide.com Author Keir…

    Linux干货 2015-04-01
  • N22-第一周博客:计算机及Linux系统的入门学习了解

                                  …

    Linux干货 2016-08-15
  • Linux文件系统

    文件是什么?存储空间内存储的有边界的一段流式数据,对数据可以做到按名存取。众多文件是如何有效的组织起来?1.  平面化把众多文件放在一起。当想查找某个文件时,需要遍历所有文件,当文件数目足够多的时候,查找一个文件将会非常慢,效率极低。2.  层级结构化根据后续查找文件的筛选条件进行分类,逐层放置,通常要查找一个文件,只需要从最高层级开始,…

    2017-09-05
  • 第四周小结

    这周我们主要学习了写脚本的简单语法,写了一些简单的脚本,下面就由我来简单介绍一下: 第一步使用文本编辑来创建脚本: 创建好后在里面写想要运行的脚本即可,然后按Esc—wq退出保存即可。也可以按q不保存退出;q!不保存强制退出;wq!保存强制退出。 第二步运行脚本,给予执行权限,在命令行上指定脚本的相对路径和绝对路径 对了,当在脚本里输入内容时,要Ese&#8…

    2017-08-06
  • 互联网的实现

    互联网的实现 全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡就收到了,两者实际上根本就不知道对方的物理位置,这难道不是一件很神奇的事情吗? 互联网的**核心**是一些列协议,总称为“互联网协议”(Internet Protocol Suite)。它们对电脑如何连接和组网做出了详细的规定。 互联网协议入门 概述 五层模型…

    Linux干货 2017-05-05
  • LVM(逻辑卷)(logical volume manager),快照卷

    逻辑卷的创建,扩展,缩减,迁移,删除。快照卷的创建

    Linux干货 2017-12-11