Grub在linux中的作用

1、初识grub所扮演的角色

GNU GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。由此可见它功能的强大。现在去看看这个传说中的多操作系统启动程序到底长什么样子。

[[email protected] ~]# grub

Probing devices to guess BIOS drives. This may take a long time.

GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported.  For the first word, TAB

lists possible command completions.  Anywhere else TAB lists the possible

completions of a device/filename.]

grub>

grub>

通过登录grub界面,不难,看出当前的grub的版本是0.97。时至今日其实grub的版本已经有1.x的版本。但是有点其实需要说明的。Grub的0.x和1.x版本之间区别很大,大到可以认为1.0之后的版本,是重新编写的。

2、进一步剖析grub

在启动系统的时候,需要去加载grub,那么在加载grub的过程当中,首先stage1先实现加载MBR。而MBR存储在磁盘的第一个扇区,公共512个字节。其中MBR只占据446个字节。其他64被分区表占据。最后两个字节表示分区列表的结束符55AA。

stage1_5;mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;stage2:磁盘分区(/boot/grub/)等通常放置于一个基本磁盘分区上;

功能:

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

允许传递参数给内核

可隐藏此菜单

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

未编辑菜单进行认证

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

Grub程序正常情况下回存储在磁盘上。存储的形式如下:

(hd0,0)这里我以一块磁盘为例。(grub0.x版本下)

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

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

而在grub1.x之后,从1开始。

接下来去看看当登录linux系统的时候,所需经历的grub的过程如下:

当登录上面的界面的时候,不难发现,下面有一些提示信息。通过这些提示信息,可以很好对其进行操作。其中e:编辑模式,用于编辑菜单;c:命令模式,交互式接口。

当按C键的时候,直接进入grub交互接口。你可以在grub里面选择你的root启动内核,选择启动你想要的内核版本。如下:

通过输入如上这些信息,就能够登录linux系统。由于内核版本信息不一样。所以需要的一些信息也不同。简单的说主需要注入如下这些信息即可。

