CentOS 7 系统启动

教学目标

掌握 CentOS7 启动核心流程、target 运行级别配置、grub2 管理、常见故障修复(密码重置、启动故障),理解关键命令语法与配置逻辑。

一、CentOS7 启动核心流程

1. 启动流程总览(9 步)

从开机到登录界面,系统经历「硬件初始化→引导加载→内核启动→系统初始化→用户登录」五大阶段,具体步骤如下:

  1. 接通电源:固件(UEFI/BIOS)执行开机自检(POST),检查 CPU、内存、硬盘等硬件
  2. 引导设备检测:固件按配置顺序查找启动磁盘,读取 MBR 中的 GRUB2 引导程序
  3. GRUB2 菜单:加载/boot/grub2/grub.cfg配置,显示系统选择菜单
  4. 加载内核与 initramfs:GRUB2 将内核(kernel)和临时根文件系统(initramfs)载入内存
  5. 初始化进程启动:initramfs 执行/sbin/init(指向 systemd,PID=1)
  6. 加载默认 target:systemd 启动default.target(文本 / 图形登录模式)
  7. 系统初始化:依赖sysinit.target,挂载文件系统(/etc/fstab)、激活系统服务
  8. 启动开机服务:激活multi-user.target/graphical.target关联的服务(如防火墙、定时任务)
  9. 终端登录:getty.target打开 tty1 终端,显示登录提示符

2. 核心配置文件与语法

配置文件 / 命令 作用 语法格式
/boot/grub2/grub.cfg GRUB2 主配置文件(自动生成) 不可直接编辑,需通过脚本生成
/etc/default/grub GRUB2 变量配置(超时、内核参数) 文本编辑,修改后需生成 grub.cfg
systemctl 管理 target 与服务 systemctl [命令] [target/服务名]
grub2-mkconfig 生成 GRUB2 配置文件 grub2-mkconfig -o 输出路径
dracut 生成 / 更新 initramfs 文件 dracut [选项] 目标文件 内核版本

二、target 与运行级别配置(语法 + 代码注释)

1. 核心概念

  • CentOS7 用target替代 CentOS6 的「运行级别」,通过 target 分组服务(如graphical.target包含图形界面相关服务)
  • 关键 target 对应关系:运行级别 3→multi-user.target(文本界面)、级别 5→graphical.target(图形界面)

2. 常用命令与代码解析

(1)查看当前默认 target

bash

复制代码
# 语法:systemctl get-default → 查询系统开机默认启动的target
[root@centos7 ~]# systemctl get-default
graphical.target  # 输出结果:当前默认启动图形界面
(2)设置默认 target(永久生效)

bash

复制代码
# 语法:systemctl set-default [target名] → 配置开机默认启动的target
[root@centos7 ~]# systemctl set-default multi-user.target
# 注释:将默认启动模式改为文本界面(多用户模式)
[root@centos7 ~]# reboot  # 重启系统使配置生效
(3)临时切换 target(当前会话生效)

bash

复制代码
# 语法:systemctl isolate [target名] → 不重启切换当前运行模式
[root@centos7 ~]# systemctl isolate graphical.target
# 注释:从文本界面临时切换到图形界面(无需重启)
(4)查看 target 依赖关系

bash

复制代码
# 语法:systemctl list-dependencies [target名] → 查看target关联的服务/子target
[root@centos7 ~]# systemctl list-dependencies graphical.target
graphical.target
● ├─accounts-daemon.service  # 图形界面依赖的账户管理服务
● ├─gdm.service              # 图形登录管理器服务
● └─multi-user.target        # 依赖multi-user.target(文本界面基础)
# 注释:可看出graphical.target是在multi-user.target基础上增加图形相关服务
(5)启动时临时切换 target(故障排查用)

bash

复制代码
# 步骤1:开机时按任意键中断GRUB菜单倒计时
# 步骤2:选中内核条目,按e进入编辑模式
# 步骤3:找到linux16开头的行,末尾添加参数
systemd.unit=multi-user.target  # 注释:临时启动为文本界面(仅本次生效)
# 步骤4:按Ctrl+x启动系统

三、grub2 配置与加密(语法 + 代码注释)

1. grub2 核心配置文件

  • /boot/grub2/grub.cfg:主配置文件(自动生成,禁止直接修改)
  • /etc/default/grub:变量配置文件(设置超时、内核参数)
  • /etc/grub.d/:脚本目录(按数字顺序执行,用于生成 grub.cfg)
  • /boot/grub2/user.cfg:GRUB 菜单加密密码文件

2. 常用配置场景与代码解析

(1)修改 GRUB 菜单超时时间

bash

复制代码
# 步骤1:编辑变量配置文件
[root@centos7 ~]# vim /etc/default/grub
# 语法:GRUB_TIMEOUT=数字 → 菜单停留时间(秒)
GRUB_TIMEOUT=10  # 注释:将超时时间改为10秒(默认5秒)

