Linux 交换空间管理系统启动原理简介讲解计算机存储器层级、Swap 交换分区原理与实操CentOS7 完整开机启动流程systemd target 运行目标两种重置 root 密码实操/etc/fstab 启动故障GRUB2 引导修复等虚拟机动手练习。一、存储器层级与虚拟内存基础计算机存储器遵循金字塔层级速度越快成本越高、容量越小。CPU 寄存器CPU 内部速度最快容量极小存放运算临时数据。CPU Cache 高速缓存CPU 芯片内置SRAM容量小速度接近 CPU。主内存 RAM物理内存DDR 内存速度中等断电数据丢失。辅助存储器磁盘 / SSD/U 盘速度慢容量巨大断电持久保存数据。工作流程CPU 读取数据优先寄存器 → Cache → 物理内存 → 磁盘。虚拟内存、MMU 内存管理单元内存被切分为固定大小page 页标准 4KiB。进程使用虚拟地址空间不是直接访问物理内存。MMU 内存管理单元负责把进程虚拟地址映射到物理内存或者 Swap 交换分区。为什么不用直接物理地址虚拟内存 物理内存 Swap 交换空间扩大可用内存。解决内存碎片化进程看到的虚拟地址是连续底层物理内存可以零散分布。二、Swap 交换空间管理Swap 就是 Linux 的虚拟内存等同于 Windows pagefile.sys。内存吃紧时把内存中暂时不用的页写到磁盘 Swap腾出物理内存给活跃进程。 ⚠️Swap 是磁盘速度远慢于物理内存不能替代加内存。查看内存与 Swap[rootcentos7 ~]# free -m total used free shared buff/cache available Mem: 3931 322 3447 11 161 3401 Swap: 3967 0 3967字段说明Mem物理内存Swap交换分区available系统真正可以分配给程序的可用内存。Swap 大小参考建议表格物理内存建议 Swap 大小休眠 Hibernate 所需 Swap2GiB 以内2 倍 RAM3 倍 RAM2‑8GiB等于 RAM2 倍 RAM8‑64GiB至少 4GiB1.5 倍 RAM大于 64GiB至少 4GiB不建议休眠笔记本开启休眠功能Swap 容量必须大于物理内存。创建 Swap 分区实操执行用户root# 1.创建gpt磁盘标签 [rootcentos7 ~]# parted /dev/sdb mklabel gpt # 2.创建swap分区单位MiB1~2049MiB [rootcentos7 ~]# parted /dev/sdb unit MiB mkpart swap01 linux-swap 1 2049 # 查看分区 [rootcentos7 ~]# parted /dev/sdb unit MiB print # 格式化swap文件系统 [rootcentos7 ~]# mkswap /dev/sdb1激活、查看、关闭 Swap-p设置优先级数值越大优先级越高。 执行用户root# 激活swap设置优先级4 [rootcentos7 ~]# swapon -p 4 /dev/sdb1 # 查看所有swap设备 [rootcentos7 ~]# swapon -s # 关闭指定swap [rootcentos7 ~]# swapoff /dev/sdb1 # 关闭全部/etc/fstab里面定义的swap [rootcentos7 ~]# swapoff -a # 激活全部fstab定义swap [rootcentos7 ~]# swapon -a开机自动挂载 Swap写入 /etc/fstab获取分区 UUID[rootcentos7 ~]# blkid /dev/sdb1编辑/etc/fstab追加一行UUID2bf4e179-3648-4412-9495-3b278df4acd6 swap swap pri4 0 0验证[rootcentos7 ~]# swapon -a [rootcentos7 ~]# swapon -s三、CentOS7 完整系统启动流程CentOS7 使用 UEFI/BIOS GRUB2 initramfs systemd (PID1)POST 开机自检BIOS/UEFI 固件硬件初始化。固件按照启动顺序读取磁盘的 GRUB2 引导程序。GRUB2 读取/boot/grub2/grub.cfg展示内核选择菜单。GRUB2 加载内核 vmlinuz 与 initramfs 内存镜像到内存。内核执行解压 initramfs加载磁盘、LVM 等驱动。initramfs 执行/sbin/initCentOS7 中是 systemdPID1。systemd 读取 default.target 目标启动 sysinit.target挂载 /etc/fstab 里面所有文件系统启动日志服务。启动对应 target 下所有 systemd 服务启动 getty打开终端 tty等待用户登录。关键文件 / 工具GRUB 配置模板/etc/default/grub、/etc/grub.d/*生成 grub 配置grub2‑mkconfig -o /boot/grub2/grub.cfginitramfs 工具dracut重建内存镜像四、systemd Target 运行目标传统 SysVinit 0‑6 运行级别CentOS7 用 target 单元实现。表格传统运行级别systemd target功能说明0poweroff.target关机1rescue.target / emergency.target单用户救援模式root 登录无网络修复系统2多用户无 NFS3multi‑user.target文本多用户模式命令行无图形界面4预留用户自定义5graphical.target图形桌面模式6reboot.target重启# 查看当前开机默认target[rootcentos7 ~]# systemctl get-default# 设置开机默认文本模式[rootcentos7 ~]# systemctl set-default multi-user.target# 设置开机默认图形模式[rootcentos7 ~]# systemctl set-default graphical.target# 临时切换到文本模式立刻生效不修改开机默认[rootcentos7 ~]# systemctl isolate multi-user.target# 查看target依赖关系[rootcentos7 ~]# systemctl list-dependencies graphical.target# 反向查看看哪个target需要sshd服务[rootcentos7 ~]# systemctl list-dependencies sshd.service --reverse启动时临时修改 target开机 GRUB 菜单按e编辑内核行末尾添加systemd.unitrescue.targetCtrlx 启动仅本次开机生效用于排错。五、两种方式重置 root 密码⚠️虚拟机实操物理服务器需要控制台ssh 远程无法操作。方法 1rd.break 方式重启机器按任意键中断启动加载器菜单倒计时Enter除外GRUB 菜单按e编辑内核启动项。找到linux16开头一行行末尾添加参数rd.break按Ctrlx启动。此时真实根文件系统只读挂载到 /sysroot# 重新挂载为读写switch_root:/# mount -o remount,rw /sysroot# chroot切换进入真实系统环境switch_root:/# chroot /sysroot# 修改root密码sh-4.2# echo 123 | passwd --stdin root# SELinux开启环境必须创建autorelabel开机自动重新打标签sh-4.2# touch /.autorelabel# 两次exit退出系统重启SELinux自动重标记会耗时耐心等待sh-4.2# exitswitch_root:/# exit方法 2init/bin/bashGRUB 菜单按e编辑linux16 行末尾追加init/bin/bashCtrlx 启动。直接进入 root shell根文件系统只读挂载在/# 重新挂载根为读写bash-4.2# mount -o remount,rw /# 清空root密码登录无需密码bash-4.2# passwd -d root# SELinux环境创建标记文件bash-4.2# touch /.autorelabel# 执行systemd正常继续完整启动流程bash-4.2# exec /usr/lib/systemd/systemd注意SELinux 关闭的环境可以不用/.autorelabel生产服务器默认 SELinux 开启必须创建。六、/etc/fstab 引发系统启动故障排错/etc/fstab定义开机自动挂载。配置写错系统启动进入 emergency 救援模式。故障 1设备名字写错设备不存在示例错误 fstab/dev/sdb2 /data01 xfs defaults 0 0实际没有 sdb2 设备。 现象开机等待 1 分 30 秒超时进入 emergency 救援 shell。 处理输入 root 密码登录 shellvim /etc/fstab注释错误行或者修改为正确 UUID / 设备名exit继续启动系统。故障 2文件系统损坏磁盘元数据损坏开机 fsck 检查失败进入 emergency 模式。# xfs修复 [rootcentos7 ~]# xfs_repair /dev/sdb1 # ext4修复 [rootcentos7 ~]# e2fsck -f /dev/sdb1修复完成exit继续启动。最佳实践fstab 里面优先使用 UUID不要写 /dev/sdb1 这种设备名磁盘顺序变化设备名会变。七、GRUB2 引导管理器配置与故障修复BIOS 系统grub2 配置文件/boot/grub2/grub.cfg禁止直接编辑通过模板文件生成。模板文件/etc/default/grub全局变量超时时间、内核参数/etc/grub.d/*脚本按数字顺序执行生成菜单执行用户root# 修改完模板重新生成grub配置 [rootcentos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg常用配置示例编辑/etc/default/grubGRUB_TIMEOUT10 GRUB_CMDLINE_LINUXrd.lvm.lvcentos/root rd.lvm.lvcentos/swap rhgb quiet参数说明rhgb图形化开机进度条quiet屏蔽大量启动日志输出net.ifnames0关闭一致性网卡命名传统 eth0ro启动初期根文件系统只读挂载GRUB 设置密码防止开机菜单被篡改执行用户root# 生成pbkdf2加密密码哈希 [rootcentos7 ~]# grub2-mkpasswd-pbkdf2把生成的哈希字符串写入/boot/grub2/user.cfgGRUB2_PASSWORDgrub.pbkdf2.sha512.xxxxxxxxxxx重新生成配置[rootcentos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg效果开机按 e 编辑内核启动项需要输入用户名 root 和设置的密码。故障MBR 引导记录损坏现象开机 BIOS 无法找到系统黑屏提示No bootable device。 复现模拟覆盖磁盘前 446 字节 MBR 引导代码[rootcentos7 ~]# dd if/dev/zero of/dev/sda bs1 count446修复步骤使用 CentOS7 安装 ISO 光盘启动选择Troubleshooting→Rescue a CentOS system救援模式。系统扫描硬盘找到原系统原系统挂载到/mnt/sysimagechroot /mnt/sysimage切换进入硬盘里面的系统环境重新安装 grub 引导程序到磁盘注意是磁盘 /dev/sda不是分区sh‑4.2# chroot /mnt/sysimage bash‑4.2# grub2-install /dev/sda bash‑4.2# exit sh‑4.2# exit重启拔掉光盘硬盘正常启动。故障/boot 内核 /initramfs 文件丢失现象开机 grub 提示找不到 vmlinuz 内核文件。 修复进入救援模式 chroot 到原系统从 rpm 包提取内核文件或者从其他同版本机器拷贝对应文件到/boot。八、LUKS 磁盘加密LUKSLinux 统一磁盘加密标准。整个分区加密/boot分区不加密否则 BIOS 无法解密启动。 ⚠️操作会清空分区全部数据务必测试环境练习。执行用户root# 安装工具包 [rootcentos7 ~]# yum install cryptsetup -y # 初始化加密分区会覆盖分区全部数据输入YES确认 [rootcentos7 ~]# cryptsetup luksFormat /dev/sdb1 # 打开加密分区输入密码映射为/dev/mapper/crypt_disk [rootcentos7 ~]# cryptsetup open /dev/sdb1 crypt_disk # 格式化映射出来的块设备 [rootcentos7 ~]# mkfs.xfs /dev/mapper/crypt_disk # 挂载使用 [rootcentos7 ~]# mkdir /mnt/luks_data [rootcentos7 ~]# mount /dev/mapper/crypt_disk /mnt/luks_data卸载关闭加密盘[rootcentos7 ~]# umount /mnt/luks_data [rootcentos7 ~]# cryptsetup close crypt_disk开机自动挂载加密磁盘需要两个配置文件/etc/crypttab和/etc/fstab获取分区 UUID[rootcentos7 ~]# blkid /dev/sdb1编辑/etc/crypttabcrypt_disk UUID你的UUID none luksnone代表开机需要手动输入密码可以写密钥文件实现免交互开机。/etc/fstab添加挂载项/dev/mapper/crypt_disk /mnt/luks_data xfs defaults 0 0测试配置正确性[rootcentos7 ~]# mount -a小结Swap 交换分区内存不足使用磁盘充当虚拟内存不能替代物理内存优先 UUID 写/etc/fstab。CentOS7 启动流程BIOS/UEFI → GRUB2 → initramfs → systemd (PID1)。systemd 用 target 替代传统运行级别systemctl set‑default设置开机目标启动 GRUB 菜单加内核参数做临时排错。两种重置 root 密码rd.break、init/bin/bashSELinux 开启环境必须创建/.autorelabel。/etc/fstab写错会进入 emergency 救援模式优先 UUID不要直接写设备名。GRUB2 不要直接修改 grub.cfg修改模板文件执行grub2‑mkconfig生成配置MBR 损坏使用系统救援光盘重装 grub2。LUKS 磁盘加密保护硬盘被拆走之后数据泄露/boot 不能加密。