前言

Linux 操作系统的引导过程是从硬件启动到用户可登录状态的核心环节,其稳定性和效率直接决定服务器的可用性。现代 Linux 系统如 OpenEuler 已采用 Systemd 作为默认初始化系统,相比传统 SysVinit 机制,支持服务并行启动,显著提升了启动速度。但引导过程中任一环节故障(如 MBR 损坏、GRUB 配置错误等)都可能导致系统无法正常启动,而服务控制与启动优化则是 Linux 运维的核心技能。本文将详细拆解 Linux 引导流程、常见故障修复、服务控制方法及启动优化技巧,结合实操命令与案例,为运维人员提供全面指导。

一、Linux 操作系统的引导过程

1.1 引导过程总览

Linux 引导过程需完成一系列初始化任务,最终为用户登录做好准备,整体分为 5 个关键阶段,各阶段职责明确、环环相扣:

阶段 核心操作 关键说明
开机自检 检测 CPU、内存、显卡、键盘等硬件 依据主板 BIOS 设置执行,检测成功后移交系统控制权(默认移交硬盘)
MBR 引导 读取硬盘第一个扇区(512 字节)的 MBR 记录 MBR 包含引导程序(446 字节)、分区表(64 字节)、结束标志(2 字节),负责传递控制权至引导文件分区或 GRUB 菜单
GRUB 菜单 显示启动菜单供用户选择 主流 Linux 使用 GRUB2 引导器,根据用户选择加载内核文件并移交控制权
加载 Linux 内核 加载预编译的二进制内核文件 内核位于/boot/vmlinuz-xxx(OpenEuler 默认路径),负责硬件资源分配与调度
init 进程初始化 加载/sbin/init程序 生成 PID=1 的 init 进程,作为所有进程的 "始祖",完成系统初始化并等待用户登录

1.2 系统初始化进程及文件

1.2.1 init 进程
  • 进程标识:Linux 进程以 PID(进程 ID)标记,init 进程是内核加载的第一个程序,PID 恒为 1。
  • 进程关系:init 进程会衍生子进程,子进程可进一步繁衍,形成系统进程树,维持系统正常运行。
  • 核心特性:不可轻易终止,通过接收执行参数实现系统运行状态切换。
1.2.2 Systemd 概述
  • 替代关系:CentOS7 及 OpenEuler 等现代系统中,Systemd 取代传统 SysVinit,/sbin/init/lib/systemd/systemd的链接文件。
  • 核心优势:支持服务并行启动,大幅提升开机效率。
  • 管理单元(Unit):Systemd 将管理的资源划分为多种单元类型,核心单元如下表:
单元类型 描述
socket 描述进程间通信的套接字
device 描述内核识别的设备文件
Mount 描述文件系统挂载点
automount 描述自动挂载点
swap 描述内存交换设备或文件
Path 描述文件系统中的文件或目录
timer 描述定时器(类似 cron 调度)
Snapshot 保存 systemd 的状态
slice 描述基于 Cgroup 的进程组管理
target 描述一组 systemd 单元(模拟传统运行级别)
1.2.3 运行级别与 target 映射

为兼容传统 SysVinit,Systemd 通过 target 模拟 7 种运行级别,对应关系如下:

运行级别 Systemd 的 target 用途说明
0 poweroff.target 关闭主机
1 rescue.target 单用户维护模式
2 multi-user.target 用户定义 / 域特定运行级别,默认等同于 3
3 multi-user.target 字符界面多用户模式
4 multi-user.target 用户定义 / 域特定运行级别,默认等同于 3
5 graphical.target 图形界面多用户模式(提供桌面环境)
6 reboot.target 重启主机

二、排除系统启动类故障

Linux 启动涉及 MBR、GRUB、配置文件等多个环节,故障后需通过备份恢复、急救模式等方式修复,以下是常见故障的实操解决方案。

2.1 MBR 扇区故障

MBR(主引导记录)位于硬盘第一个扇区(512 字节),包含引导程序和分区表,损坏后会导致系统无法启动(黑屏或提示 "Operating system not found")。