# 步骤2:生成新的grub.cfg(必须执行,否则修改无效)
[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
# 注释:-o 指定输出路径,/etc/grub2.cfg是/boot/grub2/grub.cfg的软链接
Generating grub configuration file ... done  # 输出成功提示

# 步骤3:重启验证
[root@centos7 ~]# reboot
(2)添加内核启动参数

bash

复制代码
# 步骤1:编辑变量配置文件
[root@centos7 ~]# vim /etc/default/grub
# 语法:GRUB_CMDLINE_LINUX="参数1 参数2 ..." → 内核启动参数
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet console=ttyS0"
# 注释:
# rhgb:启用图形化启动界面
# quiet:减少启动日志输出(仅显示重要信息)
# console=ttyS0:启动信息输出到串口ttyS0(tty1不显示启动过程)

# 步骤2:生成配置并重启
[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
[root@centos7 ~]# reboot
(3)GRUB 菜单加密(防止非法编辑)

bash

复制代码
# 步骤1:生成PBKDF2加密密码(安全加密,不存储明文)
[root@centos7 ~]# grub2-mkpasswd-pbkdf2
Enter password: redhat  # 输入要设置的GRUB密码(如redhat)
Reenter password: redhat  # 重复输入
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.xxx...  # 生成加密串(复制完整内容)

# 步骤2:创建密码文件
[root@centos7 ~]# vim /boot/grub2/user.cfg
# 语法:GRUB2_PASSWORD=加密串 → 存储加密密码
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.xxx...  # 粘贴步骤1生成的加密串

# 步骤3:生成配置并重启
[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
[root@centos7 ~]# reboot
# 验证:开机按e编辑GRUB菜单时,需输入用户名root和密码redhat
(4)修改默认启动内核

bash

复制代码
# 步骤1:查看所有启动条目
[root@centos7 ~]# grep -o "^menuentry 'CentOS L.*Core)'" /etc/grub2.cfg
menuentry 'CentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)'  # 条目1
menuentry 'CentOS Linux (0-rescue-xxx) 7 (Core)'  # 条目2(救援模式)

# 步骤2:编辑grubenv文件设置默认条目
[root@centos7 ~]# vim /boot/grub2/grubenv
saved_entry=CentOS Linux (0-rescue-xxx) 7 (Core)  # 注释:将默认条目改为救援模式

# 步骤3:生成配置并重启
[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
[root@centos7 ~]# reboot

四、常见启动故障处理(语法 + 代码注释)

1. 重置 root 密码(两种方法)

方法 1:rd.break(推荐)

bash

复制代码
# 步骤1:重启系统,按任意键中断GRUB倒计时,选中内核按e编辑
# 步骤2:找到linux16开头的行,末尾添加参数
rd.break  # 注释:在initramfs移交控制权前中断,进入急救shell
# 步骤3:按Ctrl+x启动,进入switch_root shell

# 步骤4:重新挂载/sysroot为读写模式(默认只读)
switch_root:/# mount -o remount,rw /sysroot
# 语法:mount -o remount,rw 挂载点 → 重新挂载为读写模式

# 步骤5:切换根目录(将/sysroot作为系统根目录)
switch_root:/# chroot /sysroot
# 注释:chroot后,后续操作直接作用于实际系统

# 步骤6:设置新root密码
sh-4.2# echo 123456 | passwd --stdin root
# 语法:echo 密码 | passwd --stdin 用户名 → 非交互设置密码(123456为自定义密码)

# 步骤7:处理SELinux(若开启,需重新标记文件)
sh-4.2# touch /.autorelabel
# 注释:创建.autorelabel文件,系统启动时自动重新标记SELinux上下文

# 步骤8:退出并重启
sh-4.2# exit  # 退出chroot环境
switch_root:/# exit  # 继续系统启动
# 验证:用新密码root/123456登录
方法 2:init=/bin/bash

bash

复制代码
# 步骤1:重启系统,编辑GRUB内核行,末尾添加
init=/bin/bash  # 注释:直接启动/bin/bash作为init进程,获取root shell

# 步骤2:按Ctrl+x启动,重新挂载/为读写
bash-4.2# mount -o remount,rw /

# 步骤3:清空root密码(登录后可重新设置)
bash-4.2# passwd -d root
# 语法:passwd -d 用户名 → 删除用户密码(登录无需密码)

# 步骤4:处理SELinux
bash-4.2# touch /.autorelabel

# 步骤5:启动systemd,继续系统初始化
bash-4.2# exec /usr/lib/systemd/systemd
# 验证:root无需密码登录,之后用passwd root设置新密码

2. /etc/fstab 配置错误导致启动故障

故障场景 1:设备名称写错(如 sdb1→sdb2)

bash

复制代码
# 故障现象:启动超时1分30秒,进入emergency模式
# 处理步骤:
1. 输入root密码登录emergency模式
2. 编辑/etc/fstab修正错误
[root@centos7 ~]# vim /etc/fstab
/dev/sdb1 /data01 xfs defaults 0 0  # 注释:将sdb2改回正确的sdb1
3. 验证挂载:mount -a  # 语法:mount -a → 测试/etc/fstab配置是否正确
4. 退出重启:exit  # 继续系统启动
故障场景 2:文件系统损坏

bash

复制代码
# 故障现象:启动时修复文件系统失败,进入emergency模式
# 处理步骤:
[root@centos7 ~]# xfs_repair /dev/sdb1
# 语法:xfs_repair 设备名 → 修复xfs文件系统(对应mkfs.xfs格式化的分区)
# 注释:若为ext4文件系统,用fsck.ext4 /dev/sdb1修复
[root@centos7 ~]# exit  # 修复完成后重启

3. grub2 引导故障处理

故障场景 1:MBR 引导程序损坏(446 字节被清空)

bash

复制代码
# 故障现象:开机提示"Operating System not found"
# 处理步骤(用CentOS7安装光盘启动):
1. 开机从光盘启动,选择"Troubleshooting"→"Rescue a CentOS system"
2. 选择1(Continue),系统挂载到/mnt/sysimage,按回车进入shell
3. 切换到实际系统根目录:
sh-4.2# chroot /mnt/sysimage
4. 重新安装grub2引导程序到/dev/sda(系统磁盘)
bash-4.2# grub2-install /dev/sda
# 语法:grub2-install 磁盘设备 → 安装GRUB2到MBR
Installing for i386-pc platform.
Installation finished. No error reported.  # 安装成功
5. 退出重启:exit → exit(两次退出,重启后从硬盘启动)
故障场景 2:内核文件(vmlinuz)丢失

bash

复制代码
# 故障现象:启动提示"file '/vmlinuz-xxx' not found"
# 处理步骤(用安装光盘救援模式):
1. 按上述步骤进入救援模式的chroot环境
2. 从rpm包提取内核文件(以当前内核版本为例):
bash-4.2# rpm2cpio /mnt/cdrom/Packages/kernel-3.10.0-1160.71.1.el7.x86_64.rpm | cpio -idmv ./boot/vmlinuz-xxx
# 语法:rpm2cpio rpm包 | cpio -idmv 目标文件 → 从rpm包提取指定文件
3. 复制提取的vmlinuz文件到/boot目录:
bash-4.2# cp ./boot/vmlinuz-xxx /boot/
4. 生成grub配置并重启:
bash-4.2# grub2-mkconfig -o /etc/grub2.cfg
bash-4.2# exit → exit

五、核心语法总结

命令 功能 关键参数 / 语法
systemctl 管理 target / 服务 get-default/set-default/isolate/list-dependencies
grub2-mkconfig 生成 GRUB 配置 -o 输出路径(必须指定 /etc/grub2.cfg)
grub2-install 安装 GRUB 引导程序 直接跟磁盘设备(如 /dev/sda)
grub2-mkpasswd-pbkdf2 生成 GRUB 加密密码 无参数,交互式输入密码
xfs_repair 修复 xfs 文件系统 直接跟设备名(如 /dev/sdb1)
chroot 切换根目录 chroot 目标目录(救援模式常用)
mount 挂载文件系统
相关推荐
a123560mh4 小时前
国产信创操作系统银河麒麟常见软件适配(MongoDB、 Redis、Nginx、Tomcat)
linux·redis·nginx·mongodb·tomcat·kylin
赖small强4 小时前
【Linux驱动开发】Linux MMC子系统技术分析报告 - 第二部分:协议实现与性能优化
linux·驱动开发·mmc
SongYuLong的博客4 小时前
Ubuntu24.04搭建GitLab服务器
运维·服务器·gitlab
guygg885 小时前
Linux服务器上安装配置GitLab
linux·运维·gitlab
RokFile5 小时前
SysInfoKeeper是一款面向 Linux/Unix 的硬件变动检测 CLI 工具
运维
地球没有花5 小时前
gitlab cicd 模块解释
运维·ci/cd·gitlab
百***35515 小时前
Linux(CentOS)安装 Nginx
linux·nginx·centos
小坏讲微服务5 小时前
Docker-compose搭建Docker Hub镜像仓库整合SpringBootCloud
运维·分布式·spring cloud·docker·云原生·容器·eureka
AI大模型学徒5 小时前
Docker(五)_数据根目录空间不足的原因与解决方法
运维·docker·容器
tzhou644525 小时前
Linux文本处理工具:cut、sort、uniq、tr
linux·运维·服务器