因为从2016年2月2日生效的最近的变化在LFCS认证考试目标,我们添加所需主题的LFCS系列发表在这里。 为了准备这场考试,我们强烈鼓励遵循联邦经济竞争法系列为好。
LFCS:配置和排除Grub引导加载程序 - 第13部分
在本文中,我们将向您介绍GRUB并解释为什么需要引导加载程序,以及如何为系统添加多功能性。
在Linux启动过程从按下计算机电源按钮,直到你得到一个全功能的系统时遵循这种高层次的序列:
- 1.称为POST(加电自检 )进程执行您的计算机的硬件组件进行全面检查。
- 2.当POST完成后,过来传递控制权交给引导加载器,从而加载到内存的Linux内核(以及initramfs一起)并执行它。 在Linux下最常用的引导加载程序是大统一引导装载程序 ,或GRUB的简称。
- 3.内核检查和访问硬件,然后运行初始进程从而完成通过启动服务系统启动(主要是由它的通用名“ 初始化 ”之称)。
在本系列的第7部分 (“ 的SysVinit,Upstart,和Systemd ”),我们介绍了业务管理系统和工具现代的Linux发行版使用。 在继续操作之前,您可能需要查看该文章。
引入GRUB引导加载程序
两个主要版本的GRUB(V1有时被称为GRUB传统和v2),可以在现代系统中可以发现,虽然大部分分布在其最新版本使用v2的默认。 只有红帽企业Linux 6和它的衍生物仍然使用V1今天。
因此,我们将主要关注v2的本指南中的功能。
不管在GRUB版本,引导装载程序允许用户:
- 1)修改系统的行为方式,通过指定不同的内核来使用,
- 2)备用操作系统之间进行选择,以引导,
- 3)。添加或编辑配置节来改变引导选项,等等。
今天,GRUB是由GNU项目维护,并在其网站上是有据可查的。 我们鼓励您使用GNU官方文档审阅本指南的同时。
当系统启动时,你都带有主控制台下面的GRUB屏幕。 最初,系统会提示您其他种类的内核之间进行选择(默认情况下,系统将启动,并使用最新的内核)和被允许进入GRUB命令行(与c
)或编辑启动选项(按e
键)。
GRUB启动屏幕
一,为什么你会考虑用旧内核启动的原因之一是用于正常工作,并已开始进行升级(参见后“ 演戏 ”的硬件设备这一环节在AskUbuntu论坛的例子)。
GRUB的V2配置读取从启动/boot/grub/grub.cfg
或/boot/grub2/grub.cfg
,而/boot/grub/grub.conf
或/boot/grub/menu.lst
在V1使用。 这些文件不是用手工进行编辑,但基于的内容被修改/etc/default/grub
和内找到的文件/etc/grub.d
。
在CentOS 7,这里是第一次安装系统时创建配置文件:
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet" GRUB_DISABLE_RECOVERY="true"
除了在线文档,您还可以使用以下信息找到GNU GRUB手册:
# info grub
如果你在提供的/ etc /默认/ grub中的选项特别感兴趣,您可以直接调用配置部分:
# info -f grub -n 'Simple configuration'
使用上面的命令,你会发现, GRUB_TIMEOUT
设置之间的时间当初始屏幕出现,系统自动启动开始,除非用户中断。 当此变量设置为-1
,开机都不会,直到用户进行选择启动。
当多个操作系统或内核安装在同一台机器, GRUB_DEFAULT
需要一个整数值,表示该操作系统或内核入口在GRUB初始屏幕应选择默认启动。 条目列表不仅可以在上面显示的启动屏幕中查看,而且还可以使用以下命令查看:
在CentOS和openSUSE:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
在Ubuntu:
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg
在下面的图片中显示,如果我们希望与内核版本3.10.0-123.el7.x86_64(第4项)启动的例子中,我们需要设置GRUB_DEFAULT
为3
(项内部编号以零开头),如下:
GRUB_DEFAULT=3
具有旧内核版本的引导系统
最后一个GRUB配置变量,特别关注的是GRUB_CMDLINE_LINUX
,它是用来将选项传递给内核。 可以通过GRUB传递给内核的选项中是有据可查的内核参数文件 ,并在男子7机bootparam 。
目前在我的CentOS 7服务器的选项有:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
为什么要修改默认内核参数或传递额外的选项? 简单来说,可能有时你需要告诉内核某些硬件参数,它可能无法自己确定,或者覆盖它会检测到的值。
这发生在我身上不是很久以前,当我试图矢量的Linux,Slackware 的衍生物,在我10岁的笔记本电脑。 安装后,它没有检测到我的视频卡的正确设置,所以我不得不修改通过GRUB的内核选项,以使其工作。
另一个例子是当您需要使系统进入单用户模式以执行维护任务。 您可以通过追加到单个字做到这一点GRUB_CMDLINE_LINUX
并重启系统:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"
编辑后/etc/defalt/grub
,你需要运行update-grub
(Ubuntu的),或grub2-mkconfig -o /boot/grub2/grub.cfg
(CentOS的和openSUSE)之后更新grub.cfg
(否则,将改变在引导时丢失)。
此命令将处理前面提到的更新引导配置文件grub.cfg
。 此方法确保更改是永久性的,而在引导时通过GRUB传递的选项只会在当前会话期间持续。
修复Linux GRUB问题
如果您安装第二个操作系统,或者如果您的GRUB配置文件被损坏,由于人为错误,有方法可以让您的系统回来了,并能够重新启动。
在初始屏幕上,按c
得到一个GRUB命令行(请记住,您也可以按e
编辑默认启动选项),并使用帮助,使可用命令在GRUB提示:
修复Linux中的Grub配置问题
我们将专注于LS,其中将列出已安装的设备和文件系统,我们将研究一下它找到。 在下面的图片我们可以看到,有4个硬盘驱动器( hd0
通过hd3
)。
仅hd0
似乎已被分配(由msdos1和msdos2,其中1和2是分区号和MSDOS是分区方案所证明)。
现在,让我们考察的第一个分区hd0
(msdos1),看看我们是否能找到GRUB那里。 这种方法将允许我们启动Linux,并使用其他高级工具修复配置文件或重新安装GRUB完全如果需要:
# ls (hd0,msdos1)/
我们可以在高亮区域看,我们发现此分区的GRUB2目录:
查找Grub配置
一旦我们确信,GRUB位于(HD0,msdos1),让我们来告诉GRUB在哪里可以找到它的配置文件,然后指示它尝试启动它的菜单:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal
查找并启动Grub菜单
然后在GRUB菜单中,选择一个条目,然后按Enter用它来引导。 一旦系统启动,你可以发出grub2-install /dev/sdX
命令(更改sdX
你想要安装GRUB的设备)。 然后将更新引导信息,并还原所有相关文件。
# grub2-install /dev/sdX
其他更复杂的情况都记录,用自己建议的修复以来,在Ubuntu的GRUB2故障排除指南 。 这里解释的概念也适用于其他分布。
概要
在本文中,我们向您介绍了GRUB,指出了在哪里可以找到在线和离线的文档,并解释了如何处理系统由于与引导加载程序相关的问题而停止正确引导的情况。
幸运的是,GRUB是最好记录的工具之一,您可以在已安装的文档中或在线使用我们在本文中共享的资源轻松找到帮助。
您有问题或意见吗? 不要犹豫,让我们知道使用下面的评论表。 我们期待您的回音!