首页 / 资讯中心 / 文章详情

Linux交换空间管理、系统启动流程

Linux交换空间管理、系统启动流程 ★ FEATURED ARTICLE
Linux 交换空间管理交换空间Swap Space是 Linux 中用于扩展物理内存的机制。当物理内存不足时系统会把不常用的内存页写入交换空间腾出物理内存给活跃进程使用。一、Swap 的核心概念概念说明Swap交换空间磁盘上的一块区域用作虚拟内存Swappiness内核参数控制使用 Swap 的倾向0-100Swap 分区专用的交换分区如/dev/sda2Swap 文件用普通文件模拟交换空间如/swapfileSwap 总量物理内存 Swap 可用虚拟内存总量作用物理内存不足时把不常用内存页换出到磁盘。支持休眠Hibernate——把内存内容写入 Swap。防止 OOMOut of Memory杀死进程。二、查看 Swap 状态1. 查看 Swap 使用情况free-h输出示例total used free shared buff/cache available Mem: 3.8G 1.2G 1.5G 50M 1.1G 2.2G Swap: 4.0G 100M 3.9G2. 查看 Swap 设备swapon--show# 或cat/proc/swaps输出示例NAME TYPE SIZE USED PRIO /dev/sda2 partition 3.9G 100M -2 /swapfile file 1G 0B -33. 查看内存和 Swap 详细信息cat/proc/meminfo|grep-iswap输出示例SwapCached: 0 kB SwapTotal: 4194300 kB SwapFree: 4089344 kB三、创建 Swap方式一创建 Swap 分区# 1. 用 fdisk/parted 创建分区sudofdisk/dev/sdb# 创建分区类型设为 82Linux swap# 2. 格式化sudomkswap/dev/sdb1# 3. 启用sudoswapon/dev/sdb1# 4. 开机自动启用写入 fstabecho/dev/sdb1 swap swap defaults 0 0|sudotee-a/etc/fstab方式二创建 Swap 文件推荐灵活# 1. 创建 Swap 文件大小 2Gsudoddif/dev/zeroof/swapfilebs1Mcount2048# 或sudofallocate-l2G /swapfile# 2. 设置权限必须 600sudochmod600/swapfile# 3. 格式化为 Swapsudomkswap/swapfile# 4. 启用sudoswapon/swapfile# 5. 验证swapon--show# 6. 开机自动启用echo/swapfile swap swap defaults 0 0|sudotee-a/etc/fstab四、管理 Swap1. 启用/禁用 Swap# 启用指定 Swapsudoswapon/dev/sdb1sudoswapon/swapfile# 禁用指定 Swapsudoswapoff /dev/sdb1sudoswapoff /swapfile# 禁用所有 Swapsudoswapoff-a# 启用 fstab 中所有 Swapsudoswapon-a2. 删除 Swap 文件# 1. 禁用sudoswapoff /swapfile# 2. 从 fstab 删除对应行sudosed-i/swapfile/d/etc/fstab# 3. 删除文件sudorm/swapfile3. 调整 Swap 大小# 1. 禁用sudoswapoff /swapfile# 2. 调整文件大小sudoddif/dev/zeroof/swapfilebs1Mcount4096# 改成 4G# 3. 重新格式化sudomkswap/swapfile# 4. 重新启用sudoswapon/swapfile五、Swappiness 参数vm.swappiness控制内核多积极地使用 Swap范围 0-100。值行为0尽量不使用 Swap除非内存极度不足10保守使用推荐用于服务器60默认值平衡100积极使用 Swap查看当前值cat/proc/sys/vm/swappinesssysctlvm.swappiness临时修改sudosysctlvm.swappiness10永久修改echovm.swappiness10|sudotee-a/etc/sysctl.confsudosysctl-p建议服务器vm.swappiness10减少 Swap 使用提升性能桌面vm.swappiness60默认数据库服务器vm.swappiness1尽量不用 Swap六、Swap 大小建议物理内存推荐 Swap无休眠推荐 Swap有休眠≤ 2GB2× 内存3× 内存2-8GB等于内存2× 内存8-64GB4-8GB1.5× 内存 64GB4-8GB不建议休眠现代服务器建议Swap 不需要太大4-8GB 足够主要作为“保险”。七、Swap 性能优化优化项说明用 SSDSwap 在 SSD 上性能更好用独立分区避免和系统盘竞争 I/O降低 swappiness减少不必要的 Swap用 zram/zswap压缩内存减少 Swap I/O监控 Swap 使用频繁 Swap 说明内存不足启用 zswap压缩 Swap# 临时启用echo1|sudotee/sys/module/zswap/parameters/enabled# 永久启用echozswap.enabled1|sudotee-a/etc/default/grubsudoupdate-grub八、常见问题问题原因解决Swap 使用率高物理内存不足增加内存或降低 swappinessSwap 无法启用权限不对、未格式化chmod 600、mkswap开机 Swap 不生效fstab 写错检查/etc/fstabswapon: /swapfile: read swap header failed未格式化sudo mkswap /swapfileswapon: /swapfile: insecure permissions权限太开放sudo chmod 600 /swapfile删除 Swap 后内存没释放数据还在 Swap 中swapoff后数据回到内存九、Swap vs 物理内存对比项物理内存Swap速度极快纳秒级慢毫秒级容量有限可扩展用途活跃进程不常用内存页成本高低是否可替代-❌ 不能替代内存Swap 是“应急”手段不是内存的替代品。频繁使用 Swap 说明内存不足。十、一句话总结Swap 磁盘上的虚拟内存物理内存不足时的“应急仓库”操作命令查看free -h、swapon --show创建分区 Swapmkswap /dev/sdb1swapon /dev/sdb1创建文件 Swapddmkswap /swapfileswapon /swapfile禁用swapoff /swapfile开机启用写入/etc/fstab调整倾向vm.swappiness10最佳实践服务器 Swap 4-8GB 足够vm.swappiness10减少 Swap 使用用 SSD 存放 Swap监控 Swap 使用率频繁 Swap 说明内存不足Linux 启动原理Linux 启动是一个从硬件加电到用户登录的完整过程涉及 BIOS/UEFI、GRUB、内核、initramfs、systemd 等多个阶段。一、启动流程总览加电 → BIOS/UEFI → GRUB → 内核 → initramfs → systemd → 用户登录阶段负责组件主要任务1. 加电自检BIOS/UEFI硬件检测找到启动设备2. 引导加载GRUB加载内核和 initramfs3. 内核初始化Kernel初始化硬件、挂载根文件系统4. initramfs临时根文件系统加载必要驱动找到真正的根分区5. init 进程systemd启动所有系统服务6. 用户登录getty/login提供登录界面二、各阶段详解1. BIOS/UEFI 阶段BIOS传统或 UEFI现代是主板上的固件负责POST加电自检检测 CPU、内存、磁盘等硬件。选择启动设备按 BIOS 中配置的顺序找到可启动设备硬盘、U盘、光驱。加载引导程序从启动设备的 MBRBIOS或 ESP 分区UEFI加载 GRUB。对比项BIOSUEFI分区表MBRGPT引导位置MBR512字节ESP 分区FAT32最大磁盘2TB18EB启动速度慢快安全性无Secure Boot2. GRUB 阶段GRUBGRand Unified Bootloader是引导加载程序负责显示启动菜单多系统选择。加载内核vmlinuz到内存。加载 initramfsinitrd.img到内存。把控制权交给内核。GRUB 配置文件/boot/grub2/grub.cfg # CentOS/RHEL /boot/grub/grub.cfg # Ubuntu/Debian手动生成配置sudogrub2-mkconfig-o/boot/grub2/grub.cfg# CentOSsudoupdate-grub# Ubuntu3. 内核初始化阶段内核被加载后开始解压自身内核镜像解压到内存。初始化硬件检测 CPU、内存、磁盘、网卡等。加载驱动加载编译进内核的驱动。挂载 initramfs把临时根文件系统挂载为/。启动 init 进程执行 initramfs 中的/init。内核参数ro root/dev/mapper/centos-rootro以只读方式挂载根分区。root指定根分区位置。4. initramfs 阶段initramfsinitial RAM filesystem是一个临时的根文件系统包含必要的驱动模块如磁盘控制器驱动、LVM、RAID。挂载真正根分区所需的工具。作用内核启动时可能还没有加载访问根分区所需的驱动。initramfs 提供这些驱动让内核能找到并挂载真正的根分区。挂载成功后切换到真正的根文件系统释放 initramfs。查看 initramfsls/boot/initramfs-*.img重新生成sudodracut-f# CentOSsudoupdate-initramfs-u# Ubuntu5. systemd 阶段内核挂载真正的根分区后启动第一个用户空间进程systemdPID 1。systemd 的任务读取/etc/systemd/system/default.target确定默认运行级别。按依赖关系启动所有服务。挂载文件系统、启动网络、启动守护进程。最终启动登录界面。运行级别targetTarget说明poweroff.target关机rescue.target单用户模式multi-user.target多用户命令行graphical.target图形界面reboot.target重启查看当前 targetsystemctl get-default切换 targetsudosystemctl isolate multi-user.target6. 用户登录阶段systemd 启动getty或显示管理器GDM、LightDM提供登录界面。命令行登录getty→login→ Shell图形登录gdm→ 用户选择 → 桌面环境登录后加载/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc三、启动流程完整图┌─────────────────────────────────────────────────────────────┐ │ 1. 加电 │ │ BIOS/UEFI 自检找到启动设备 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 2. GRUB │ │ 显示菜单加载 vmlinuz initramfs │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 3. 内核初始化 │ │ 解压内核初始化硬件挂载 initramfs │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 4. initramfs │ │ 加载驱动找到并挂载真正的根分区 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 5. systemd (PID 1) │ │ 按 target 启动所有服务 │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 6. 登录界面 │ │ getty / gdm → 用户登录 → Shell/桌面 │ └─────────────────────────────────────────────────────────────┘四、查看启动信息命令说明dmesg查看内核启动日志journalctl -b查看本次启动日志journalctl -b -1查看上次启动日志systemd-analyze查看启动耗时systemd-analyze blame查看各服务启动耗时systemd-analyze critical-chain查看关键启动链cat /proc/cmdline查看内核启动参数示例# 查看启动总耗时systemd-analyze# 查看最耗时的服务systemd-analyze blame|head-10# 查看关键启动链systemd-analyze critical-chain五、常见启动问题问题原因解决卡在 GRUBGRUB 配置错误进入救援模式修复内核 panic根分区找不到、驱动缺失检查root参数重建 initramfs卡在 emergency modefstab 写错、分区损坏进入单用户模式修复服务启动失败依赖问题、配置错误systemctl --failed查看启动慢服务过多、磁盘慢systemd-analyze blame分析无法进入系统密码忘记、Shell 损坏单用户模式或救援模式六、启动相关文件文件说明/boot/vmlinuz-*内核镜像/boot/initramfs-*.imginitramfs/boot/grub2/grub.cfgGRUB 配置/etc/default/grubGRUB 默认配置/etc/systemd/system/default.target默认运行级别/etc/fstab开机自动挂载/etc/sysctl.conf内核参数七、一句话总结Linux 启动 硬件 → GRUB → 内核 → initramfs → systemd → 登录阶段组件任务1BIOS/UEFI硬件自检找启动设备2GRUB加载内核和 initramfs3Kernel初始化硬件挂载 initramfs4initramfs加载驱动挂载真正的根分区5systemd启动所有服务6getty/gdm提供登录界面排查启动问题dmesg、journalctl -b、systemd-analyze blame。
阅读完成 · 觉得有帮助?
咨询建站