ubuntu更改默认启动项顺序

2023-05-16

ubuntu更改默认启动项顺序

因为经常需要在ubuntu下调试openstack代码,在windows下用虚拟机又会严重影响使用性能,所以干脆将笔记本装了windows+ubuntu双系统,曾多次半懂地设置了启动顺序,但当重装系统后再次设置时总是忘记如何设置,所以决定花点时间,简单研究了下grub的配置。

GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。 ——百度百科

Grub 2 是新一代的Grub,功能比Grub功能更加强大,由三部分组成:

* /etc/default/grub 文件

* /etc/grub.d 文件夹

* /boot/grub/grub.cfg 文件

其中ubuntu系统启动用的是 grub.cfg 文件。

相互关系

我觉得可以这样认为,在我们执行update-grub(更新启动菜单)命令后系统就会根据 /etc/default/grub文件/etc/grub.d文件夹 的内容生成 /boot/grub/grub.cfg文件,所以当 /etc/default/grub文件/etc/grub.d文件夹 被修改后,再执行 update-grub , grub.cfg文件内容被更改,或者说是被更新吧。

所以网上常见的通过直接修改 /boot/grub/grub.cfg 来设置grub的启动顺序并不是最好的一种方法,因为每个更新内核或才手动执行 “update-grub” 命令后,这样的设置就失效了。

以ubuntu 15.10进行说明:

/boot/grub/grub.cfg ----系统启动引导读取的文件
/etc/default/grub文件 ----存有开机默认启动项、倒记时时间的内容等grub的相关配置
/etc/grub.d文件夹 -------存有各个具体启动项,如下

wangchao@ubuntu:/etc/grub.d$ ls
00_header        10_linux      20_memtest86+  30_uefi-firmware  41_custom
05_debian_theme  20_linux_xen  30_os-prober   40_custom         README

解读/etc/grub.d

  • 00_header
    配置grub程序,变量从 /etc/default/grub 中导入

  • 05_debian_theme
    设置 GRUB 2 的背景图片、字体颜色和主题等

  • 10_linux
    搜索识别当前系统的内核,并建立启动菜单,随着Ubuntu的内核升级,可能有多个内核。

  • 20_memtest86+
    搜索 /boot/memtest86+.bin 并添加内存测试启动项。如果用不上,去掉该文件的可执行权限即可。

    sudo chmod -x /etc/grub.d/20_memtest86+
    sudo update-grub
  • 20_linux_xen
    以 Xen hypervisor 启动linux系统。

  • 30_os-prober
    查找存在的其他操作系统并建立启动菜单项,依次为windows,linux,macos和Hurd。

  • 40_custom
    根据模板添加自定义启动项。

说明:在/etc/grub.d目录下的启动项,只要变动文件的x属性(执行权限),即可决定这个选项要不要出现在grub的启动选单中。

解读/etc/default/grub

配置grub我们一般也只需要修改 /etc/default/grub 这个文件就行,如果改坏了,没有关系,重新 从/usr/share/grub/default/grub 拷贝一份就可以了。

  1. GRUB_DEFAULT
    设置默认的grub启动项,可以是序号,完整的条目名或者是“saved”,默认为 0,表示为grub启动菜单的每一个启动项。自 Grub 1.99 引入了子启动项的结构,常见于 高级启动项。对于这样的grub菜单,在设置时就分为主菜单项子菜单项了。

    • 默认启动项为主菜单项

      在主菜单项的第一个启动项序号为 0,第二条为 1,并以此类推。另外你也可以直接用完整的启动名作为值,所以可以这样配置。

      GRUB_DEFAULT=0
      GRUB_DEFAULT=1
      GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-23-generic"
    • 默认启动项为子菜单项

      对于 GRUB_DEFAULT 配置子菜单的值由3个部分组成,依次为:一级菜单(即主菜单项)的序号或者条目名,”>” 符号(前后不能有空格)和 二级菜单的序号或者条目名。直接上图进行说明:
      这里写图片描述

      GRUB_DEFAULT="Previous Linux versions>Ubuntu, with Linux 3.2.0-18-generic-pae"
      GRUB_DEFAULT="Previous Linux versions>0"
      GRUB_DEFAULT="2>0"
      GRUB_DEFAULT="2>Ubuntu, with Linux 3.2.0-18-generic-pae"

    当值为saved 时(对grub 1.98及后续版本有效),设置默认启动项时就需要通过 “grub-reboot”“grub-set-default” 两个命令去设置了,其中“grub-reboot”仅设置下次启动的默认启动项,“grub-set-default”设置每次启动的默认项。

    尽管上面讲的都是设置默认启动项,在开机过程中,也可以手动选择启动项启动操作系统。

  2. GRUB_SAVEDEFAULT

    如果设置了true,则下次的默认启动项就上次选择的,个人觉得这个比较好用,我就是选用这种方式设置默认启动项的。当然,要使用这种设置,还需要满足下面的条件:

    • 产生必须要设置 GRUB_DEFAULT=saved
    • 系统的/boot目录所在分区不能是LVM分区或者是RAID
  3. GRUB_HIDDEN_TIMEOUT

    设置等待用户按shift键的时间,在此期间不会显示grub界面,直到用户按下shift按键,才会进入grub菜单,如果没有按下shift键,等过了这个时间,直接进行默认的操作系统,特别是在单操作系统下,这也是默认行为。经过我测试,其实就算是设置值为0,及时按shift键还是可以进入grub
    经过测试,发现上述仅是针对单系统,如果有多系统,那个这个参数会覆盖下面的GRUB_TIMEOUT参数,表现出GRUB_TIMEOUT的行为,即代表显示grub的等待时间。

  4. GRUB_HIDDEN_TIMEOUT_QUIET

    值为truefalse,设置在GRUB_HIDDEN_TIMEOUT期间要不要显示倒计时。

  5. GRUB_TIMEOUT

    设置在自动启动操作系统时grub的显示时间,期间可以手动选择相关启动项,并也中止倒计时,期间如果没有任何操作,则过了这个时间,自动进入默认的操作系统。

