GRUB的那些事

GRUB简介:

GRUB是GRand Unified Bootloader的简写,翻译一下就是很牛×的统一启动引导器,它是在lilo不能识别磁盘1024柱面的巨大缺陷的背景下诞生。到目前为止分为grub 0.x(grub legacy)和grub 1.x(grub 2)两个版本,这篇来讲讲grub legacy。

GRUB功能;

支持多系统并存,并提供菜单选项,还可以向内核传递参数,还可以提供保护机制。

GRUB原理:

已经说过grub分三个阶段,分别为:

stage 1:还记得前面讲的MBR吗,在那446K里面存的是bootloader?没错,由于只有446K,要想完成这种功能几乎不可能的事,因此就分为3段,而第一段就是就在MBR中,是为了将硬盘上的操作系统加载到内存中。

stage 1.5:我们都知道在操作系统下硬盘必须格式为某文件系统才能存放数据,而内核恰恰是存在在操作系统的硬盘下(不然何谈引导操作系统),那么想要读取里面的数据就必须有相应的文件系统驱动才行啊,而这个1.5阶段就是在MBR后面的扇区存放有基本的文件系统驱动(因此不支持那些比如LVM之类的,因为只是基本的啊),因此所谓的1.5阶段是为了识别2阶段。

stage 2:有了1.5阶段的驱动,就可以将2阶段放在磁盘分区上的内核和dandisk文件加载到内存了。这个分区就是众所周知的/boot/,在这下面有grub和vmlinuz-版本-发型号和initramfs-版本-发型号(再提一下两个版本号和发型号必须一样,在5中是initrd-版本-发型号)。

通过grub命令行启动系统:

前面说过grub能提供菜单,但是这菜单不仅仅只是选择回车然后启动操作系统的作用,还能编辑这菜单(按e),而且还能通过命令行引导(按e后选中内核按c进入)。

看到下面的提示了吗,用上下箭头选择菜单(但是这里只有一个),按回车键启动选中的操作系统,按e编辑选中的菜单,按a修改细节,按c进入命令行模式。这里我们按c进去。

