关于Ubuntu开机启动菜单grub2(选择内核、删除内核、调整内核启动顺序)

在早期的 Ubuntu 中,使用 Grub 作为系统的启动引导程序,想修改系统启动项非常简单,只要打开系统菜单设定文件 /boot/grub/menu.lst,修改该文件中的内容即可,但是到了 Grub2,可就不能采用这种方式修改系统启动项了。Grub2(GRand Unified Bootloader, version 2)是 Grub 的第二版。其对 Grub 的接口进行了完整的重写,基于 PUPA 项目的研究,Grub2 更模块化并且更方便扩展。

Grub 2 包含下面几个部分:

|

|– /boot/grub/grub.cfg 文件

|– /etc/grub.d/ 文件夹

|– /etc/default/grub 文件

下面开始一个个介绍。

grub.cfg 类似 Grub 中的 /boot/grub/menu.lst。里面的格式于 menu.lst 差不多,但是现在不允许你通过直接修改该文件到方式来修改启动项,因为该文件是在 执行"update-grub"或者update-grub2"之后,根据上面说到2、3两项动态生成到,也就是说,如果你修改了这个文件当下次这两个命 令被执行了(比如说更新内核后),你修改到内容就会背覆盖。官方文件只说/boot/grub/grub.cfg不要手工修改,这个文件是运行 update-grub自动生成的。要修改配置文件的只要打开/boot/grub/grub.cfg文件,找到想修改的地方,然后根据注释找到相应的 /etc/default/grub或/etc/grub.d/ (folder)进行修改。

grub.cfg文件中主要包含两个部分,一部分是 各个启动项的定义,第二部分是启动界面的设置。你可以直接用gedit打开该文件看其中的内容。既然grub.cfg不能修改,那也没什么好详细说的了, 稍微研究下就能看懂里面是怎么写的。下面就介绍一下Grub 2的另外两个部分。

Grub 2 的另外两部分内容其实就分别对应于 grub.cfg 中的两部分内容。

首先 /etc/grub.d/ 文件夹中定义各个启动项,其中的文件代表了一个或多个启动项,命名规范都是"两个数字_名称",前面的两位数字确定这个或这多个启动项在启动界面的位置, 默认的 "00_"是预留给"00_header"的,"10_是预留给当前系统内核的,20_是预留给第三方程序的,除了这些你都可以使用,增加自己的,比如 05_ , 15_,数字越小越前面。这里的文件好像是代码,我还没研究透,不会自己写,只会改。当执行前面说的"update-grub"或者update- grub2"命令之后,这个文件夹中的文件就是用于生成 grub.cfg 中启动项的定义的。

Grub 2 的最后一部分是 /etc/default/grub 文件,该文件主要是启动界面的配置,比如默认的启动项,等待用户选择启动项的时间等。文件内容很简单,就是一些键值对,详细的可配置属性可以参考Grub 2的Wiki中"grub (/etc/default/grub)"这一节。当执行前面说的"update-grub"或者update-grub2"命令之后,这个文件的内容就 用于生成 grub.cfg 中启动界面的设置。

/etc/default/grub文件详细修改方法

系统安装完成后,用户就会发现/boot/grub/grub.cfg文件只有root权限可读,如果要直接修改grub.cfg文件,要先修改其权 限。好不容易把grub.cfg修改好了,系统内核或grub升级时,会 自动执行update-grub,grub.cfg文件就会被打回原形,如何保证修改后的配置文件能一直保留下来呢?

其实不用修改 grub.cfg,只要把个性化配置写入/etc/default/目录下的grub和/etc/gurb.d目录下的脚本文件,以后不管升级内核或者是升级grub所执行的update-grub,都会按要求创建个性化的grub.cfg。

1、首先看下 /etc/default/grub,先从应用程序-附件里打开终端,输入

看看打开的文件可作什么修改:

再看下 /etc/grub.d 文件夹下的什么东东:

00_header 05_debian_theme 10_linux 20_memtest86+ 30_os-prober 40_custom README

前面这五个脚本对应 grub.cfg 上的各个部分,怎样修改这些脚本文件才能保证不会破坏update-grub的运行,又能让grub.cfg符合你的意愿呢?其实很简单,只要找到

00_header 可供修改的有两地方

menuentry "${LONGNAME} (on ${DEVICE})" <——-把引号中的变量改为固定,如 windows xp ,vista 或 linux , Fedora 之类的菜单项。

40_custom 自定义启动项,按菜单标准格式添加即可,update-grub 后会自动添加到 grub.cfg 上,如:

不一样??? 再改,再 sudo update-grub

实例:

要修改默认启动项,可以使用下面的方法:

1、修改 /etc/grub.d/ 中启动项的顺序,将你想要默认启动的项顺序设置为较小的值。优点是修改不会被update-grub命令覆盖掉,好像没啥缺电,只有另外的程序修改为比你的值更小了才会成为默认启动。