与系统启动顺序配置相关的也就这几个主要参数了,其他配置就不作过多的介绍了,具体参见官方说明

GRUB_TIMEOUT & GRUB_HIDDEN_TIMEOUT

总的来说,只要GRUB_HIDDEN_TIMEOUT设置了值,那GRUB_TIMEOUT就不会生效,在update-grub时,系统会提示“Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.”的警告信息。
但在不同的情况下,GRUB_HIDDEN_TIMEOUT又表现出不同的行为。在单系统下,表示隐藏grub等待用户通过按shift键进行了grub的时间;而在多系统下,则表示显示grub等待用户选择启动项的时间,此时与GRUB_TIMEOUT类似,但会覆盖GRUB_TIMEOUT的值(如果也同时设置了GRUB_TIMEOUT)。

最佳实践

弄懂上面的原理后,那就可以随心所欲地根据自己的需求配置了grub了。由于我同时安装了win8.1和ubuntu 15.10,并且平常使用win8.1更多,所以需要将win8.1的启动项调到第一个,其次关于ubuntu测试的启动项也用不到,所以需要禁用,命令如下:

cd /etc/grub.d
sudo mv 30_os-prober 06__os-prober
sudo chmod -x 20_memtest86+

最后,还配置了默认启动上次启动的操作系统,并设置grub超时时间为 3s,最终修改如下:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
# GRUB_HIDDEN_TIMEOUT=5
# GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=3

参考文献

Grub2/Submenus - Community Help Wiki
Grub2/Setup - Community Help Wiki

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu更改默认启动项顺序 的相关文章

