grub启动程序配引导置及命令行接口详解

grub启动程序配引导置及命令行接口详解,第1张

Linux系统的启动引导程序有LiLo和grub,但由于LILO的缺陷——只能识别0-1023范围内的柱面构成的分区中的内核文件,因此目前已逐渐被grub所取代,本篇主要围绕grub legacy开展描述。

grub全称为Grand Unified Bootloader,grub的版本经过多年的发展,其现有版本分为grub 0.X(grub legacy) 和grub 1.X(grub 2)。其中目前Centos 7已经采用grub2位启动引导程序,Centos6和Centos5 普遍沿用grub legacy版本。

grub引导程序分为三个阶段:

1、stage1:用于启动Boot loader来加载stage2的内容至内存中;

2、stage1_5:其能够识别内核和stage2所在的分区的文件系统格式类型,帮助引导stage2.

3、stage2:读取grub.conf 配置文件,并实现引导功能的扩展;

在Linux系统中,与系统启动相关的文件均存储在/boot目录下,如grub、vmlinuz、initramfs等等。

与grub相关的配置文件包括:/etc/grub.conf和/boot/grub/grub.conf,其实/etc/grub.conf是指向/boot/grub/grub.conf的软链接,grub程序在引导启动时会读取这个配置文件并按照该文件的配置参数引导启动系统。

通常其内容为:

default=0 :表示有多个grub引导菜单时,选择哪一个作为默认启动引导菜单,default=0表示默认使用第一个title菜单中的配置;

timeout=5 :在grub选择菜单中,5秒内,如果用户没有选择任何一个title,则使用default中指定的titile菜单中的配置进行启动。

splashimage :指定引导菜单中的背景图片的路径;

titile :指定title菜单到的名称;