grub> root (hd#,#)

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

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot引导选择好的内核

但其实如果你在登录grub之后,如果不知如何操作还以通过help寻求帮助。接下来我列出一些个人认为比较常用的命令

grub> help

boot                                 cat FILE

clear                                 module FILE [ARG ...]

configfile FILE                        device DRIVE DEVICE

find FILENAME                       initrd FILE [ARG ...]

对于其他的一些使用方法,大家可以自行去了解一下。个人觉得还是比较简单

3、具体了解grub的详情。

接下来去了解grub的配置文件,这样能够更加直观的了解grub的配置文件。使得大家能够更好的了解使用grub。Grub.conf的配置文件有两处可以进入配置修改。

[[email protected] ~]# ll /boot/grub/grub.conf

-rw-------. 1 root root 1154 Sep  5  2015 /boot/grub/grub.conf

[[email protected] ~]# ll /etc/grub.conf

lrwxrwxrwx. 1 root root 22 Aug 14 13:11 /etc/grub.conf -> ../boot/grub/grub.conf

说是两处其实就一处,etc目录下的是boot下的grub.conf的连接文件。其实配置文件里面所配置的文字很少,很好理解。其配置文件如下:

[[email protected] ~]# vim /boot/grub/grub.conf

# grub.conf generated by anaconda

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/mapper/vg0-root

#          initrd /initrd-[generic-]version.img

其实grub文件内部已经提供模板,对于初学者来说,还是很有帮助的。

#boot=/dev/sda———提示说明boot在哪块硬盘上

default=0——设备默认启动菜单项,

timeout=5——菜单被选择的等待时间默认五秒;

splashimage=(hd0,0)/grub/splash.xpm.gz——:指明菜单背景图片文件路径;

Hiddenmenu——默认启动隐藏菜单,再启动系统的时候,如果不起启动,不会显示;

title CentOS 6 (2.6.32-504.el6.x86_64)——定义菜单项“标题”,可出现多次;

root (hd0,0)——grub查找的stage2及其kernel文字所存储的分区。

kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet——指定内核的版本信息及其,挂载根文件系统的模式,默认以只读形式启动。指定语言格式,还有才是合作根式创建分区。并且以静默形式输出文件系统。

initrd /initramfs-2.6.32-504.el6.x86_64.img——指定init的版本,注意init的版本必须和内核的版本保存一致。

此外在这个配置文件当中,可以加入密码的设置选项,这样能一定程度的保障grub的安全性,避免随意被破坏。格式如下:

Password——md5——采取MD5的方式进行加密。

同时还可以给选定的内核和init叫上密码保护。

但是这个时候有人就会好奇,既然能够加密,如果采用命名的方式加密。那么密码泄露的几率很大。这样设置密码的意义就是去了。因为设计者,有特意编写了加密程序。加密格式如下:

[[email protected] ~]# grub-md5-crypt

Password:

Retype password:

$1$Wc3lO$6GQUBBT2YJEzd7x06dcrs.

这样就生成一个加密过的密码,然后把它添加至grub.conf中去:格式如下

password --md5 $1$Wc3lO$6GQUBBT2YJEzd7x06dcrs.

把这条命令也在需要选择启动的内核后面加上即可。之后重启系统可以测试

重启启动系统的时候会提需要输入密码才能操作,这样才一定程度上保护系统。

4、grub的损坏修复方式。

对于grub的保护只管重要,一旦grub损坏。那么系统也就被损坏了,只能通过修复grub。让grub正常跑起来。接下来介绍几种修复grub的方式。首先破坏了grub。对于grub大家都知道,主要就是磁盘分区最开始的第一扇区的446个字节。大家在破坏的时候尽量别去破坏512个字节。不然连分区表一块损坏,不然这就启动不了。建议在测试的时候,尽量备份一MBR。接下演示破话及其修复过程。

[[email protected] ~]# dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

1+0 records in对grub进行备份

1+0 records out

512 bytes (512 B) copied, 0.000163604 s, 3.1 MB/s

[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=300 count=1

1+0 records in破坏MBR表。

1+0 records out

300 bytes (300 B) copied, 0.000267628 s, 1.1 MB/s

[[email protected] ~]# sync同步到磁盘,现在grub已经被损坏,如果重启系统,肯定启动不了,连grub都进入不了

接下里演示如果能够修复grub

[[email protected] ~]# grub-install --root-directory=/ /dev/sda ——指明安装grub的位置,及其所在磁盘路径

Installation finished. No error reported.

This is the contents of the device map //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‘.

# this device map was generated by anaconda

(hd0)     /dev/sda修复完成之后然后去同步磁盘

[[email protected] ~]# sync

除了可以通过上面的方式修改其实还可以切花到grub下,去修复grub程序。

执行上面三步即可。出去上面两种方法还可以通过系统光盘进行修复grub。并且这种方法是必须要掌握的一种,接下来演示如何修复grub。

先破话MBR表,还是使用上面的方法;

[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=300 count=1

1+0 records in破坏MBR表。

1+0 records out

300 bytes (300 B) copied, 0.000267628 s, 1.1 MB/s

接下来去重启系统,会发现系统MBR已经被破坏了

接下来演示如果通过光盘修复grub:

当选择光盘启动的时候,选择启用救援模式进行修复grub,然后回车,然后会进入下面这个界面。接下来的这不和下一步都选择默认安装即可。

然后会弹出让你选择是否启动网络服务,这一步我建议不选择启动网络服务。

借来下一步系统会提你对于救援一些所需要的注意的帮助信息需要做选择,选择继续continue即可。

接下来的几步都默认选项即可:在选择的时候,需要注意一点,光盘有提示如果能够切换到之前的系统上去。如下

接下来光盘需要让你选择模式,需要shell模式即可,然后就会进入文字就没模式下

接下来进入救援模式,然后切花到系统模式下进行修复grub

然后执行第一种修复方式就能修复grub。然后退出救援模式重启即可

对于grub的讲解到这里差不多,有些地方没有详尽说明,保持歉意!!!

时间: 2024-10-05 05:06:24

Grub在linux中的作用的相关文章

linux中mmu作用的简单总结(未完)

linux中mmu的作用: 1.虚实转换 2.控制存储器存取允许 --物理地址不连续,转化成连续的虚拟地址,编程更方便 --可以map memory到0地址用来调试中断服务程序 --系统的某些地址段时不允许被访问的,否则会产生不可预料的后果,为了避免这类错误,可以通过MMU匹配表的设置将这些地址段设为用户不可存取类型.启动程序中生成的匹配表中包含地址映射,存储页大小(1M,64K,或4K)以及是否允许存取等信息.

vmware tools 在linux中的作用

VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能 是VMware提供的增强虚拟显卡和硬盘性能 以及同步虚拟机与主机时钟的驱动程序. 只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能, 鼠标也可在虚拟机与主机之前自由移动,且虚拟机屏幕也可实现全屏化.

Linux 中 Fish Shell

每个 Linux 管理员都可能听到过 shell 这个词.你知道什么是 shell 吗? 你知道 shell 在 Linux 中的作用是什么吗? Linux 中有多少个 shell 可用? shell 是一个程序,它是提供用户和内核之间交互的接口. 内核是 Linux 操作系统的核心,它管理用户和操作系统之间的所有内容.Shell 可供所有用户在启动终端时使用.终端启动后,用户可以运行任何可用的命令.当 shell 完成命令的执行时,你将在终端窗口上获取输出. Bash(全称是 Bourne A

详解 linux中的grub

grub是什么: grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后, 内核会根据grub配置文件中的配置,找到根分区所使用的文件系统对应的驱动,通过根分区文件系统 对应的驱动,挂载根分区,从而达到启动操作系统的目的. 在了解grub以前,请先大体上了解一下centos5/6的启动过程,然后再理解grub就更容易了, 还记的我们以前总结过的centos5系统启动流程吗,如下图,此处我们重点讨论下图红框中的步骤. centos5/6中使用grub作为bootl

Linux中设定umask的作用

在linux中,常常都要提示设置:      umask 022 其作用如下: 功能说明:指定在建立文件时预设的权限掩码.语 法:umask [-S][权限掩码]补充说明:umask可用来设定[权限掩码].[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限.参 数:-S 以文字的方式来表示权限掩码. 文件:用八进制基数666,即无x位(可执行位)rw- rw- rw-.执行位需由用户自行加入 例一:设要生成的文件以rw- r-- r--这样的权限

linux中grub文件丢失或者错误解决方法

首先我们来看下以下别人博客的解决方案: 第一种情况: 是由于grub中的grub.conf文件损坏,开机后直接进入到了grub>命令行模式下.下面将图解此过程 这时可以使用help看一下grub可支持命令有那些,以便供修复时使用. 第二个使用的命令是find (hd0,0)/按tab如果能补全就表示系统在此分区上. 各个参数说明: 这时要注意,当你指定内核后,但未指定内核后面的参数(ro root=(此处未指定的话))将无法正常启动,报:请给root参数,一般情况下是系统是可以自动探测到,但这个

Linux中grub使用技巧

grub是干嘛的呢?所谓grub就是Linux系统的启动引导程序,类似于Windows中的BIOS. 我们在Linux时会看到有个倒数的秒数,哈哈,是不是很好奇哪来的这玩意?没错,就是在grub配置文件中存在的.我们都知道,在Linux中一切皆文件. 下面我教给大家如何进入grub配置文件的方法: ① cat /boot/grub/grub.conf ② cat /etc/grub.conf 两种方法都可以查看grub的配置文件,其中/etc/grub.conf是/boot/grub/grub.

Linux中whatis与makewhatis的作用

在好久没有和大家分享 Linux 命令方面的东东了,Linux 是一个以命令操作为主的系统,众多的命令与其作用,要想都记住也不太现实.因此,用 man info whatis 等工具来查看命令的作用就很重要了. Linux 中的 whatis 命令可以从它的字面意思可以看出来,就是“这是什么”,通过它可以知道某命令是用来干什么的,而且是用很简短的方式来描述. AD:2014WOT全球软件技术峰会北京站 课程视频发布 在好久没有和大家分享 Linux 命令方面的东东了,Linux 是一个以命令操作

Linux 中各个文件夹的作用

/  根目录 包含了几乎所的文件目录.相当于中央系统.进入的最简单方法是:cd /. /boot  引导程序,内核等存放的目录 这个目录,包括了在引导过程中所必需的文件.在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候,虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,但是没经过Linux的虚拟文件系统,这是比较底层的东西来实现的.然后内核自己创建好虚拟文件系统,并且从虚拟文件系统的其他子目录中(例如/sbin 和 /etc加载需要在开机启动的其他程序或者服务或者特定