就是这个样子,可以输入help来看看帮助,也可以“help 关键字”来看看指定的帮助信息,还可以find想要寻找的文件,好了现在首先让grub知道它的根在哪(人也应该如此,不能忘本啊),这里使用root (hd#,#)这样的方式,其中hd是代表磁盘,这个与现在系统的什么sd不一样,而且第一个#数字表示的是第几块磁盘,第二个#数字表示的是在第一个分区上。然后是kernel grub根下的vmlinuz-版本-发型号,指定内核的位置,接着是initrd grub根下的initramfs-版本-发型号,指定dandisk的文件的位置。这里需要注意:这两个数字都是从0开始的,也就是说第一个0表示第一块硬盘,第二0表示第一块分区,以此类推。而且这个根不是根文件系统的“/”,而是grub的根,如果你的/boot单独分区了,那么请记下你的分区号(建议放在第一个分区上),那个分区就是grub的根,如果你的/boot没有单独分区(其实这是不理智的),那么文件系统的根下的boot才是grub的根。我这里是单独分区的。

我的grub根是/boot这个单独分区,这个分区在我的虚拟机的第一块硬盘下的第一个分区中,因此是(hd0,0),而vmlinuz和initramfs在grub的根/boot下,因此只需要从/开始写(再次强调这个/不是文件系统的/,除非你的/boot没有单独分区,那么就是/boot/开始)。同理initrd也是这个意思,还有kernel那行的文件系统必须以只读的方式挂着,而且还要指定根文件系统在哪个位置,不然grub怎么知道呢,当然这行可以指定很多的内核参数,比如quit静默模式,init=/bin/bash指定第一个进程为bash而不是/sbin/init等等。然后只需要回车输入boot就可以启动操作系统了。

GRUB配置文件配置。

GRUB的配置文件在/boot/grub/grub.conf或者/etc/grub.conf中,后面的是前面的一个软链接。

信息说明:

#boot:指明在哪个硬盘。(可以在title下特地指定,这个位置指定的都是全局的)

default=0:表示默认进入第一个操作系统

timeout=5:表示5秒不选的话就直接进入

splashimge:指定开机图片所在的位置

hiddenmenu:隐藏的菜单(这里没有)

title 自定义菜单名称

root:

kernel:

initrd:

这三个前面已经说了。

由于grub可以支持多个系统菜单,因此如果装多个系统只需要在下面接着加上title的内容就行

还可以加上密码保护,在title上指定的话就是全局的,在title里面指定的话就是局限在这个菜单里的,方法是:password --md5 密码(可以用grub-md5-crypt生成,然后复制进去)。

这里我在全局设置里面加上了密码,并在第二个里面加上了局部密码,下面来看一下效果。

看下面的提示信息,说按p键解锁进入菜单

按下p后下面出现了密码,下面看看输入密码后的

熟悉的一幕又回来了,但这是全局的菜单密码,下面选中第二个回车看看。

需要密码,这就是在局部里面设置密码的作用。

GRUB的安装:

当你的GRUB不知所以的挂了的时候怎么办,重装系统?呵呵。。。其实grub有命令可以安装的。下面看看grub安装的两种方法。

方法一:使用grub-install命令。

用法:grub-install --root-directory=grub根位置 /dev/sd[a-z](指定在哪个磁盘上),由于grub-install会去找/boot目录,所以我们先进行破坏再重装。

dd if=/dev/zero of=/dev/sda count=1 bs=200(切记不要大于446K)

方法二:直接进入grub

加一块新硬盘,提供单独运行的bash系统。

首先分区,简单三个基本分区就可以了,/boot / swap,然后格式化为文件系统。由于grub会找/boot这个目录,所有可以建一个/mnt/boot的目录来挂载/dev/sdb1这个当boot的分区,然后为了不覆盖/dev/sdb1,可以建一个/mnt/sys来挂载/dev/sdb3这个当/的分区(这些基本步骤就不演示了)。

现在在/dev/sdb1这个将要做boot的分区上安装grub

然后在/dev/sdb3这个将要做文件系统根的分区创建FHS上的基本目录

然后复制/bin/bash到/mnt/sys/bin中,并将其需要的库文件也复制到相应的库文件目录中,可以用ldd /bin/bash查看需要的库文件。

然后chroot到/mnt/sys中

因为只是一个bash所以只能使用内嵌命令。

再编辑grub.conf,我也是通过复制,这样方便些,当然你也可以自己建,上面有参数,然后将系统中的内核和randisk(在/boot)复制到/mnt/boot中

[[email protected] boot]# ls
grub  initramfs.img  vmlinuz
[[email protected] boot]# ls grub/grub.conf 
grub/grub.conf

然后编辑grub.conf

现在建一个虚拟机,使用这块硬盘。

就是这一步。然后选择自己的这块硬盘。然后开机就可以进入了。

上面的都是在能进入系统的情况下,如果grub破坏了但是又关机了呢?那就需要进入紧急救援模式了。

下面重启看看

这时候就需要挂载系统光盘开启紧急救援模式了

选择Rescue installed system或者直接按ESC键进入命令行模式输入Linux rescue后回车就可以进入紧急救援模式了。

会出来这个界面,然后一直选择就行了直到

信息说我的系统已经被挂载到了/mnt/sysimage上,点OK就进去了

    ok,现在可以在shell中安装grub了,chroot进/mnt/sysimage,然后安装grub就可以了

已经安装成功,现在可以重启系统了。

大功告成!!

时间: 2024-08-28 11:25:43

GRUB的那些事的相关文章

Ubuntu系统安装后的10件真正必做之事

更新: 30 JUL 2016 晚上更新了Ubuntu 16.04,虽然重要文件都经过了备份,但是系统设置还是需要重新来过.由于经常重装系统,已经体会到了装系统中最辛苦的要数重新设置了(这也是后来不愿意再重装Win10只是按着MS一步步更新的原因).为了方便以后的更新换代,在此一边重新设置,一边总结记录,以作参考.今后如有再次升级,必定更新此文. 好了,现在你已经完整地完成了Ubuntu(16.04)的安装,但是迎接你的是一个中看不中用的壳子:-P 下面做的事才是你真正开始在这个Linux平台上

【转】CPU与内存的那些事

下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己复习,二来与大家分享.] 本文以一个现代的.实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据