root :表示kernel和initrd文件所在的分区路径,而不是“根分区”;其设置格式为:root (hd#,#),硬盘均会被识别为hd,第一个#表示第几个硬盘,从0开始;地第二个#表示同一个硬盘上的不同分区,也使用数字标识,从0开始;

kernel :通常用于指定要运行的内核文件路径,如:/vmlinuz-2.6.32-642.el6.x86_64;另外也可在其后设置相关的内核参数,如:ro表示只读,root表示指定根分区所在路径,关闭selinux等等;

initrd :为内核运行指定其可用的ramdisk文件,其版本须与内核版本相一致;

1、提供引导菜单,并提供交互式的命令行接口;在菜单界面,按e可进入编辑模式,用于编辑菜单,按c可以进入命令模式;

2、加载用户选择的内核或 *** 作系统,并允许传递相应的内核参数给内核;可选择隐藏此菜单;

3、为菜单提供保护机制,可为编辑菜单设置认证或为启用内核或 *** 作系统进行认证;

在系统开机启动过程中,有几秒的过渡页面,此时按任意键可进入到菜单页面中:

进入到菜单页面后,如果存在着多个内核,此时可按上下键选择需要启动的内核,或者按e进入内核编辑模式,按c可进入grub的命令行模式。

在菜单页面按c即可进入命令行接口,在此命令行接口, 我们可以配置相关的grub设置,如指定root 路径、kernel文件的路径等等。grub命令行接口的常用指令有:

grub程序提供了相关的认证机制用于系统保护,如防止恶意用户随意通过单用户模式修改root密码或启动其他内核。

设置认证的方法为:在相应的grub.conf配置文件中,添加passwd -md5 STRING。

如下图为提供grub菜单的编辑认证:

下述为为对应的内核启动提供密码认证:

1、使用grub-install命令

DEVICE:安装的目标磁盘;

--root-directory=DIR:指grub映像文件的存放位置,默认为当前系统根目录。grub-install会在指定的目录下创建boot/grub/的层级目录,并生成相关的grub文件生成在DIR/boot/grub/下。

2、在grub命令行下安装grub

输入命令grub进入grub命令行:

在grub程序出现损坏时,我们还可以利用上述方法对其进行修复:

也可以通grub命令行来修复grub程序:

方法一:利用安装光进入救援模式进行grub修复

插入光盘,进入救援模式。

在完成相关的硬件检测及引导程序,依次设置语言、键盘及是否启动网络,接着系统会查找根分区,随后选择continue以读写的方式挂载根文件系统。

点击OK,最后选择start shell。

至此grub已修复完成,系统应能正常启动。

方法二:将损坏的硬盘拆卸挂载到其他Linux系统上进行修复

修复完成后,将对应硬盘拆卸挂载回原来的系统,再启动验证即可。

补充:如何在Linux系统不重启下添加或移除硬盘。

添加命令为:

移除命令为:

这两个命令的成功与否在于对应的数字ID是否正确,其格式为:

1、在启动linux系统时,如果/boot/grub/grub.cfg文件损坏或者不存在时,启动linux时,就会有Grub命令行的提示。

如下 *** 作,将系统自带的grub.cfg文件改名。

2、重新启动系统后,发现和自己预想的一样,没有出现引导菜单。

3、在grub命令提示符下,可以使用一些命令加载内核和文件系统,设置根目录的分区。

有的grub使用

linux

/boot/vmlinuz-xx

有的grub使用kernel

/boot/vmlinuz-xx,可自己输入一个首字母,按TAB键查看,演示的grub支持的是linux命令

4、过一会出现下面的界面。

->

sudo

update-grub

->sudo

grub-install

/dev/sda

输入这两个命令后,新的grub.cfg就生成了,跟之前文件的一样(前提是没有对文件做任何更改)。

当用户打开电源后,BIOS开机自检,确定启动设备,安装启动设备,启动设备上面安装的GRUB开始引导Linux,Linux首先先进行内核引导,通过跟切换,执行init程序,init程序确定启动级别,根据启动级别进行系统初始化和运行的服务,然后返回init启动终端,用户通过验证成功登陆Shell,这就是一个从开机到登陆的启动过程。

一、硬件引导启动

当用户打开电源后POST开始自检,检测硬件设备是否确实或者存在故障(是否影响正常开机),如果不影响正常开机,就把任务交给BIOS。BIOS通过搜索,安装启动确定启动设备,启动项为硬盘,BIOS去读取硬盘的前512字节到内存,找到BootLoader,确定GRUB

二、GRUB引导启动内核

这一部分概况起来就是:GRUB程序加载执行并开始引导kernel程序

Boot Loader就是在 *** 作系统内核运行之前运行的一小段程序。通过GRUB引导可以确定内核程序,因为引导扇区只有446字节,GRUB只是一个小的程序安装在里面,真正使用的在MBR后面的扇区存放,我们想使用Bootloader GRUB功能必须读取后面的文件,Bootloader GRUB功能程序的运行和加载配置选项分为三个阶段

Stage1阶段:

Stage1阶段其实就是执行系统安装时预先写入到MBR的Bootloader中的程序。

Stage1阶段的任务仅是将硬盘0柱面0磁道2扇区的内容读入内存并执行,它是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。 在此Stage1阶段,还没有识别文件系统的能力。

Stage1.5阶段:

stage1.5阶段是stage1阶段和stage2阶段的中间桥梁。stage1.5阶段具有识别启动分区文件系统的能力,此后GRUB程序便有能力去访问/boot分区下/grub目录下的 stage2文件,并将stage2载入内存执行。

Stage2阶段

Stage2阶段执行时,首先会解析GRUB程序的配置文件grub.conf,并依配置文件决定是否显示系统启动菜单。然后加载内核镜像到内存中,通过initrd程序建立RAMDisk内存虚拟根文件系统。此时控制权将转交给内核程序。

三、内核引导启动

这一部分主要是通过在内存中建立虚拟根文件系统实现相关设备的驱动并建立和切换到真正的根文件系统。

解压内核镜像加载到内存,以及initrd程序建立RAMDisk内存虚拟根文件系统后,内核开始驱动基本硬件,并调用虚拟根文件系统中的init程序加载驱动模块初始化系统中各种设备的相关配置工作,其中包括CPU、I/O、存储设备等。当所需的驱动程序加载完后,会根据grub.conf配置文件中“root=XXX”部分所指定的内容创建一个根设备,然后将根文件系统以只读的方式挂载,并切换到真正的根文件系统上,同时调用系统进程的/sbin/init程序,进入系统初始化阶段。

四、系统初始化

这一步是通过/sbin/init,init程序准备软件运行坏境,启动系统服务

通过/etc/inittab文件确定运行级别,然后去执行系统初始化脚本/etc/rc.sysinit,为用户初始化用户空间环境,在完成初始化后,根据运行级别,系统开始对应级别的目录启动服务,关闭那些不要的服务(里面S99local ->../rc.local)用户自动服务启动脚本

运行级别:为系统运行或维护等目的而设定;0-6:7个级别

0:关机

1:单用户模式(root自动登录), single, 维护模式

2: 多用户模式,启动网络功能,但不会启动NFS;维护模式

3:多用户模式,正常模式;文本界面

4:预留级别;可同3级别

5:多用户模式,正常模式;图形界面

6:重启

默认级别:3, 5

切换级别:init #

查看级别:runlevel who -r

五、启动终端,用户登录

这一步是用户登录shell过程

如果没有改变级别,默认情况执行/sbin/mingetty打开6个纯文本终端,让用户输入用户名和密码。输入完成后,再调用login程序,核对密码。如果密码正确,就从文件 /etc/passwd 读取该用户指定的shell,然后启动这个shell。更多Linux介绍请查看《Linux就该这么学》。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8981698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存