2、修改 /etc/default/grub 中默认的启动项,设置该文件中 GRUB_DEFAULT 为你想要的值,这个值是生成的 grub.cfg 中各个启动项的从0开始的下标。该方法优点是修改不会被update-grub命令覆盖,缺点是当启动项的顺序变化之后,下标也就变了。。。

调整启动画面分辨率

第一步:打开终端,修改/etc/default/grub文件

取消 #GRUB_GFXMODE=640×480 这一行前面的注释符号,并将后面的数字修改为一个合适的值,不需要太高,比如 1024×768。这个值同时会影响 grub启动菜单和控制台里文字的分辨率。

注意:启动菜单和启动界面分辨率相同,如果此处分辨率设置过高的话,启动菜单会很难看,似乎修改分辨率不会影响启动速度,

第二步:修改 /etc/grub.d/00_header 文件

第三步:更新grub

给 grub2 菜单添加图片

1.在etc/grub.d文件夹中找到00_header 文件,打开后在

3.根据图片位置可判断系统grub默认图片文件夹位置,在相同位置放上一张同名图片文件即可。

图中文件名为moreblue-orbit-grub.png

备注:

一、修改 /boot/grub/grub.cfg 文件的方法(可以当作修改/etc/grub.d/ 文件夹和/etc/default/grub 文件的参考)

grub.cfg 默认为只读,要修改前先设为可写

在出现选择菜单时,按C进入终端命令行模式,按E进入当前菜单项编辑模式(和grub一样),编辑中按Ctrl + C退出,按Ctrl + X 以编辑内容启动。

1. help

查看命令用法,显示所有可用命令

help search

search 命令用法

2. ls

列出当前的所有设备。如 (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1) (hd1,2) …….

ls -l

详细列出当前的所有设备。对于分区,会显示其label及uuid。

ls /

列出当前设为root的分区下的文件

ls (hd1,1)/

列出(hd1,1)分区下文件

3. search

search -f /ntldr

列出根目录里包含ntldr文件的分区,返回为分区号

search -l LINUX

搜索label是LINUX的分区。

search -set -f /ntldr

搜索根目录包含ntldr文件的分区并设为root,注意如果多外分区含有ntldr文件,set 失去作用。

4. loopback

loopback命令可用于建立回放设备,如

loopback lo0 (hd1,1)/abc.iso

可以使用lo0设备来访问abc.iso里的内容,比如说,可以从abc.iso里的软盘映像中启动

loopback lo0 (hd1,1)/aa.iso

linux (lo0)/memdisk

initrd (lo0)/abc.img

要删除某一回放设备,可以使用-d参数:

loopback -d lo0

5. set

使用set可以设置变量的值

set root=

set timeout=

需要调用变量的值时,使用${AA},如set root=(hd1,1)

则${root}=(hd1,1)

6. pager

分页显示。

set pager=1

满页时暂停,按space继续

set pager=0

取消分页

7. linux

linux取代grub中的kernel

三、单linux系统或硬盘安装时iso放在C盘,umount /isodevice 引起的误认为单系统不能出现菜单项的几种处理方法。

1. 开机自检后时按几下shift键,可调出菜单项

2. sudo update-grub

重建grub.cfg,会发现新的系统而改写grub.cfg,一般能出现菜单项。

3.如第二种方法不能解决,直接修改grub.cfg

把在### BEGIN /etc/grub.d/30_os-prober 中的这一段

四、双硬盘双系统 Grub Loading时间过长的解决方案

grub2的boot.img设定root的uuid从第一分区开始搜索分区的/boot/grub下的模块并加载, 如果linux分区处于第二硬盘甚至第三硬盘,会导致搜索时间过长而,出现菜单时间会长达10多秒。

对双(多)硬盘的情况建议把grub安装在ubuntu所在硬盘的mbr上,/boot分区或 / 分区 尽量靠前,并设该硬盘为启动盘,会大大缩短启动时间。

五、grub2几种修复方法

1. 双系统重装windows造成grub2被改写的修复

方法一 grub4dos0.4.4

在Windows启动项上加上grub4dos启动(不多说了,看置顶贴),重启选择进入grub,在命令行下输入(/boot单独分区的去掉 /boot)

代码:

代码:

引用:

代码:

改到命令行下

hd?,? 是grub文件所在分区 sda? 是/分区。

3. grub模块和配置文件grub.cfg受损无法启动时修复

引用:

六、 另一些补充说明

1. chainloader

grub2将支持 chainloader /file 的用法。

目前支持的文件只有 grub2 的 boot.img 和 grub4dos 的grldr 和 grub.exe。希望正式版能支持 ntldr bootmgr peldr 等文件。

2. drivemap

比如要加载(hd1,1)根目录下的 a.img 镜像,先把 memdisk 从 memdisk.gz 中解压出来,用法是:

原文链接:https://blog.csdn.net/lu_embedded/article/details/44353499

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享