Linux 系统启动与 GRUB2 核心操作指南

Linux 系统的启动过程是一个环环相扣的链条,从硬件自检到用户登录,每一步都依赖关键组件的协作。其中,GRUB2 引导器systemd 进程是核心枢纽,而运行级别则决定了系统的启动状态。以下是系统启动流程、关键配置及故障处理的详细解析

一、Linux 系统启动全流程

系统启动从硬件通电到登录界面出现,可分为 8 个关键步骤,层层递进:

  1. 开机自检(POST)
    计算机通电后,BIOS/UEFI 会对 CPU、内存、硬盘等硬件进行检测,确保硬件正常工作。检测通过后,定位启动设备(如硬盘)
  2. MBR 引导
    从启动设备的MBR(主引导记录) 中读取引导程序 GRUB2(MBR 位于硬盘第一个扇区,仅 512 字节)。
  3. GRUB2 菜单加载
    GRUB2 读取配置文件/boot/grub2/grub.cfg,解析内容并显示引导菜单(如多系统选择、内核版本选择)
  4. 加载 Linux 内核
    用户选择内核后,GRUB2 将内核文件(如/boot/vmlinuz-xxx)和初始化内存盘(/boot/initramfs-xxx.img)载入内存
  5. 内核初始化
    内核接管系统控制权,完成内存分配、进程调度、驱动加载等基础环境搭建,为后续进程运行铺路
  6. 启动 systemd 进程
    内核初始化完成后,启动系统第一个进程systemd(进程号为 1),它是所有后续进程的父进程
  7. 设置运行级别
    systemd 读取/etc/systemd/system/default.target文件,确定系统默认运行级别,并启动对应级别的服务(如网络、图形界面)
  8. 进入登录界面
    所有服务启动完成后,系统弹出登录界面,等待用户输入账号密码
二、运行级别:系统状态的 “开关”

运行级别定义了系统启动后的状态,通过对应的 target 文件控制。传统的 0-6 级别与 systemd 的 target 对应关系如下:

运行级别对应 target描述
0poweroff.target关机
1rescue.target单用户模式(无网络,用于修复)
2multi-user.target多用户模式(无网络,较少使用)
3multi-user.target完全多用户模式(命令行界面,有网络)
4(保留)未定义,可自定义(保留)
5graphical.target图形化界面(含命令行功能)
6reboot.target重启

常用操作命令

  • 查看当前默认运行级别:systemctl get-default
  • 设置默认运行级别(如命令行):systemctl set-default multi-user.target
  • 临时切换到图形界面(不改变默认):systemctl isolate graphical.target
三、GRUB2 引导器:启动的 “总开关”

GRUB2 是系统启动的关键引导程序,负责加载内核。以下是其核心配置与维护操作:

  1. 生成 GRUB2 配置文件
    当内核更新或引导菜单需要修改时,需重新生成grub.cfg

    grub2-mkconfig -o /boot/grub2/grub.cfg  # 推荐方式,直接写入配置文件
    # 或 grub2-mkconfig > /boot/grub2/grub.cfg
    
  2. GRUB2 加密:防止未授权修改
    为避免他人通过 GRUB2 菜单篡改系统(如破解密码),可对 GRUB2 加密:

    • 明文加密(简单但密码可见):
      编辑/etc/grub.d/00_header,添加:

      cat << EOF
      set superusers="zhangsan"  # 定义管理员用户
      password zhangsan 123456   # 用户名+密码(明文)
      EOF
      

      生成配置:grub2-mkconfig -o /boot/grub2/grub.cfg

    • 密文加密(更安全):
      先生成密文密码:

      grub2-mkpasswd-pbkdf2  # 输入密码后,复制输出的密文(不含空格)
      

      编辑/etc/grub.d/00_header,添加:

      cat << EOF
      set superusers="tom"  # 管理员用户
      password_pbkdf2 tom 复制的密文  # 密文密码
      EOF
      

      生成配置:grub2-mkconfig -o /boot/grub2/grub.cfg

四、应急处理:破解 root 密码与修复 GRUB2

