GRUB2启动引导器完全教程.doc
《GRUB2启动引导器完全教程.doc》由会员分享,可在线阅读,更多相关《GRUB2启动引导器完全教程.doc(41页珍藏版)》请在冰豆网上搜索。
![GRUB2启动引导器完全教程.doc](https://file1.bdocx.com/fileroot1/2022-10/19/22bee937-209c-4a63-93f0-f264d0fcefea/22bee937-209c-4a63-93f0-f264d0fcefea1.gif)
GRUB2启动引导器–完全教程
本教程仅讨论GRUB版本2,流行的启动引导器的下一代。
如果您在寻找常规GRUB的教程,请查看这篇文章。
欢迎来到GRUB2启动引导器教程!
你肯定已经读过我的关于GRUBlegacy版本的指南。
在过去的两年半里面,它独自积累了五十万次阅读,在全世界的计算机使用者中相当流行和实用。
我希望利用我的GRUB2重新创造同样的成功。
目标为用户使用GRUB作为他们的启动引导器实现启动任何其钟情的类UNIX操作系统或者多重启动他们的计算机提供一个简单、实际、循序渐进、行之有效的教程,从而允许他们快速、简单、毫不不费力的控制他们的系统启动流程。
在这个教程里,您将学到如何使用GRUB2,添加和删除菜单,定制标题和启动选项,双重启动和三重启动操作系统,结合GRUB和GRUB2,我们甚至看一下Windows如何加入这个模式。
之后,我们将学习如何从错误中恢复。
目录
1.目录
2.警告
3.GRUB2路标
4.GRUB2介绍
·新布局
·Grub.cfg文件实例
·/etc/grub.d/目录示例
·/etc/default/grub示例
5.基本用法
·GRUB2如何工作?
·添加新的GRUB脚本
·更新GRUB
·通过改变脚本名称中的数字改变脚本启动顺序
·替换默认条目
·操作系统探测器
·重装GRUB
·简短的总结
6.现实多重启动情况
·双重启动:
使用GRUB2启动两个操作系统
·双重启动:
两个操作系统使用GRUBlegacy和GRUB2的结合。
·双启动Windows7和Ubuntu
·把GRUBlegacy升级到GRUB2
7.附加的测试用例
·三重启动
8.定制GRUB菜单
·编辑/etc/default/grub
·从菜单中去掉内存测试(memtest)
·如果您不想让GRUB菜单包含memtest项,可以将20_memtest86+这个脚本设置为不可执行,然后更新GRUB。
·更改菜单行标题
·更改主题(启动背景图片)
9.GRUB2恢复(recovery)
·从启动失败中恢复
10.观察小问题
·内核损坏
·内核崩溃转储机制
·命令名称
11.GRUBlegacy对比GRUB2
·GRUBlegacy
·GRUB2
·结论
12.更多阅读(文档和链接)
·官方:
·其他有用的GRUB2资源
13.结论
14.更新
警告
警告!
GRUB2还是测试软件。
尽管它已经获得Ubuntu的青睐,本身没有质量问题。
您可以没有问题的使用,虽然可能存在损害,但那离您是非常遥远的,即使真的发生,损害也只是轻微的一点点。
您需要认识到这些。
另外,任何处理危险的任务比如执行系统本身的危险命令,磁盘分区,启动序列,镜像,等等的时候,您应该时刻准备着最坏的情况。
这意味着:
·对您的数据来考虑您必须有一个可靠的备份过程。
·您必须拥有从灾难中迅速恢复的知识和工具。
·这包括可以恢复系统的前一个镜像,修复损毁。
·配置,恢复启动引导器,还有更多。
·您必须对您所做的有信心。
现在您知道了这些,让我们高兴并且安全的开始。
那么一定要铭记,GRUB2还是测试版。
尽管同样我们可以想到GoogleMail,它测试了六年或者更多,您必须小心练习。
更重要的是,这篇指南的内容和内容相关可能会随着GRUB2被做成产品而改变,所以请持续关注更新。
GRUB2路标
这是您使用GRUB2之前需要考虑的。
什么时候GRUB2会成为类UNIX操作系统的实际启动引导器?
目前,GRUBlegacy版本工作的很好并且还将持续很多年。
像RedHat和Novell这样的公司为了服务器发行版会提供长期的技术支持,GRUBlegacy还是作为重要参与者存在五到十年。
在桌面领域,采用比率会快一些,但是不要期待短期内会有奇迹发生。
尽管如此,这并不影响探索。
请认识到您很可能会遇到兼容性问题而抛锚,特别是很多保守的发行版对新技术的支持并不是很及时。
到目前为止,GRUB2仅仅被Ubuntu家族使用,Ubuntu家族占了桌面市场的三分之一到一半。
这使得这篇指南变得有意义,因为两个或者三个Linux家庭使用者中就会有一个希望了解GRUB2信息并学习它的使用技术。
让我们现在到真正的技术中去。
GRUB2介绍
在开始之前,我强烈推荐您阅读我的关于GRUB常规版本的指南,这会帮助您更好的理解这篇文章。
GRUB2引入了很多新的更改。
GRUB2有更好的移植性和模块性,支持非ASCII码字符,动态加载模块,真实内存管理,还有更多。
所有这些几乎都和大多数使用者无关。
您需要知道的仅仅是配置文件的改变和GRUB2的操作方法。
新布局
GRUBlegacy版本将文件放置在/boot/grub/目录下,包括在启动过程中读取并显示内容给用户的menu.lst文件。
GRUB2将文件主要放在三个地方:
/boot/grub/grub.cfg --这是替代menu.lst的主要配置文件。
不像menu.lst那样,grub.cfg不能手动更改!
我强烈建议不要尝试干预这个文件,无论是使用chattr命令或者其他。
由他去就行。
/etc/grub.d/ --这个新文件夹包含GRUB脚本。
这些文件是创建grub.cfg文件的基础。
当相关的GRUB命令执行以后,这些脚本以某个特定的顺序被读取并且创建grub.cfg文件。
/etc/default/grub --这个文件包含GRUB脚本读取并且写入grub.cfg文件的GRUB菜单。
它是GRUB的定制部分,类似于老的menu.lst文件,实际启动项目除外。
这意味着,如果您想改变GRUB菜单,您将必须编辑已经存在的脚本或者创建新的脚本,然后更新菜单。
相比老的GRUB,这更类似于LILO,LILO允许在运行中编辑菜单。
Grub.cfg文件实例
文件位于:
/boot/grub/:
Grub.cfg文件看起来是这样的:
它实际上并不有趣,因为它仅仅是个脚本。
多数人可能不想读它的内容或者不能完全理解它们。
但是这个文件在任何您更新了GRUB菜单的时候还是值得浏览一下,以确保正确的条目像您预期的一样被加了进来。
但是仅仅在您熟悉脚本的情况下!
/etc/grub.d/目录示例
这是刚刚安装的系统中/etc/grub.d/文件夹下的所有文件,以Kubuntu为例:
我们来看一下这些脚本:
00_header是从/etc/default/grub中加载GRUB设置的脚本,包括超时、默认启动项和其他。
我们会稍侯了解更多。
05_debian_theme定义背景、颜色和主题。
这个脚本的名字很明确将会改掉当别的版本采用GRUB的时候。
10_linux为已经安装的发行版加载菜单项。
20_memtest86+加载memtest(内存测试)功能
30_os-prober这个脚本将会扫描硬盘上的其他操作系统并且添加到启动菜单。
40_custom是一个您可以用来创建新加的条目到菜单的模板。
您是不是已经认识到了脚本名字中数字的使用?
不错,这有点像不同的runlevel的Start/Kill脚本的顺序。
数字定义了优先级。
这意味着10_linux会比20_memtest86+先执行所以在启动菜单项中的位置更加靠前一点。
这些脚本也不太有趣。
像grub.cfg文件一样,他们也不希望被编辑,除了40_custom。
您必操作这些脚本的时候须非常小心。
我们稍侯看看它们的样子并且学习一下如何使用它们。
/etc/default/grub示例
文件位于:
/etc/default/目录下
这个目录包含很多其他文件所以不要以为仅仅被GRUB使用。
grub文件是一个被00_header脚本解析的文本文件。
您可以在这里更改如果您想改动的话。
我们稍侯在定制部分细谈。
现在我们知道了文件是什么样的,让我们看看怎么使用。
基本用法
是将我们的理论知识转化为实际行动的时候了。
GRUB2如何工作?
GRUB2这样工作:
/etc/default/grub包含定制化;/etc/grub.d/脚本包含GRUB菜单信息和操作系统启动脚本。
当运行update-grub命令时,它读取grub文件的内容、执行grub.d中的脚本来创建grub.cfg文件。
就是这样。
想要更改grub.cfg文件,您需要编辑grub文件或者grub.d下面的脚本。
脚本是被执行的,这意味这他们拥有执行权限,如果您取消了执行权限,他们将不会执行。
这意味着您可以在grub.d下放多个文件,您想放多少就放多少,像update-grub能读的shell脚本那样长。
如果您想使用他们,就激活可执行权限(chmod+x),反之亦然,去掉可执行权限(chmod–x)。
让我们来看一下这些脚本:
拿00_header和05_debian_theme作为示例:
40_custom更有意义,但是它并没有告诉我们怎么定制脚本。
不要担心,我们会稍侯学习所有东西。
添加新的GRUB脚本
添加一项新的启动选项,您必须遵循一些基本语法:
创建一个新文件并且以数字和下划线作为文件名的前一部分。
如果您想把启动项放在其他选项的上边,使用一个稍小的数字,如果您想放在其他的后边,使用一个稍大的数字。
例如:
11_something将被放在操作系统默认条目的后边,反之08_something将被放置在10_linux条目的上方。
下一步是写实际内容,下面是例子:
#!
/bin/sh-e
echo"Somestring"
cat<menuentry"Something"{
setroot=(hdX,Y)
--bootparameters--
}
EOF
让我们仔细看一下这个文件:
#!
/bin/sh–e第一行是shell脚本的声明,必须放在第一行。
echo"Somestring"输出字符串“Somestring”,这样在执行update-grub的时候您将看到这个字符串,如果您不想看到命令的输出,可以重定向到标准错误或者/dev/null:
echo"Somestring">&2
例如:
echo"AddingopenSUSE11.2"
Cat<menuentry“Something”是菜单的名字。
例如:
Linux
setroot=(hdX,Y)–设置根设备。
危险!
GRUB2使用分区标记从一开始而不是像GRUBlegacy版本那样从0开始!
这是非常非常重要的并且是必须记住的!
换句话说,标记设备是还是从0开始,但是分区从一开始。
比如,sda1在GRUB2中表示为(hd0,1),但是之前的版本表示为(hd0,0)!
--bootparameters-- 每个操作系统都不同,在Linux中,您使用可能类似于:
linux/boot/vmlinuz
initrd/boot/initrd.img
但是在Windows中,您可能使用:
Chainloader(hdX,Y)+1
所以,一个完整的脚本应该是这样子:
#!
/bin/sh-e
echo"AddingmycustomLinuxtoGRUB2"
cat<menuentry"MycustomLinux"{
setroot=(hd0,5)
linux/boot/vmlinuz
initrd/bo