2.1.1 故障处理流程(备份→模拟破坏→恢复)
操作环节 执行命令 关键说明
准备工作 mkdir /backupmount /dev/sdb1 /backup 新增硬盘分区 sdb1 并挂载到 /backup(用于存放备份文件)
备份 MBR dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1 备份第一块硬盘(sda)的 MBR 扇区到备份目录
验证备份 hexdump -C /backup/sda.mbr.bak 查看备份文件的十六进制内容,确认备份有效
模拟故障 dd if=/dev/zero of=/dev/sda bs=512 count=1 用零数据覆盖 MBR 扇区,模拟故障(务必先备份)
进入急救模式 1. 用 OpenEuler 安装光盘引导2. 选择 "Troubleshooting"3. 选择 "Rescue a OpenEuler system"4. 选择 "1" 挂载系统分区到 /mnt/sysimage 获得可执行命令的 Shell 环境
恢复 MBR mkdir /tmpdirmount /dev/sdb1 /tmpdirdd if=/tmpdir/sda.mbr.bak of=/dev/sda 挂载备份分区,将备份数据恢复到 sda 硬盘
重启系统 exit 退出急救 Shell,系统自动重启,恢复正常

2.2 GRUB 引导故障

GRUB 是系统引导器,当/boot/grub2/grub.cfg配置文件丢失、配置错误或 MBR 中的引导程序损坏时,启动后会出现 "grub>" 提示符,无法继续启动。

2.2.1 临时修复(grub > 提示符下直接引导)

bash

运行

grub> insmod xfs  # 加载文件系统模块(根据实际文件系统调整,如ext2、btrfs)
grub> linux16 /vmlinuz-6.6.0-72.0.0.76.oe2403sp1.x86_64 root=/dev/mapper/openeuler-root ro crashkernel=auto rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap rhgb quiet LANG=en_US.UTF-8  # 指定内核文件路径及根分区
grub> initrd16 /initramfs-6.6.0-72.0.0.76.oe2403sp1.x86_64.img  # 指定临时系统镜像文件
grub> boot  # 执行引导
2.2.2 永久修复(急救模式下重建配置)
操作步骤 执行命令 关键说明
进入急救模式 同 2.1.1 中急救模式进入步骤 挂载系统分区到 /mnt/sysimage
切换根环境 chroot /mnt/sysimage 将 /mnt/sysimage 设为当前根目录,操作目标系统文件
修复 / 重建配置文件 vi /boot/grub2/grub.cfg # 直接编辑修复或grub2-mkconfig -o /boot/grub2/grub.cfg # 重新生成配置文件 可参考同版本正常系统的 grub.cfg 内容
修复 MBR 中的引导程序 grub2-install /dev/sda 若 MBR 中引导程序损坏,需重新安装 GRUB 到 sda 硬盘
退出并重启 exitreboot 配置生效,系统正常启动
2.2.3 双系统冲突修复

若先装 Linux 后装 Windows,Windows 会覆盖 MBR 中的 GRUB 引导程序,导致 Linux 无法启动。解决方案:

  1. 用 OpenEuler 安装光盘进入急救模式;
  2. 执行chroot /mnt/sysimage切换根环境;
  3. 执行grub2-install /dev/sda重新安装 GRUB;
  4. 重启后 GRUB 菜单会自动识别 Windows 系统。

2.3 遗忘 root 用户的密码

root 密码遗忘会导致无法执行管理员操作,需通过急救模式重设:

操作步骤 执行命令 关键说明
进入急救模式 同 2.1.1 中急救模式进入步骤 挂载系统分区到 /mnt/sysimage
切换根环境 chroot /mnt/sysimage 操作目标系统的用户配置
重设密码 passwd root # 直接设置新密码或vi /etc/shadow # 清空 root 密码字段(删除第二个冒号后到下一个冒号前的内容) 清空密码后重启可空密码登录
退出并重启 exitreboot 用新密码登录 root 用户

三、服务控制及优化启动过程

3.1 系统服务控制

OpenEuler 中系统服务的控制脚本默认存放于/usr/lib/systemd目录,通过systemctl命令可实现服务的启动、停止、重启等精细化控制。

3.1.1 systemctl 命令语法与常用参数
控制类型 命令格式 功能说明 示例
启动 systemctl start 服务名称 运行指定服务 systemctl start sshd.service
停止 systemctl stop 服务名称 终止指定服务 systemctl stop httpd.service
重启 systemctl restart 服务名称 先停止再启动服务(释放资源) systemctl restart NetworkManager
重载 systemctl reload 服务名称 不停止服务,仅刷新配置 systemctl reload httpd.service
查看状态 systemctl status 服务名称 显示服务运行状态、加载情况等 systemctl status sshd.service
3.1.2 实操注意事项
  • 生产环境中避免轻易执行stoprestart操作,以免中断客户端访问;
  • 若仅需应用新配置,优先使用reload参数(如 httpd、nginx 等服务);
  • 服务名称可省略.service后缀(如systemctl start sshd等同于systemctl start sshd.service)。