随机推荐

  • 为什么说组件库的源码非常值得学习?

    大家好 xff0c 我是若川 最近来了一些新朋友 xff0c 感谢大家关注 相比于原生 JS 等源码 我们或许更应该学习正在使用的组件库的源码 xff08 如 xff1a element antd vant semi arco tdesig
  • 写一个Vue DevTools,让开发体验飞一会

    大家好 xff0c 我是若川 我持续组织了近一年的源码共读活动 xff0c 感兴趣的可以 点此扫码加我微信 lxchuan12 参与 xff0c 每周大家一起学习200行左右的源码 xff0c 共同进步 同时极力推荐订阅我写的 学习源码整体
  • 偷偷盘点前端面试官才知道的进阶秘籍

    很多人都说35岁是程序员的职业尽头 而我们部门leader是位80年的大哥 xff0c 曾经是字节3 1大佬 xff0c 今年43岁了依然独当一面 于是 xff0c 我向他请教了 不被淘汰 的秘籍 他总结了两点 xff1a 1 努力修炼内功
  • Facebook CrypTen安全多方计算(MPC)框架介绍及核心代码分析

    简单介绍 CrypTen是Facebook在2019年10月开源的 用于多方安全计算 MPC 的框架 其底层依赖于深度学习框架PyTorch 官网说明见 xff1a https ai facebook com blog crypten a
  • 开源软件Asterisk:386变身交换机

    有关开源软件最令人激动的事情之一就是其创建超越传统的IT基础架构的应用程序的方式 一个恰当的例子是称作 Asterisk 的电话应用程序 Asterisk是一种功能非常齐全的应用程序 xff0c 提供了许多电信功能 也许它最著名的应用是当作
  • 2016.9---2017.1半年总,外派工作的感觉真爽 (补17年1月)

    16年8月份 xff0c 第二版订餐系统上线 xff0c 我就着手出去上班 xff0c 8月初提交简历后 xff0c 面试就一发不可收 xff0c 一直到12月初才出去 xff0c 历时四个月 xff0c 期间边学习边面试 xff0c 但这
  • gerrit - first commit

    最近公司有新项目 xff0c 已经让领导帮我把clone和push的权限都开通了 xff0c 但是在push的时候还是提交失败 xff0c 错误信息如下 xff1a git push origin master Counting objec
  • AutoML领域的一把利器---HyperGBM

    AutoML领域的一把利器 HyperGBM 文章目录 AutoML领域的一把利器 HyperGBM 前言一 何为AutoML xff1f 二 如何使用HyperGBM1 引入库2 读入数据3 初始化make experiment4 调用m
  • AutoML工具之HyperGBM介绍

    HyperGBM介绍 本文章主要是对autoML开源框架HyperGBM的一个介绍 文章目录 HyperGBM介绍一 关于HyperGBM二 功能特性总览二 如何安装HyperGBM三 HyperGBM入门样例1 准备数据集2 创建实验并进
  • HyperGBM如何定义autoML的搜索空间

    HyperGBM学习笔记之如何定义autoML搜索空间 文章目录 HyperGBM学习笔记之如何定义autoML搜索空间前言一 入门篇1 定义需求2 需求解析 二 进阶篇1 定义参数的搜索范围2 构建autoML伪代码3 HyperGBM定
  • HyperGBM之进化搜索算法

    HyperGBM学习笔记之进化搜索算法 文章目录 HyperGBM学习笔记之进化搜索算法一 什么是进化搜索算法 xff1f 二 HyperGBM中的变异算法实现1 构建进化搜索实例2 变异算法实现3 进化搜索算法整体流程 三 HyperGB
  • 机器学习之如何处理缺失值(missing value)

    机器学习之如何处理缺失值 备注 xff1a 本次数据来源于kaggle xff0c 详情请戳here xff0c 原文参考连接 xff0c 请戳here xff0c 本文篇幅较长 xff0c 旨在多介绍EDA过程中的一些思想和细节 文章目录
  • 机器学习中的早停策略

    前言 在做机器学习模型调优的时候 xff0c 往往会通过一系列的操作去提升调优效率 xff0c 其中有一种技术就是合理运用早停策略 关于数据集 xff1a 本文直接使用kaggle的数据集 xff0c 你可以直接点击链接下载 一 入门 1
  • 机器学习中如何处理非数值型的特征

    前言 传统的机器算法一般处理的是结构化数据 xff0c 而结构化数据中往往包含以下几种类别 xff1a 传统的机器学习算法 SVM xff0c LR xff0c lightgbm xff0c xgboost等 结构化数据类别 Categor
  • automl中如何提升搜索效率

    前言 automl 简单来说 xff0c 就是将机器学习应用于现实问题的端到端流程自动化的过程 xff0c 其产生的主要原因就是因为机器学习的应用需要大量的人工干预 xff0c 这些人工干预表现在 xff1a 特征分析 模型选择 参数调节等
  • Linux操作系统下搭建VNC远程控制软件详尽教程

    摘自 xff1a http os 51cto com art 200802 65589 htm VNC简介 xff1a 虽然VNC 还有着在Linux下无法按热键呼出中文输入等等小小不足 xff0c 但仍然无法阻止其在Linux系统中的地位
  • automl工具入门介绍

    前言 自动化机器学习已经被广泛应用于各种 跨 业务场景的模型构建 xff0c 实验以及生产部署当中 automl领域中有各种各样的开源项目可以直接使用 xff0c 本篇文章尝试对一些主流的开源框架进行介绍 autogluon hypergb
  • Ensemble算法之GreedyEnsemble

    前言 我们常说三个臭皮匠顶个诸葛亮 xff0c 在机器学习领域中将这个理念应用到极致的技术是boosting xff0c 将N多的弱分类器组合到一起 xff0c 达到一个强分类器的效果 xff0c 主流代表的算法就是xgboost xff0
  • Hadoop URL数据读取操作

    hadoop可以从命令行上使用hadoop fs command 来读取文件系统中的文件 同时也可以使用java接口来实现这些功能 刚写好了一个权威指南上的例子 xff0c 附上代码 xff1a package baseOperation
  • ubuntu更改默认启动项顺序

    ubuntu更改默认启动项顺序 因为经常需要在ubuntu下调试openstack代码 xff0c 在windows下用虚拟机又会严重影响使用性能 xff0c 所以干脆将笔记本装了windows 43 ubuntu双系统 xff0c 曾多次