Linux Grub.cfg配置文件详解 (linux grub.cfg)

Grub.cfg文件是Linux操作系统中比较重要的配置文件之一,负责启动和管理操作系统的引导程序。Grub.cfg文件不仅可以帮助用户启动系统,还可以方便的修改启动参数和添加新的操作系统选项。在本文中,我们将详细讲解Grub.cfg配置文件的结构和设置方法,帮助您更好地理解和应用该文件。

Grub.cfg配置文件结构

Grub.cfg文件属于基于文本的配置文件,其结构和语法类似于C语言,由一系列由“#”号开头的注释行和一些由命令行构成的块组成。在Grub.cfg文件中,每个块都代表了一个不同的操作系统或者启动器;每个块由多行命令组成,每行末尾都需要使用分号“;”作为结束符。

Grub.cfg文件的之一行是带有版本信息的开头行,后面接着若干注释行和块。每个块都包含了一些配置选项和变量,在每个块内部的命令行中可以通过各种变量来获得和设置不同的配置值。下面是Grub.cfg文件的一个示例:

“`

# This is a sample grub.cfg file

set timeout=5

set default=0

menuentry “Ubuntu 20.04” {

linux /boot/vmlinuz-5.4.0-74-generic root=UUID=20d018eb-f7c2-40b8-a294-8c0b0b64d609 ro quiet splash

initrd /boot/initrd.img-5.4.0-74-generic

}

menuentry “Arch Linux” {

set root=(hd0,2)

linux /vmlinuz-linux root=/dev/sda2 rw

initrd /initramfs-linux.img

}

menuentry “Windows 10” {

set root=(hd0,1)

chnloader +1

}

“`

在这个例子中,Grub.cfg文件包含了三个块,分别代表了Ubuntu、Arch Linux和Windows 10三种不同的操作系统选项。每个块都包含了一定的配置信息,比如操作系统的名称和相应的启动命令等。

Grub.cfg配置文件中的变量和命令

Grub.cfg文件中的命令和变量用于控制和修改Grub引导程序的行为和参数。下面是一些常用的命令和变量:

1. set:用于设置一个变量的值,格式为set varname=value。例如:set timeout=5表示设置引导等待超时时间为5秒。

2. menuentry:定义一个菜单项,格式为menuentry choice {…},其中choice为菜单项的名称,{}内部是关于该菜单项的操作系统启动命令。

3. linux:用于定义加载内核的命令行参数,格式为linux kernel-image options。例如:linux /boot/vmlinuz root=/dev/sda1 ro表示加载/dev/sda1分区上的vmlinuz内核,并以只读模式启动。

4. initrd:指定一个可载入模块(initrd)文件,以便于启动操作系统。格式为initrd initrd-file。例如:initrd /boot/initramfs-$(uname -r).img表示使用当前版本内核对应的initramfs文件。

5. set root:设置启动分区的设备和分区号,格式为set root=(device,partition)。例如:set root=(hd0,1)表示将/boot目录设为grub的root目录。

6. chnloader:加载Windows的NTLDR引导程序,格式为chnloader +(hdX,Y)+1。其中X和Y为硬盘和分区的序号,+1表示从该分区的之一个扇区开始启动。

Grub.cfg配置文件的使用注意事项

在使用Grub.cfg文件的时候,需要注意以下几点:

1. 修改Grub.cfg文件的时候一定要备份原来的文件,以免因修改错误而导致系统无法启动。

2. 在修改Grub.cfg文件之前,需要先了解自己安装的操作系统和分区情况,以确定正确的启动参数和分区信息。

3. 在Grub.cfg文件中,语法和格式十分重要,因此需要注意每个命令和变量分别的位置和格式,以确保文件能够被正确识别和解析。

结论

Grub.cfg配置文件是Linux系统中非常重要的一个配置文件,它控制着引导程序的行为和参数,决定了系统的启动顺序和设置。对于系统管理员和Linux用户来说,了解Grub.cfg文件的结构和语法,以及掌握常见的命令和变量是必不可少的技能之一。通过本文的介绍,相信读者已经掌握了Grub.cfg文件的基本知识和使用方法,希望本文可以为广大Linux用户提供一些帮助。

相关问题拓展阅读:

win7+linux双系统环境。linux的grub.cfg被我修改后,异常了,咋办

如果你用的不是wubi安装。用埋橘滑live cd修弯腊复。你想修改菜单,不是在这里伍搜改的,你可以看看我空间里的文章,在ubuntu分类标签下。

