Linux运维:swap交换空间、GRUB2引导、救援模式重置root密码、fstab故障排错 swap交换分区 系统启动原理完整笔记一、swap交换空间swap交换分区在硬盘上划分一块空间充当内存后备。当物理内存耗尽时内核会把长时间不访问的内存数据冷页写入swap当程序再次需要该数据时再从swap读回物理内存。⚠️swap本质是硬盘读写速度远低于物理内存不能替代真实内存。swap工作流程程序运行数据存放在物理内存。物理内存占用接近耗尽内核筛选冷页很久没有访问的数据。将冷页数据写入swap分区释放物理内存给其他程序使用。如果冷页的数据需要被访问内核再把swap的数据重新读回物理内存。free查看内存与swapfree# 以MB为单位显示free-m字段说明字段说明Mem total物理内存总大小Mem used已经使用的内存Mem free完全空闲未使用内存shared多个进程共享内存buff/cache缓冲区、页缓存占用available应用程序可用内存最重要Swap total交换空间总大小Swap used已经使用swap大小Swap freeswap空闲大小创建swap分区方式1使用磁盘分区作为swap使用parted/fdisk/gdisk划分分区分区类型设置为linux‑swap# gpt磁盘示例创建2G大小swap分区parted/dev/sdb mklabel gptparted/dev/sdb unit MiB mkpart swap01 linux-swap12049parted/dev/sdb unit MiB printmkswap格式化swap分区mkswap/dev/sdb1# blkid可以获取swap的UUIDblkid /dev/sdb1激活、查看swap# 激活swap分区swapon/dev/sdb1# 查看所有swap设备、类型、大小、优先级swapon-s# 指定优先级数字越大优先级越高优先被使用swapon-p4/dev/sdb1取消swap激活#关闭单个swapswapoff /dev/sdb1#关闭全部swapswapoff-a/etc/fstab持久化开机自动激活swap编辑/etc/fstab推荐使用UUIDUUID2bf4e179-3648-4412-9495-3b278df4acd6 swap swap pri4 0 0生效校验#读取fstab激活所有fstab内定义的swapswapon-a补充也可以使用swapfile交换文件不需要单独分区。二、CentOS7系统完整启动原理CentOS7采用systemd作为PID 1初始化进程整体启动流程上电BIOS硬件自检 → MBR引导 → GRUB2引导菜单 → 加载内核initramfs → 内核启动systemd(PID1) → systemd执行target目标 → 启动系统服务 → mingetty登录终端1. BIOS阶段开机BIOS进行硬件POST自检检测CPU、内存、硬盘、显卡硬件是否正常。根据BIOS设置的启动顺序找到启动磁盘读取磁盘最前面512字节MBR主引导记录。2. MBR主引导记录MBR一共512字节446字节引导代码BIOS把执行权交给这里64字节4个分区表项2字节55AA结束标记代表有效MBRMBR引导代码将系统控制权转交GRUB2引导程序。3. GRUB2引导阶段读取/boot/grub2/grub.cfg弹出开机菜单支持选择不同内核版本。在开机菜单界面按e进入编辑模式可以临时修改内核启动参数。在linux16内核行末尾添加rd.break按下Ctrlx进入救援模式常用于重置root密码。相关配置文件说明/etc/default/grubgrub全局变量设置超时时间、内核启动参数。/etc/grub.d/*.cfg数字开头脚本从小到大执行拼接生成最终grub.cfg。/boot/grub2/grub.cfg真正生效引导配置禁止直接编辑通过grub2‑mkconfig生成。重新生成grub配置命令grub2-mkconfig-o/boot/grub2/grub.cfggrub设置菜单超时时间vim/etc/default/grubGRUB_TIMEOUT10#修改超时10秒#重新生成配置grub2-mkconfig-o/boot/grub2/grub.cfgrebootgrub加密防止修改启动项#生成加密密码哈希grub2-mkpasswd-pbkdf2#把生成的哈希密码写入/boot/grub2/user.cfgvim/boot/grub2/user.cfgGRUB2_PASSWORDgrub.pbkdf2.sha512.xxxxxxx#更新grub配置grub2-mkconfig-o/boot/grub2/grub.cfg4. 内核与initramfs阶段GRUB把内核vmlinuz与initramfs内存临时文件系统加载进内存。initramfs内置磁盘驱动、LVM、RAID驱动内核依靠它识别硬盘硬件。内核识别到真实根文件系统切换真正根/。内核启动用户空间第一个进程systemdPID1所有进程的父进程。5. systemd执行target目标targetsystemd的单元集合相当于运行级别。target作用poweroff.target关机reboot.target重启rescue.target救援模式基础环境尽量初始化完成用于修复故障、重置root密码emergency.target紧急模式几乎不初始化根文件系统损坏、fstab严重错误进入multi‑user.target字符终端多用户模式无图形graphical.target图形界面模式查看与修改默认开机target#查看开机默认启动目标systemctl get-default#临时切换当前系统运行目标不修改开机systemctl isolate multi-user.target#设置开机默认进入字符模式systemctl set-default multi-user.target6. 系统初始化sysinit.targetsysinit.target完成底层初始化挂载根、boot、swap文件系统加载内核模块设置系统时钟SELinux初始化。之后根据default.target并行启动各类系统服务sshd、network等。systemd最大特点并行启动服务提升开机速度。7. mingetty登录终端服务启动完毕启动mingetty终端程序弹出登录提示符等待用户输入账号密码登录系统。三、rd.break救援模式重置root密码操作步骤开机grub菜单按e编辑内核项找到linux16行行末尾添加rd.break按Ctrlx启动。此时根文件系统/sysroot是只读挂载重新挂载为读写模式mount-oremount,rw /sysroot切换真正根环境chroot/sysroot修改root密码echo新密码|passwd--stdinroot退出chroot两次exit重启系统。四、/etc/fstab故障引发启动失败/etc/fstab定义开机自动挂载设备配置写错会导致开机进入紧急模式emergency.target。故障1挂载点目录不存在fstab写的挂载点目录不存在。现象系统开机自动尝试创建目录一般不会进入紧急模式挂载失败日志告警。故障2设备UUID/设备名写错fstab填写错误UUID或者磁盘设备名。现象系统等待超时默认1分30秒超时失败进入emergency紧急模式提示输入root密码。修复输入root密码登录。vim /etc/fstab修正错误行。mount -a测试挂载是否正常。exit退出系统继续启动。故障3文件系统损坏xfs/ext4文件系统元数据损坏无法挂载。现象进入紧急模式。修复#xfs修复xfs_repair /dev/sdb1#ext4修复e2fsck-f/dev/sdb1rescue.target救援模式 vs emergency.target紧急模式对比项目rescue.target救援模式emergency.target紧急模式进入grub参数linux16行末尾加rd.breaklinux16行末尾加systemd.unitemergency.target初始化程度sysinit.target尽量完成基础服务加载最小初始化几乎不加载驱动服务根文件系统尝试挂载根默认只读ro根挂载失败才会进入该模式典型用途重置root密码、普通系统故障修复根分区损坏、fstab严重错误登录需要root密码需要root密码避坑总结swap是硬盘模拟内存性能差不能替代物理内存优先使用UUID写fstab。grub.cfg禁止直接修改修改/etc/default/grub后执行grub2‑mkconfig生成配置。rd.break救援模式重置密码必须先mount -o remount,rw /sysroot再chroot /sysroot。/etc/fstab修改完务必执行mount -a测试避免配置错误导致开机进入紧急模式。rescue救援模式适合改密码emergency紧急模式用于根分区严重损坏场景。面试速记小结swap作用内存不足把冷页换出到磁盘swapon激活、swapoff关闭fstab持久化。CentOS7启动流程BIOS → MBR → GRUB2 → kernelinitramfs → systemd(PID1) → target →服务 →登录终端。grub配置文件/etc/default/grub使用grub2‑mkconfig生成grub.cfg。rd.break重置root密码三步重新挂载读写、chroot、修改密码。fstab写错会进入emergency紧急模式修复完用mount -a校验。