3.2 切换运行级别

不同运行级别对应不同的服务组合,通过切换运行级别可优化资源占用(如服务器无需图形界面,可切换至字符模式)。

3.2.1 查看运行级别
查看目标 命令 示例输出
当前运行级别 runlevel 5 3(表示从级别 5 切换到 3)
默认运行级别 systemctl get-default graphical.target(图形模式)
3.2.2 临时切换运行级别
目标模式 命令(方式一:init 命令) 命令(方式二:systemctl 命令)
字符模式(级别 3) init 3 systemctl isolate multi-user.target
图形模式(级别 5) init 5 systemctl isolate graphical.target
关机(级别 0) init 0 systemctl poweroff
重启(级别 6) init 6 systemctl reboot
3.2.3 永久切换默认运行级别

通过创建软链接修改默认运行级别,示例:将默认运行级别从图形模式改为字符模式

bash

运行

# 查看当前默认级别
systemctl get-default
# 输出:graphical.target

# 创建软链接,强行覆盖原有链接
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

# 验证修改结果
systemctl get-default
# 输出:multi-user.target

3.3 优化启动过程

Linux 默认启用的服务多达 100 余种,其中部分冗余服务会占用系统资源,需根据实际需求禁用不必要的开机自启服务。

3.3.1 常见系统服务及优化建议
服务名称 用途简介 建议状态 适用场景
crond 按预定周期执行计划任务 开启 所有需要定时任务的场景(如日志轮转、数据备份)
kdump 记录内核崩溃时的内存信息 关闭 非关键业务服务器(节省内存资源)
lvm2-monitor LVM 管理及监控 开启 使用 LVM 逻辑卷的系统
netfs 访问网络文件系统(如 NFS 共享) 开启 需要挂载网络共享文件夹的场景
restored SELinux 文件监控和恢复 关闭 未启用 SELinux 或无需该功能的系统
rpcgssd 管理 NFS 访问中的客户程序语境 关闭 不使用 NFS 服务的系统
smartd 监控硬盘状态并发送故障报告 开启 所有服务器(预防硬盘故障)
sshd 提供远程登录管理功能 开启 需远程维护的服务器
rsyslog 记录内核和系统日志 开启 所有服务器(故障排查必备)
vsftpd FTP 文件上传下载服务 关闭 不提供 FTP 服务的系统
bluetooth 蓝牙服务 关闭 服务器环境(极少使用蓝牙)

注:优化原则为 "按需启用",例如文件服务器需开启 smb 服务,Web 服务器需开启 httpd/nginx 服务。

3.3.2 优化开机自动加载的服务
方法一:使用 ntsysv 工具(交互式界面)
  • 工具特点:字符模式下的仿图形界面,支持批量配置多个服务的启动状态。
  • 命令格式:

    bash

    运行

    ntsysv  # 配置当前运行级别的服务
    ntsysv --level 35  # 同时配置级别3(字符模式)和5(图形模式)的服务
    
  • 操作说明:
    1. 按↑、↓方向键选择服务;
    2. 按空格键设置启动状态([*] 表示开机启动,[] 表示关闭);
    3. 按 F1 键查看服务详情;
    4. 按 Tab 键切换 "确定"/"取消" 按钮,回车确认。
方法二:使用 systemctl 工具(命令行方式)
  • 命令格式与常用选项:
操作目标 命令 示例
开机自动启动 systemctl enable 服务名称 systemctl enable httpd.service
开机自动关闭 systemctl disable 服务名称 systemctl disable vsftpd.service
查看开机启动状态 systemctl is-enabled 服务名称 systemctl is-enabled sshd.service(输出 enabled/disabled)
查看已激活的服务 systemctl list-units --type=service 列出当前运行的所有服务
  • 示例:配置 apache 服务开机自启

    # 开启开机自启
    systemctl enable httpd.service
    # 输出:Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
    
    # 验证状态
    systemctl is-enabled httpd.service
    # 输出:enabled
    
    # 关闭开机自启
    systemctl disable httpd.service
    # 输出:Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
    

四、总结

本文全面解析了 Linux 系统的引导机制、启动故障排查、服务控制及启动优化四大核心内容。引导过程中,MBR、GRUB、内核加载和 Systemd 初始化是关键环节,任一环节故障需通过备份恢复、急救模式等方式精准处理;服务控制方面,systemctl命令实现了服务的精细化管理,结合运行级别切换可有效优化资源分配;启动优化则需依据业务需求,通过 ntsysv 或systemctl工具禁用冗余服务,提升系统运行效率。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