[转帖]linux系统下grub.cfg详解和实例操作
linux系统下grub.cfg详解和实例操作
简介
grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文件系统对应的驱动,通过根分区文件系统对应的驱动,挂载根分区,从而达到启动操作系统的目的。
特殊变量
| 变量 | 详解 |
|---|---|
| ? | 上一条命令的返回值,零表示成功,非零表示失败[与bash一样]。由GRUB2自动设置。你只能使用此变量,而不能修改它 |
| check_signatures | 是否在加载文件时强制验证签名,可以设为’yes’或’no’ |
| chosen | 当前被执行的菜单项名称(紧跟"menuentry"命令之后的字符串或者’–id’选项的参数),例如’Windows 7’。由GRUB2自动设置。你只应该使用此变量,而不应该修改它 |
| cmdpath | 当前被加载的"core.img"所在目录(绝对路径)。例如:UEFI启动可能是’(hd0,gpt1)/EFI/UBUNTU’或’(cd0)/EFI/BOOT’,BIOS启动可能是’(hd0)’。由GRUB2自动设置。你只应该使用此变量,而不应该修改它 |
| debug | 设为’all’时表示开启调试输出[会显示大量信息,谨慎开启] |
| default | 默认选中第几个菜单项(从’0’开始计数) |
| fallback | 如果默认菜单项启动失败,那么就启动第几个菜单项(从’0’开始计数) |
| gfxmode | 设置"gfxterm"模块所使用的视频模式,可以指定一组由逗号或分号分隔的模式以供逐一尝试:每个模式的格式必须是:‘auto’(自动检测),‘宽x高’,‘宽x高x色深’之一,并且只能使用VBE标准指定的模式[640x480,800x600,1024x768,1280x1024]x[16,24,32]。可以在GRUB SHELL中使用"videoinfo"命令列出当前所有可用模式。默认值是’auto’ |
| gfxpayload | 设置Linux内核启动时的视频模式,可以指定一组由逗号或分号分隔的模式以供逐一尝试:每个模式的格式必须是:‘text’(普通文本模式,不能用于UEFI平台),‘keep’(继承"gfxmode"的值),‘auto’(自动检测),‘宽x高’,‘宽x高x色深’之一,并且只能使用VBE标准指定的模式[640x480,800x600,1024x768,1280x1024]x[16,24,32]。在BIOS平台上的默认值是’text’,在UEFI平台上的默认值是’auto’。除非你想明确设置Linux控制台的分辨率(要求内核必须"CONFIG_FRAMEBUFFER_CONSOLE=y"),或者打算在BIOS平台上使用图形控制台(要求内核必须"CONFIG_FRAMEBUFFER_CONSOLE=y"),否则不要设置此变量 |
| gfxterm_font | 设置"gfxterm"模块所使用的字体,默认使用所有可用字体 |
| grub_cpu | 此GRUB所适用的CPU类型。例如:‘i386’, ‘x86_64’。由GRUB2自动设置。你只应该使用此变量,而不应该修改它 |
| grub_platform | 此GRUB所适用的平台类型。例如:‘pc’, ‘efi’。由GRUB2自动设置。你只应该使用此变量,而不应该修改它。 lang设置GRUB2的界面语言,必须搭配"locale_dir"变量一起使用。简体中文应设为’zh_CN’ |
| locale_dir | 设置翻译文件(*.mo)的目录,通常是’$prefix/locale’,若未明确设置此目录,则禁止国际化。 pager如果设为’1’,那么每一满屏后暂停输出,等待键盘输入。缺省是’’,表示不暂停 |
| prefix | 绝对路径形式的’/boot/grub’目录位置(也就是GRUB2的安装目录),例如’(hd0,gpt1)/grub’或’(hd0,msdos2)/boot/grub’。初始值由GRUB在启动时根据"grub-install"在安装时提供的信息自动设置。你只应该使用此变量,而不应该修改它 |
| root | 设置"根设备"。任何未指定设备名的文件都视为位于此设备。初始值由GRUB在启动时根据"prefix"变量的值自动设置。在大多数情况下,你都需要修改它。 |
| superusers | 设置一组"超级用户"(使用空格/逗号/分号进行分隔),以开启安全认证的功能 |
| theme | 设置菜单界面的主题风格文件的位置,例如:"/boot/grub/themes/starfield/theme.txt"。关于如何定制界面风格(背景图片/字体/颜色/图标等)的细节,可以参考GRUB2手册中的" Theme file format"部分 |
| timeout | 在启动默认菜单项前,等待键盘输入的秒数。默认值是’5’秒。‘0’表示直接启动默认菜单项(不显示菜单),’-1’表示永远等待 |
| quiet | 只打印重要信息,硬件自检不回显 |
| rhgb | 图片来代替启动过程中显示的文本信息,这些信息在启动后用dmesg也可以看到 |
| loglevel | 打印日志等级,loglevel=0打印等级最低,打印信息最少,loglevel=7打印等级最高 |
| splash | 开机动画显示 |
GRUB2命令
说明
对于GRUB-2.0.2版本来说,所有可用的命令有大约200个之多,他们中的绝大多数由各种各样的模块提供。我们没有必要去了解所有这些200个命令,只需要了解一些常用的命令即可。
menuentry "title" [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] [--id=id] [arg …] { command; … }
- 1
| 命令 | 详解 |
|---|---|
| title | 当此菜单项被选中时,GRUB将会把环境变量"chosen"的值设为"id"(使用了[–id=id]选项)或"title"(未使用[–id=id]选项),然后执行花括号中的命令列表,如果列表中最后一个命令执行成功,并且已经载入了一个内核,那么将执行"boot"命令 |
| –class | 指定菜单项所属的"样式类",从而可以使用指定的主题样式显示菜单项 |
| –users | 指定只允许特定的用户访问此菜单项,如果没有使用此选项,则表示允许所有用户访问 |
| –unrestricted | 指明允许所有用户访问此菜单项 |
| –hotkey | 设置访问此菜单项的热键(快捷键)。"key"可以是一个单独的字母,或者’backspace’,‘tab’,'delete’之一 |
| –id | 此菜单项设置一个全局唯一的标识符。"id"必须由ASCII字母/数字/下划线组成,且不得以数字开头 |
| [arg …] | 可选的参数列表。你可以把它们理解为命令行参数。实际上"title"也是命令行参数,只不过这个参数是个必须参数而已。这些参数都可以在花括号内的命令列表中使用,“title"对应着”$1",其余的以此类推 |
| –append | 指定的终端加入到激活的输入终端列表中,所有列表中的终端都可以用于向GRUB提供输入 |
| –remove | 指定的终端从激活的输入终端列表中删除 |
| authenticate [userlist] | 检查当前用户是否位于"userlist"或环境变量"superusers"中。[注意]如果环境变量"superusers"的值为空,此命令将返回’真’ |
| background_color color | 设置当前激活的输出终端的背景颜色。“color"可以使用HTML风格的颜色表示法(”#RRGGBB"或"#RGB") |
| –force | 强制载入文件,而不管它是否有正确的签名。通常用于加载有缺陷的启动载入器(例如 SCO UnixWare 7.1) |
| echo [-n] [-e] string … | 显示所要求的文本并换行(除非使用了 -n 选项)。如果有多个字符串,依次输出它们,并用空格分隔每一个 |
| export envvar | 导出环境变量"envvar",以使其对于使用"configfile"命令载入的配置文件可见 |
| false | 不做任何事,只返回一个失败的结果。主要用在if/while之类的控制构造中 |
| gettext string | 把"string"翻译为环境变量"lang"指定的语言。MO格式的翻译文件从环境变量"locale_dir"指定的目录加载 |
| halt [–no-apm] | 关闭计算机。如果指定了 --no-apm 选项,表示不执行APM BIOS调用。否则,计算机使用APM关闭 |
| help [pattern …] | 显示内建命令的帮助信息。如果没有指定"pattern",那么将显示所有可用命令的简短描述 |
| initrd file | 为以32位协议启动的Linux内核载入一个"initial ramdisk",并在内存里的Linux设置区域设置合适的参数 |
| initrd16 file | 为以16位协议启动的Linux内核载入一个"initial ramdisk",并在内存里的Linux设置区域设置合适的参数 |
| insmod module | 载入名为"module"的GRUB2模块 |
| linux file … | 使用32位启动协议从"file"载入一个Linux内核映像,并将其余的字符作为内核的命令行参数逐字传入 |
| linux16 file … | 以传统的16位启动协议从"file"载入一个Linux内核映像,并将其余的字符作为内核的命令行参数逐字传入。这通常用于启动一些遵守Linux启动协议的特殊工具(例如MEMDISK) |
| loopback [-d] device file | 将"file"文件映射为"device"回环设备。例如:loopback loop0 /path/to/image |
| lsfonts | 列出已经加载的所有字体 |
| lsmod | 列出已经加载的所有模块 |
| normal [file] | 进入普通模式,并显示GRUB菜单 |
| normal_exit | 退出当前的普通模式 |
| parttool partition commands | 对分区表进行各种修改。目前只能作用于MBR分区表(DOS分区表),而不能用于GPT分区表 |
| password user clear-password | 定义一个名为user的用户,并使用明文口令’clear-password’ |
| read [var] | 从用户读取一行输入 |
| reboot | 重新启动 |
| rmmod module | 卸载"module"模块 |
| set [envvar=value] | 将环境变量"envvar"的值设为’value’。如果没有使用参数,则打印出所有环境变量及其值 |
| source file | 直接将"file"文件的内容插入到当前位置。与"configfile"不同,此命令既不切换执行环境,也不会显示一个新的菜单 |
| true | 不做任何事,只返回一个成功的结果 |
| unset envvar | 撤销环境变量"envvar" |
| videoinfo | 列出所有当前可用的视频模式 |
应用实例
特殊变量
#默认启动第一个菜单项
set default=0
#如果第一个菜单项启动失败,转而启动第二个菜单项
set fallback=1
#优先使用最常规的1024x768分辨率,以保证在不同的屏幕上拥有一致的菜单效果,如果失败再自动匹配分辨率
set gfxmode=1024x768,auto
#使用自己制作的24px的大号字体以避免默认字体太小看不清
set gfxterm_font=WenQuanYiMicroHeiMono24px
#将GRUB2设置为简体中文界面
set lang=zh_CN
#指定翻译文件(*.mo)的目录,若未明确设置此目录,则无法显示中文界面。
set locale_dir=$prefix/locale
#每一满屏后暂停输出,以免信息太多一闪而过看不清
set pager=1
#开启密码验证功能,并设置一个名为'root'的超级用户
set superusers=root
#设置菜单的超时时间为5秒
set timeout=5
公共模块
#两种最流行的磁盘分区格式
insmod part_gpt
insmod part_msdos
#常见文件系统驱动
insmod btrfs
insmod exfat
insmod ext2
insmod fat
insmod iso9660
insmod jfs
insmod ntfs
insmod reiserfs
insmod udf
insmod xfs
insmod zfs
#一次性加载所有可用的视频驱动
insmod all_video
#图形模式终端
insmod gfxterm
#背景图片支持
insmod png
公共命令(必须放在模块和变量之后)
#激活图形模式的输出终端,以允许使用中文和背景图
terminal_output gfxterm
#设置背景图片
background_image $prefix/themes/1024x768.png
#加载自己制作的24px的大号字体文件($prefix/fonts/WenQuanYiMicroHeiMono24px.pf2)
loadfont WenQuanYiMicroHeiMono24px
#设置'root'用户的哈希密码[通过"grub-mkpasswd-pbkdf2"工具生成]
password_pbkdf2 root grub.pbkdf2.sha512.69.7DBCA469F80EA1C0A8A1E2FEBC4F8463.B073C1C89EC1E85309C3D6A1BAFF4356
U盘安装系统grub.cfg实例
menuentry 'NeoKylin Desktop 5.0 (Loongson) USB install'{
set root=(${root})
linux ${prefix}/vmlinuz console=tty inst.stage2=hd:LABEL=NeoKylin-Desktop-5.0(Loongson) ks=hd:sd*:/ks.cfg quiet splash loglevel=0
initrd ${prefix}/initrd.img
boot
}
硬盘启动系统grub.cfg实例
menuentry 'NeoKylin Desktop 5.0 (x86)' --class neokylin --class gnu-linux --class gnu --class os --unrestricted 'gnulinux-simple-7c468e57-7e0c-4ab8-949e-b62f569b02f6' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 48556c0b-2f69-42a1-aacf-41bf6c3b4830
else
search --no-floppy --fs-uuid --set=root 48556c0b-2f69-42a1-aacf-41bf6c3b4830
fi
linux16 /vmlinuz-4.4.13-200.nd7.3.x86_64 root=/dev/sda3 ro rhgb quiet loglevel=0 LANG=zh_CN.UTF-8
initrd16 /initramfs-4.4.13-200.nd7.3.x86_64.img
}
手动启动系统实例
1、在进入grub界面按c进入手动输入命令界面;
2、linux (hd0,msdos1)/boot/vmlinuz-3.10.0 root=/dev/sda1
3、输入boot回车进入系统
注意:root=xxx为根分区,该系统根分区为sda1,当为UEFI模式启动时,linux应改为linuxefi,同时(hd0,msdos1)为第一块硬盘第一个分区boot/目录下存放内核文件;
[转帖]linux系统下grub.cfg详解和实例操作的更多相关文章
- [r]Ubuntu Linux系统下apt-get命令详解
Ubuntu Linux系统下apt-get命令详解(via|via) 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package ...
- Linux系统下Nginx安装详解
该随笔为个人原创,后期会根据项目实践实时更新,如若转载,请注明出处,方便大家获得最新博文! 注:安装Nginx需要Linux系统已经安装 openssl-fips-2.0.2.tar.gz zli ...
- Ubuntu Linux系统下apt-get命令详解
整理了Ubuntu Linux操作系统下apt-get命令的详细说明,分享给大家.常用的APT命令参数: apt-cache search package 搜索包 apt-cache show pac ...
- 在linux系统下安装mysql详解,以及远程调用连接不上mysql的解决方法。
步骤: 1)查看CentOS自带的mysql 输入 rpm -qa | grep mysql 2)将自带的mysql卸载 3)上传Mysql的安装包到linux 4)安装mysql的依赖(不是必须) ...
- [转帖]Linux系统下x86和ARM的区别有哪些?
Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...
- Linux系统下vi编辑器的一些简单使用操作
Linux系统安装vi编辑器 打开终端,输入: sudo apt install vim 然后输入Y等待安装即可 Linux系统下使用vi编辑器的使用 安装好vim后,终端中输入vim即可进入vim编 ...
- Memcached在Linux环境下的使用详解
一.引言 写有关NoSQL数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了.如果以后有了心得,再补充吧.然后就 ...
- 【Linux】Linux系统中的权限详解
我们linux服务器上有严格的权限等级,如果权限过高导致误操作会增加服务器的风险.所以对于了解linux系统中的各种权限及要给用户,服务等分配合理的权限十分重要. 一.文件基本权限 首先看下linux ...
- Linux下grub.cnf详解
grub.conf跟系统启动项有关,对于重置密码.来说小case... 1.介绍 在Red Hat Linux7.2之后,默认的引导加载程序从LTLO变为GRUB.这个引导加载程序使用户能够选择 ...
- Linux系统OOM killer机制详解
介绍: Linux下面有个特性叫OOM killer(Out Of Memory killer),会在系统内存耗尽的情况下出现,选择性的干掉一些进程以求释放一些内存.广大从事Linux方面的IT农民工 ...
随机推荐
- 日常Bug排查-集群逐步失去响应
前言 日常Bug排查系列都是一些简单Bug排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_ Bug现场 最近碰到一个产线问题,表现为某个应用集群所有的节点全部下线了.导致上游调用全部 ...
- 拥抱时序数据库,构筑IoT时代下智慧康养数据存储底座
摘要:在HDZ城市行广州站中,来自华为云华为云数据库创新Lab向宇从时序数据库的技术角度,解读一下华为云时序数据库GaussDB(for Influx)如何应用在智慧健康养老行业. 本文分享自华为云社 ...
- 论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
摘要:LayoutLM模型利用大规模无标注文档数据集进行文本与版面的联合预训练,在多个下游的文档理解任务上取得了领先的结果. 本文分享自华为云社区<论文解读系列二十五:LayoutLM: 面向文 ...
- centos8 新增ssh自定义端口与屏蔽默认22端口。
第一步:修改SSH配置文件(注意是sshd_config而不是ssh_config,多了个d) vim /etc/ssh/sshd_config找到"#Port 22",这一行直接 ...
- sqlalchemy 报错 Lost connection to MySQL server during query 解决
最近在开发过程中遇到一个sqlalchemy lost connection的报错,记录解决方法. 报错信息 python后端开发,使用的框架是Fastapi + sqlalchemy.在一个接口请求 ...
- 接口文档 token原理 jwt介绍和原理 drf-jwt快速使用
目录 昨日回顾 认证 权限 频率 全局异常处理 接口文档 接口文档编写 drf自动生成接口文档 cookies-session-token发展史 jwt介绍和原理 jwt的构成 base64的编码和解 ...
- Linux day3:⽹络不通排查流程 linux重要数据文件 系统优化相关 上传下载 文件权限 所属用户及用户组
目录 ⽹络不通排查流程 linux重要数据文件 etc⽬录下重要的数据⽂件 usr⽬录下重要的数据⽂件 var⽬录下重要的数据⽂件 proc⽬录重要的数据⽂件 系统优化相关 环境变量 下载软件优化操作 ...
- POJ 1236 Network of Schools (连通图 - Garbow 算法)
POJ 1236 Network of Schools 校园网:给定N所学校和网络,目标是分发软件其他学校都可收到,求①所需最少分发学校数:②若任选学校都能收到,最低新增边数. 思路:同一个强连通 ...
- AIO异步通信。BIO同步阻塞式IO, NIO同步非阻塞通信。
IO 什么是IO? 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完 ...
- Go image registry
0. 前言 OpenShift image registry 概述 介绍了 OpenShift 平台上 registry 的基本结构.进一步地,本文将介绍在 Kubernetes 平台上,如何使用 G ...