安装Linux Mint 17后要做的20件事

安装Linux Mint 17后要做的20件事 Linux Mint 17 Qiana Cinnamon Linux Mint 17已经发布,定名为Qiana.Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁.它携带了风格迥异的桌面环境,如Mate以及Cinnamon,并基于不同的发行版,如Ubuntu或Debian. 在本文中,我们使用的是Linux Mint 17的cinnamon版本.要获取更多关于Cinnamon版本的信息(包括下载链接),可以访问 - http:/

grub 启动错误 "file not found"

刚安装ubuntu 14.4 竟然出现这么尴尬的事,ubuntu 行不行? 幸好还是能从u盘启动后,转到硬盘. 然后在网上找到了解决方法. http://askubuntu.com/questions/88384/how-can-i-repair-grub-how-to-get-ubuntu-back-after-installing-windows Boot from the live CD or live USB, in "Try Ubuntu" mode. Determine t

linux grub修复

在使用Linux的过程中,难免会出现开机提示grub >而无法启动,可能是系统中/boot/grub文件丢失等原因造成的,当出现此问题的时候只要系统分区没有格式化一般是可以修复的,下面就以虚拟机为例,删除/boot分区,在linux救援模式下重新修复: 实验使用的系统为Centos 6.5 x86_64 1.删除boot分区:会导致gurb和linu内核丢失,然后重启: 此时系统重启后已经完全无法再次启动,如下: 2.使用光盘镜像引导系统,并选择救援模式启动: 提示将系统挂载至/mnt/sysi

转:CPU与内存的那些事

下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下.一来自己复习,二来与大家分享.] 本文以一个现代的.实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度——延迟和数据

CPU与内存的那些事

本文以一个现代的.实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的运行速度--延迟和数据吞吐量.通过粗略的估算PC各个组件的相对运行速度,希望能给大家留下一个比较直观的印象.本文中的数据来自实际应用,而非理论最大值.时间的单位是纳秒(ns,十亿分之一秒),毫秒(ms,千分之一秒),和秒(s).吞吐量的单位是兆字节(MB)和千兆字节(GB).让我们先从CPU和内存开始,下图是北桥部分: 第一个令人惊叹的事实是:CPU快得离谱.在Core 2 3

CentOS 6.5中linux grub修复

在使用Linux的过程中,难免会出现开机提示grub >而无法启动,可能是系统中/boot/grub文件丢失等原因造成的,当出现此问题的时候只要系统分区没有格式化一般是可以修复的,下面就以虚拟 机为例,删除/boot分区,在linux救援模式下重新修复: 实验使用的系统为Centos 6.5 x86_64 1.删除boot分区:会导致gurb和linu内核丢失,然后重启: 此时系统重启后已经完全无法再次启动,如下: 2.使用光盘镜像引导系统,并选择救援模式启动: 提示将系统挂载至/mnt/sys

自定义grub主题

目录 1 概述 2 下载主题 3 解压 4 安装 5 效果 6 改进 6.1 progress_bar 6.2 boot_menu 6.3 image 6.4 /etc/default/grub 6.5 /boot/grub/grub.cfg 6.6 背景 7 最终效果 8 配置文件 1 概述 自定义grub引导菜单的主题,笔者的linux是deepin,感觉默认的grub主题不太好看,嗯,没办法,就是想改了. 这篇文章主要是修改/boot/grub/grub.cfg以及/boot/grub/t