系统故障时,需掌握关键修复技巧:

  1. 破解 root 密码(忘记密码时):

    1. 重启系统,在 GRUB2 菜单按e进入编辑模式;

    2. 找到内核行(以linux16linux开头),末尾添加rd.break,按Ctrl+X启动;

    3. 进入伪系统,重新挂载根目录为读写模式:

      mount -o remount,rw /sysroot
      
    4. 切换到真实系统环境:chroot /sysroot

    5. 修改 root 密码:

      passwd root  # 手动输入新密码
      # 或 echo "新密码" | passwd --stdin root  # 非交互式设置
      
    6. 修复 SELinux 标签(避免权限问题):touch /.autorelabel

    7. 退出并重启:exit(两次,第一次退出 chroot,第二次重启系统)

  2. 修复 GRUB2 引导器(误删 GRUB2 目录时):

    1. 重新安装 GRUB2 到硬盘(以/dev/sda为例):

      grub2-install /dev/sda
      
    2. 生成配置文件恢复菜单:

      grub2-mkconfig -o /boot/grub2/grub.cfg
      
  3. 修复 /boot 目录(内核文件丢失时):

    1. 进入救援模式(从安装盘启动,选择 “Rescue a Linux system”);

    2. 挂载系统根目录到/mnt/sysroot,并切换到该环境:chroot /mnt/sysroot

    3. 挂载安装光盘(提供内核包):mount /dev/cdrom /mnt

    4. 重新安装内核(需替换为实际内核版本):

      rpm -ivh /mnt/Packages/kernel-3.10.0-xxx.rpm --force
      
    5. 恢复 GRUB2(同上述 “修复 GRUB2” 步骤);

    6. 退出并重启:exit(两次)

总结:启动流程与核心操作要点

Linux 启动的核心逻辑是 “硬件自检→引导程序→内核→初始化进程→服务启动”,其中GRUB2systemd是两大关键组件。掌握运行级别的切换、GRUB2 的配置与加密、以及应急修复(如破解密码、恢复引导器),能有效应对系统启动故障。记住:配置修改后及时生成 GRUB2 配置文件,是避免引导失败的关键习惯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91600.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91600.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91600.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

供应链分销代发源码:一站式打通供应商供货、平台定价、经销商批发及零售环节

在当前复杂的市场环境中&#xff0c;供应链管理成为企业发展的关键。尤其对于电商平台来说&#xff0c;高效、精准的供应链管理不仅能提升运营效率&#xff0c;还能增强市场竞争力。为了应对日益复杂的供应链挑战&#xff0c;核货宝供应链分销代发系统应运而生&#xff0c;旨在…

机器学习、深度学习与数据挖掘:核心技术差异、应用场景与工程实践指南

技术原理与核心概念数据挖掘作为知识发现的关键技术&#xff0c;其核心在于通过算法自动探索数据中的潜在模式。关联规则挖掘可以发现项目之间的有趣关联&#xff0c;如经典的"啤酒与尿布"案例&#xff1b;聚类分析能够将相似对象自动分组&#xff0c;常用于客户细分…

《C++初阶之STL》【stack/queue/priority_queue容器适配器:详解 + 实现】(附加:deque容器介绍)

【stack/queue/priority_queue容器适配器&#xff1a;详解 实现】目录前言&#xff1a;------------标准接口介绍------------一、栈&#xff1a;stack标准模板库中的stack容器适配器是什么样的呢&#xff1f;1. 栈的基本操作std::stack::topstd::stack::pushstd::stack::pop2…

Thymeleaf 模板引擎原理

Thymeleaf 的模板文件&#xff0c;本质上是标准的 HTML 文件&#xff0c;只是“加了标记&#xff08; th&#xff1a;&#xff09;的属性”&#xff0c;让模板引擎在服务端渲染时能 识别并处理 这些属性&#xff0c;从而完成数据&#xff08;model&#xff09; 的填充。<!DO…

5、生产Redis高并发分布式锁实战

一、核心问题与解决方案 问题本质 #mermaid-svg-W1SnVWZe1AotTtDy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-W1SnVWZe1AotTtDy .error-icon{fill:#552222;}#mermaid-svg-W1SnVWZe1AotTtDy .error-text{fill:#5…

CS231n-2017 Lecture8深度学习框架笔记

深度学习硬件&#xff1a;CPU:CPU有数个核心&#xff0c;每个核心可以独立工作&#xff0c;同时进行多个线程&#xff0c;内存与系统共享GPU&#xff1a;GPU有上千个核心&#xff0c;但每个核心运行速度很慢&#xff0c;适合并行做类似的工作&#xff0c;不能独立工作&#xff…

以ros的docker镜像为例,探讨docker镜像的使用

标题以ros的docker镜像为例&#xff0c;探讨docker镜像的使用&#xff08;待完善&#xff09; 1. docker介绍&#xff08;以ros工程距离&#xff09; &#xff08;1&#xff09;个人理解&#xff1a;docker就是一个容器&#xff0c;主要的作用就是将环境打包好&#xff0c;方…

Android Audio实战——TimeCheck机制解析(十三)

上一篇文章我们虽然通过 tombstoned Log 推断出 audioserver 崩溃的原因就是系统调用内核接口时发生阻塞,导致 TimeCheck 检测超时异常而崩溃,但并没有实质性的证据证明是 kernel 层出现问题导致的崩溃,因此这里我们继续看一下 TimeCheck 的检测原理。 一、TimeCheck机制 T…