直接进入主题吧,用ubuntu10.04光盘启动电脑,进入LIVECD模式。

sudo -i

先来找一找你的ubuntu10.04安装在那个分区,用:

fdisk -l

我的部分输出如下:

Device Boot StartEnd Blocks Id System

/dev/sda+ 12 Compaq diagnostics

/dev/sda2 *HPFS/NTFS

/dev/sda+ 83 Linux

/dev/sda+ 5 Extended

/dev/sda 83 Linux

/dev/sda 82 Linux swap / Solaris

/dev/sda+ 83 Linux

/dev/sda b W95 FAT32

/dev/sda 83 Linux

/dev/sda 82 Linux swap / Solaris

内容有点多,因为我是3系统- -!,而我ubuntu10.04根目录所在的分区就是/dev/sda9,如果你不确定的话就找id为83的吧。

下面挂载原系统的根目录:

mount /dev/sda9 /mnt

将/dev/sda9挂载到了/mnt下,当然你也可以选其他地方。这里注意,如果你有单独为/boot分区的话,要单独挂载一次 /boot,比如说 如果你原来的/boot挂载到/dev/sda12上了,那个你这里要再输入mount /dev/sda12 /mnt/boot。我这里运敬没有把它单独分出来,所以就不需要了。

下面是最后一步了:

grub-install –root-directory=/mnt /dev/sda (注意:/mnt后面有 空格键)

这里我刚开始的时候自做主张的写成了grub-install –root-directory=/mnt /dev/sda9,同学们不要学我!

如果看到

Installation finished.No Error Reported.

就表示已经成功啦租掘!重启看看,熟悉的grub引导画面是不是又回来了?

这时重新启动你的电脑,就能看到grub2的引导界面了旁型慎,但是这时只能用来引导Ubuntu 10.04,还暂时无法引导Windows 7,这时选择进入Ubuntu 10.04,再找到并启动终端,在终端输入如下命令:

sudo update-grub2

按照提示输入密码,如果顺利的话,会出现如下类似语句,那就表示成功了。

grub.cfg …

Found Debian background: moreblue-orbit-grub.png

Found linux image: /boot/vmlinuz-2.6.31-15-generic

Found initrd image: /boot/initrd.img-2.6.31-15-generic

Found memtest86+ image: /boot/memtest86+.bin

Found Windows 7 (loader) on /dev/sda1

done

如果没有出现以上类似语句的话,那就在新立得里面搜索grub,可以安装带有Ubuntu 标志的那个grub-pc,安装之后,再输入

sudo update-grub2

更新一下grub2就可以了。

如果你竖搏宽的linux新的话银肆应余亮该是grub2吧。下载新的easybcd2.1.2.

ok

linux问题,GRUB下怎么编辑文件?

记得是按E,你看下边不是有一行显示的么。

一、grub2的启动配置文件grub.cfg

grub2的启动配置文孝橘件锋敏grub.cfg是/boot/grub/grub.cfg,而不是以前的memu.lst。

如果你是多系统,有Ubuntu和windows,那么用下面的命令,可以使grub2得到所以巧基团可以启动的系统。

sudo update-grub

实际就是让系统自己生成合适的grub.cfg文件。

这个grub.cfg文件是只读属性,so如果你要修改它,需要权限。

sudo chmod +w /boot/grub/grub.cfg

然后可以编辑grub.cfg了。

sudo gedit /boot/grub/grub.cfg

二、默认系统和等待时间

1、set default=0

这是说从之一项启动。

Linux系统启动及定制过程

CentOS的启动流程总体顺序如下:

POST –> Boot Sequence –> bootloader(MBR) –> Kernel –> 加载rootfs –> switchroot –> /in

