Linux实战Swap交换空间 CentOS7系统启动流程 故障修复完整笔记引言本篇适合CentOS7运维入门同学。读完本篇博客你将掌握计算机存储器层级原理理解虚拟内存、Swap交换空间是什么学会创建、激活、持久化配置swapCentOS7完整开机启动流程搞懂BIOS/UEFI → GRUB2 → kernel → initramfs → systemd整套链路systemd的target目标单元传统运行级别与target对应关系临时切换、修改开机默认启动目标两种重置root密码实操方法rd.break、init/bin/bashSELinux的.autorelabel作用/etc/fstab配置错误导致开机进入emergency紧急模式常见故障复现与修复GRUB2引导配置、菜单加密、内核参数修改MBR引导损坏、内核文件丢失故障修复思路拓展LUKS磁盘加密简单实操理解vmlinuz与initramfs分开设计的底层原因。本章大量内容属于系统底层故障排错虚拟机反复实验效果最好不建议在生产真机随意测试密码重置、破坏引导的操作。前置说明✅环境CentOS7虚拟机root权限建议额外添加一块测试硬盘用于swap分区实验 ✅前置知识熟悉磁盘分区、mkfs格式化、mount挂载、了解/etc/fstab作用 ✅新手友好零基础可以跟着实操底层概念会使用比喻通俗讲解。代码块中#后面是注释不要复制输入终端。 ⚠️密码重置、破坏grub引导属于高危操作仅在测试虚拟机练习不要操作业务服务器一、存储器层级与Swap交换空间比喻计算机存储像金字塔越靠上速度越快、价格越贵、容量越小。CPU寄存器 → CPU高速缓存 → 物理内存(RAM) → 硬盘/U盘辅助存储器。1.1 物理内存与虚拟内存基础内存最小单位叫page页CentOS7默认一页大小4KiB。进程使用虚拟地址由CPU内部MMU内存管理单元转换成真实物理内存地址。为什么不直接访问物理内存虚拟内存 物理内存 Swap交换磁盘空间内存可以“超配”解决内存碎片化进程看到连续虚拟地址实际物理内存可以东一块西一块。1.2 什么是Swap交换空间Swap就是Linux的虚拟内存相当于Windows的pagefile.sys虚拟内存页面文件放在磁盘上。物理内存紧张的时候内核把暂时不用的内存数据写到swap磁盘分区腾出物理内存给正在活跃的程序程序再次需要这部分数据再从swap读回内存。⚠️swap只是临时救急手段磁盘速度远慢于真实内存业务真正内存不足优先加物理内存不要过度依赖swap。1.3 查看内存与swapfree-m# -m 以MB为单位查看内存、swap整体使用情况字段解释Mem物理内存 total总大小、used已用、free空闲、buff/cache缓冲区缓存Swap交换分区 total总大小、used已经使用、free空闲swap。1.4 swap空间参考规划物理内存大小建议swap大小休眠hibernate需要swap大小≤2GiB2倍物理内存3倍物理内存2‑8GiB等于物理内存2倍物理内存8‑64GiB至少4GiB1.5倍物理内存64GiB至少4GiB不建议开启休眠笔记本台式机hibernate休眠关机前把全部内存内容写入swap开机从swap恢复内存状态因此swap必须大于等于内存。1.5 创建、激活swap分区# 1. 在sdb磁盘创建gpt分区表分出2G的linux‑swap类型分区parted/dev/sdb mklabel gptparted/dev/sdb unit MiB mkpart swap01 linux-swap12049# 2. mkswap格式化swap分区mkswap/dev/sdb1# 3. 激活swap-p指定优先级数字越大优先级越高swapon-p4/dev/sdb1# 查看当前所有swap设备swapon-s1.6 关闭swapswapoff /dev/sdb1# 关闭单个swap分区swapoff-a# 关闭/etc/fstab里面全部swap1.7 开机自动激活swap写入/etc/fstab获取swap分区UUIDblkid /dev/sdb1编辑/etc/fstab增加一行UUID这里复制你的swap的UUIDswap swappri400生效验证swapon-a# 读取fstab激活所有swapswapon-spri4代表swap优先级数值越大内核优先使用这个swap。二、CentOS7完整系统启动流程完整流程通电POST自检 → UEFI/BIOS固件 → GRUB2引导器 → 加载vmlinuz内核initramfs临时内存文件系统 → systemd(PID1) → 加载target目标启动服务出现登录界面。POST上电自检BIOS/UEFI固件初始化硬件选择启动磁盘GRUB2引导加载器读取磁盘的grub.cfg展示内核启动菜单GRUB加载vmlinuz内核镜像initramfs临时内存文件系统把控制权交给内核initramfs里面包含各种硬件驱动识别硬盘、LVM等硬件内核切换真正根文件系统启动systemdsystemd是CentOS7的PID1一号进程systemd加载default.target默认目标挂载/etc/fstab里面所有文件系统启动各项系统服务启动getty终端出现登录提示符。重要文件/boot/grub2/grub.cfggrub主配置禁止直接手动修改通过grub2‑mkconfig生成/etc/default/grubgrub变量配置/etc/grub.d/脚本片段生成grub.cfg的素材initramfs内存临时文件系统存放启动阶段必须的驱动脚本。三、systemd target启动目标替代传统运行级别CentOS7不再使用传统sysvinit运行级别数字改用target单元target可以把一组服务打包成一个整体。传统运行级别systemd target说明0—关机halt1rescue.target / emergency.target单用户救援模式无网络root登录用于修复故障2—多用户无NFSCentOS7很少用3multi‑user.target文本命令行多用户模式无图形界面4—预留未使用5graphical.target图形桌面模式6—系统重启reboot操作命令# 查看当前开机默认目标systemctl get-default# 修改开机默认进入文本模式systemctl set-default multi-user.target# 临时立刻切换到图形不需要重启systemctl isolate graphical.target# 查看target之间依赖关系systemctl list-dependencies graphical.target systemctl list-dependencies sshd.service--reverse启动时临时修改内核参数进入救援模式开机grub菜单按e编辑内核条目在linux16行末尾追加参数例如systemd.unitmulti-user.target按Ctrlx用修改后的参数启动系统。这个修改临时生效重启丢失用于系统故障排查。四、两种重置root密码方法虚拟机实操⚠️仅测试虚拟机使用两种方法都需要在grub启动菜单修改内核参数。方法一rd.break方式重启grub界面按e编辑内核在linux16行末尾增加rd.break按Ctrlx启动此时真实根文件系统只读挂载到 /sysrootmount-oremount,rw /sysroot# 重新挂载为读写模式chroot/sysroot# 切换到真实系统根echo新密码|passwd--stdinroot# SELinux开启必须创建.autorelabel否则登录异常touch/.autorelabelexitexit# 两次exit系统继续启动会执行SELinux重新标记自动重启一次方法二init/bin/bash方式grub编辑内核linux16行末尾追加init/bin/bashCtrlx启动直接得到root shell根文件系统只读挂载在/mount-oremount,rw /# 重新挂载根为读写passwd-droot# 删除root密码登录不需要密码touch/.autorelabel# selinux标记文件# 启动真正systemd继续完整系统启动exec/usr/lib/systemd/systemd关键点SELinux开启环境必须创建/.autorelabel文件否则修改完密码无法正常登录系统。五、/etc/fstab配置错误导致开机进入emergency紧急模式/etc/fstab写错会开机超时进入emergency救援shell输入root密码登录修复。故障场景1挂载点目录被删除现象开机可以进入系统只是该条目挂载失败。修复要么恢复目录注释fstab错误行执行mount -a。故障场景2设备名称写错设备不存在现象开机等待1分30秒超时进入emergency救援模式。 修复输入root密码登录vim编辑/etc/fstab注释错误那一行exit继续系统启动排查正确UUID修正fstab配置。故障场景3磁盘文件系统损坏现象启动尝试fsck修复失败进入emergency模式# xfs修复xfs_repair /dev/sdb1exit实操好习惯写完fstab执行mount -a测试确认全部挂载正常再重启服务器防止开不了机。六、GRUB2引导配置与故障修复6.1 grub基础配置不要直接修改/boot/grub2/grub.cfg修改/etc/default/grub、/etc/grub.d/*脚本修改完成执行grub2‑mkconfig -o /boot/grub2/grub.cfg生成配置。# 修改grub菜单超时时间vim/etc/default/grubGRUB_TIMEOUT10# 重新生成配置文件grub2-mkconfig-o/boot/grub2/grub.cfgreboot内核参数常用说明rhgb图形化开机界面quiet减少开机输出日志ro启动初期根文件系统只读挂载。6.2 GRUB菜单加密防止开机修改内核参数# 生成PBKDF2加密密码哈希grub2-mkpasswd-pbkdf2# 写入 /boot/grub2/user.cfgvim/boot/grub2/user.cfgGRUB2_PASSWORD复制生成的长哈希字符串# 更新grub配置grub2-mkconfig-o/boot/grub2/grub.cfg加密后grub按e编辑内核启动项需要输入密码。6.3 MBR引导程序损坏故障故障现象硬盘446字节引导程序被清零开机无法从硬盘启动。 修复步骤CentOS7安装光盘/U盘救援模式光盘启动选择 Troubleshooting → Rescue a CentOS system系统识别硬盘系统chroot切换到硬盘系统根/mnt/sysimagechroot/mnt/sysimage grub2-install /dev/sda# 在硬盘sda重建MBR引导程序exitexit6.4 /boot内核vmlinuz或者initramfs文件丢失现象启动提示找不到内核文件。 修复进入救援模式从rpm包提取对应内核文件恢复到/boot目录退出重启。七、拓展LUKS磁盘加密防止硬盘被拆走读取数据LUKSLinux统一密钥设置对整个分区加密注意不加密/boot分区/boot仍然明文。# 安装工具yuminstallcryptsetup-y# 初始化加密分区会清空分区全部数据cryptsetup luksFormat /dev/sdb1# 打开加密分区映射设备/dev/mapper/crypt_diskcryptsetupopen/dev/sdb1 crypt_disk# 格式化挂载mkfs.xfs /dev/mapper/crypt_diskmkdir/mnt/encryptedmount/dev/mapper/crypt_disk /mnt/encrypted# 卸载关闭加密umount/mnt/encrypted cryptsetup close crypt_disk开机自动加密挂载需要配置/etc/crypttab配合/etc/fstab。新手常见坑合集❌swap分区配置fstab忘记写pri优先级swap使用顺序不符合预期✅fstab的swap字段可以配置pri数字数字越大优先使用。❌重置root密码SELinux开启忘记创建/.autorelabel✅系统启动SELinux不会重新标记/etc/shadow修改的密码不生效必须touch /.autorelabel。❌直接手动编辑/boot/grub2/grub.cfg系统升级内核配置被覆盖丢失✅修改/etc/default/grub运行grub2‑mkconfig生成不要直接改cfg。❌写完/etc/fstab直接重启没有执行mount -a测试服务器开机进入emergency紧急模式✅修改fstab之后务必执行mount -a验证没有报错。❌rd.break重置密码忘记执行mount -o remount,rw /sysroot只读文件系统无法修改密码✅rd.break环境/sysroot默认只读必须重新挂载读写。❌swapoff -a / swapon -a操作误以为会修改/etc/fstab✅swapon‑a只是读取fstab执行激活不会修改fstab文件本身持久化要手动编辑fstab。❌MBR修复救援模式忘记chroot直接执行grub2‑install写入到U盘救援介质而不是硬盘系统。✅救援模式一定要chroot /mnt/sysimage再执行grub2‑install。总结Swap交换空间磁盘充当虚拟内存缓解物理内存不足mkswap格式化swapswapon激活写入/etc/fstab实现开机自动挂载swap不能替代物理内存。CentOS7启动流程BIOS/UEFI → GRUB2 → vmlinuz内核initramfs → systemdtarget目标替代传统运行级别multi‑user.target文本graphical.target图形。重置root密码rd.break、init/bin/bash两种方案SELinux环境必须touch /.autorelabel。/etc/fstab故障写错设备、挂载点、文件系统损坏会进入emergency救援模式写完fstab务必mount -a测试。GRUB2不直接修改grub.cfg修改default/grub使用grub2‑mkconfig生成支持密码加密MBR引导损坏用安装光盘救援模式修复。LUKS分区加密实现硬盘被拆走之后数据无法直接读取。思考题互动swap的作用是什么业务内存不足优先加大内存还是加大swapmulti‑user.target 和 graphical.target分别代表什么如何设置开机默认进入文本模式rd.break重置root密码为什么要执行touch /.autorelabel修改完/etc/fstab之后为什么建议执行mount -a再重启机器MBR引导446字节引导程序损坏该如何修复欢迎评论区分享你的踩坑经历建议虚拟机完整复现启动故障实验加深理解