飞机大战小游戏

1.视觉设计&#xff1a;采用柔和的蓝紫色渐变背景&#xff0c;营造梦幻感飞机、敌机和子弹使用柔和的糖果色调添加了粒子爆炸效果&#xff0c;增强视觉反馈星星收集物增加游戏趣味性2.游戏机制&#xff1a;玩家使用左右方向键控制飞机移动空格键发射子弹P键暂停游戏击落敌机获得…

Linux 启动服务脚本

1. 创建命令文件# 创建可执行文件 touch 文件名称 例&#xff1a; touch stopServer.sh2. 命令文件授权# 授权文件可执行权限 chmod 777 文件名称 例&#xff1a; chmod 777 stopServer.sh3. 停止服务命令编写#!/bin/bash# 获取进程号 pidps -ef | grep -- /mnt/apache-tomcat-…

【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置

文章目录34. 在排序数组中查找元素的第一个和最后一个位置描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析双重二分查找详解左边界查找过程右边界查找过程算法流程图边界情况分析各种解法对比二分查找变种详解时间复…

【网络编程】WebSocket 实现简易Web多人聊天室

一、实现思路 Web端就是使用html JavaScript来实现页面&#xff0c;通过WebSocket长连接和服务器保持通讯&#xff0c;协议的payload使用JSON格式封装 服务端使用C配合第三方库WebSocket和nlonlohmann库来实现 二、Web端 2.1 界面显示 首先&#xff0c;使用html来设计一个…

AI 驱动、设施扩展、验证器强化、上线 EVM 测试网,Injective 近期动态全更新!

作为一个专注于金融应用、且具有高度可互操作性的高性能 Layer-1 区块链&#xff0c;Injective 自诞生以来便为开发者提供有即插即用的技术模块&#xff0c;以便开发者能够更好地搭建新一代 Web3 金融类应用。谈及项目发展的愿景和基本定位&#xff0c;创始团队曾提到希望 Inje…

Qt-----初识

1. 什么是Qt定义&#xff1a;Qt是一个跨平台的应用程序和用户界面框架&#xff0c;主要用于开发具有图形用户界面的应用程序&#xff0c;同时也支持非GUI程序的开发。 编程语言&#xff1a;主要使用C&#xff0c;但也提供了对Python&#xff08;PyQt&#xff09;、JavaScript&a…

理解微信体系中的 AppID、OpenID 和 UnionID

前言: 在开发微信相关的服务(如小程序,公众号,微信开放平台等)时,很多人都会接触到几个看起来相似但实际用途不同的额ID: AppiD, OpenID,UnionID. 搞清楚这三者的区别,是微信生态开发中的基本功,本文将从开发者视角触发,深入浅出地解释它们的关系,区别以及实际应用场景一.什么是…

FFmpeg,如何插入SEI自定义数据

FFmpeg&#xff0c;如何插入SEI自定义数据 一、什么是SEI&#xff1f; SEI&#xff08;Supplemental Enhancement Information&#xff0c;补充增强信息&#xff09;是H.264/H.265视频编码标准中的一种元数据载体&#xff0c;它允许在视频流中嵌入额外的信息&#xff0c;如时…

为什么分类任务偏爱交叉熵?MSE 为何折戟?

在机器学习的世界里&#xff0c;损失函数是模型的“指南针”——它定义了模型“好坏”的标准&#xff0c;直接决定了参数优化的方向。对于分类任务&#xff08;比如判断一张图片是猫还是狗&#xff09;&#xff0c;我们通常会选择交叉熵作为损失函数&#xff1b;而在回归任务&a…

[echarts]横向柱状图

前言 接到一个需求&#xff0c;需要展示一个横向的柱状图&#xff0c;按数量从大到小排序&#xff0c;并定时刷新 使用react配合echarts进行实现。 react引入echarts import React, { useEffect, useRef } from react; import * as echarts from echarts; import DeviceApi fro…

【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务

​​引言​​ 如果你经常被 Docker 镜像拉取、GitHub 文件下载的龟速折磨&#xff0c;又不想依赖第三方加速服务&#xff08;担心稳定性或隐私&#xff09;&#xff0c;今天分享的 ​​HubProxy​​ 可能正是你需要的。这个开源工具用一行命令就能部署&#xff0c;以极低资源消…

java web jsp jstl练习

JSP 的学习。 核心功能模块 1. 源代码层 &#xff08; src &#xff09; HelloWorld &#xff1a;主程序入口领域模型 &#xff1a; domain 包含User.java和ceshi.java控制器 &#xff1a; servlet 包含登录验证和验证码相关ServletWeb表现层 &#xff08; web &#xff09; JS…