/init –> (配置文件:/etc/inittab, /etc/init/*.conf) –> 根据init配置文件设置默认运行级别 –> 运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 –> 开启或关闭用户选定的对应运行级别下所对应的服务 –> 启动终端,打印登录提示符。

注:前面加粗部分代表内核空间的系统启动流程,后面未加粗部分代表用户空间的系统启动流程。

之一步:硬件启动过程

POST加尘数电自检

主要实现的功能是检测各个外围硬件设备是否存在而且能够正常运行起来,实现这一自检功能的是固化在主板上的ROM(主要代表为CMOS)芯片上的BIOS(Basic Input/Output System)程序;例如BIOS会检测CPU、Memory以及I/O设备是否能够正常运行,如果是个人计算机的话可能还会检测一下显示器。只要一通电,CPU就会自动去加载ROM芯片上的BIOS程序,是这样来实现的。而检测完成之后就进行硬件设备的初始化。

选择启动设备以加载MBR

主要实现的功能是选择要启动的硬件设备,选择了之后就可以读取这个设备上位于MBR里头的bootloader了。这一步的实现是这样的:根据BIOS中对启动顺序的设定,BIOS自己会依次扫描各个引导设备,然后之一个被扫描到具有引导程序(bootloader)的设备就被作为要启动的引导设备。

MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(之一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组 成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。派册首

   注:硬盘默认一个扇区大小为512字节。

  之一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。

  第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记 录在其中。

  第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MB

第二步:GRUB引导阶段

不同的系统有不同的姿磨主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段,Grub引导阶段的文件都在/boot/grub/目录下。

stage1:

这一阶段执行的就是系统安装时预先写入到MBR的Bootloader程序,即是存放在MBR的前446字节里的程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。

stage1.5:

这一阶段是Stage1阶段和Stage2阶段的桥梁,功能是加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统,此后grub程序便有能力去访问/boot/grub/stage2。

stage2:

这一阶段读取并解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核。

第三步:内部引导阶段

加载内核,核心开始解压,启动一些最核心的程序。为了让内核足够的轻小,硬件驱动并没放在内核文件里面。系统仅探测可识别到的所有硬件设备,加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动),以只读方式挂载根文件系统,运行用户空间的之一个应用程序:/in/init。

第四步:init初始化阶段(系统初始化阶段)

虽然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件内容各不相同,但总体的启动流程相同:/in/init –> 根据/etc/inittab配置文件设置默认运行级别 –> 运行系统初始化脚本/etc/rc.d/rc.sysinit,完成系统初始化 –> 关闭或启动用户选定的默认运行级别所对应的服务 。

对于CentOS 5来说,初始化程序init是SysV init,其配置文件为:/etc/inittab; 对于CentOS 6来说,初始化程序init是upstart,其配置文件为:/etc/inittab, /etc/init/

.conf,也就是upstart将配置文件拆分成多个,在/etc/init/目录下以conf结尾的都是upstart风格的配置文件,而/etc/inittab仅用于设置默认运行级别; 对于CentOS 7来说,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/

具体执行过程:/in/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。

CentOS7中初始化进程变为了systemd,systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术:A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

第五步:启动终端

根据前面获取的运行级别来启动终端,mingetty程序是用于启动终端的,它会调用登录程序login,这样就能显示出登录提示符了,类似mingetty这种用于打开终端的程序还有getty等。而如果默认运行级别为5,则会打开图形界面。

之一步:硬件启动过程

这一步和CentOS6差不多,详细请看1.1内容。

第二步:GRUB引导阶段

从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2,执行过程是先加载boot.img、core.img两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。

CentOS7中使用命令进行配置,而不直接去修改配置文件了。grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。

第三步:内部引导阶段

这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd。

第四步:init初始化阶段(系统初始化阶段)

CentOS7中我们的初始化进程变为了systemd。执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。

unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本)

第五步:启动终端

systemd执行sysinit.target

systemd启动multi-user.target下的本机与服务器服务

systemd执行multi-user.target下面的/etc/rc.d/rc.local

Systemd执行multi-user.target下的getty.target及登录服务

getty.target是启动终端的systemd对象。如果到此步骤,系统没有指定启动图形桌面,到此就可以结束了,如果需要启动图形界面,要在此基础上启动桌面程序。

从 CentOS 7 版本之后,系统开始用 systemd 实现init进程,系统启动和服务器守护进程管理器功能,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息。

3.2 system unit文件格式

/usr/lib/systemd/system:发行版打包者使用,每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/

/etc/systemd/system:系统管理员和用户使用,管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行

/lib/systemd/system::ubutun的对应目录

/run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行

unit 格式说明:

service unit file文件通常由三部分组成:

Unit段的常用选项:

Service段的常用选项:

Install段的常用选项:

注意:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启。

首先在启动界面按e编辑启动参数,

将ro参数更改为rw init=/sysroot/bin/sh,按ctr + x启动系统

按下图执行命令更改root密码

关于linux grub.cfg的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux Grub.cfg配置文件详解 (linux grub.cfg)