温馨提示×

如何通过centos swapper节省磁盘空间

小樊
41
2025-12-05 19:12:15
栏目: 云计算

术语澄清与总体思路

  • swapper 通常指内核的交换机制(进程名如 kswapd0),真正占用磁盘的是 Swap 空间(交换分区或交换文件)。要“节省磁盘空间”,本质是缩小或移除不再需要的 Swap,并用更节省的方式(如 zram/zswap)或按需配置来满足系统安全余量。

步骤一 评估与规划

  • 查看当前内存与 Swap 使用:
    • 命令:free -hswapon --showcat /proc/swapscat /proc/meminfo | egrep 'Swap|Mem'
  • 规划目标:
    • 有较多内存(如 ≥64GB)且负载稳定时,可适度降低 Swap 大小,甚至仅保留少量或改用 zram/zswap 以减少磁盘占用。
    • 一般服务器建议保留一定 Swap 作为 OOM 缓冲;常见经验是内存的 1–2 倍,但在大内存场景可显著降低该比例(需结合实际监控与业务容忍度)。

步骤二 快速节省磁盘的两种做法

  • 方案A 临时“释放”已用 Swap(不缩小分区/文件,立即见效)
    • 适用:仅需短期回收磁盘占用(例如日志分区告警),不改动分区结构。
    • 操作:
      • sudo swapoff -a && sleep 10 && sudo swapon -a
      • 验证:free -h
    • 风险:关闭期间可能触发 OOM,仅建议在能承受短暂内存压力时执行。
  • 方案B 缩小或移除 Swap(持久节省磁盘)
    • 若使用 LVM 逻辑卷 作为 Swap(常见于 CentOS 默认安装)
      1. 确认 Swap 路径:swapon --showcat /proc/swaps
      2. 停用 Swap:sudo swapoff /dev/mapper/<vg>-<lv_swap>
      3. 缩小逻辑卷(示例减少 1.5G):sudo lvreduce -L -1.5G /dev/mapper/<vg>-<lv_swap>
      4. 重新初始化并启用:sudo mkswap /dev/mapper/<vg>-<lv_swap> && sudo swapon /dev/mapper/<vg>-<lv_swap>
      5. 验证:free -hswapon --show
      6. 如回收的空间需要并入根分区,可在 LVM 中扩展根 LV,然后 xfs_growfs /(XFS)或 resize2fs /(ext4)在线扩容文件系统。
    • 若使用 Swap 文件
      1. 停用:sudo swapoff /swapfile
      2. 调整大小(示例调整为 1G):sudo dd if=/dev/zero of=/swapfile bs=1G count=1
      3. 设置权限并启用:sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
      4. 更新 /etc/fstab 中对应行(若路径或大小变更)
      5. 验证:free -h
    • 提示:缩小前务必确认已停用 Swap,且缩小后保留的 Swap 仍能满足系统最低安全余量。

步骤三 用更少磁盘占用满足系统需求

  • 启用 zram(在内存中创建压缩块设备作为 Swap,几乎不占磁盘)
    • 安装与启用(示例):sudo yum install -y zram-service && sudo systemctl enable --now zram-swap.service
    • 适用:物理内存充足、希望用极小磁盘占用获得额外“虚拟内存缓冲”的场景。
  • 启用 zswap(内核级压缩缓存,减少对磁盘 Swap 的写入)
    • 临时启用:echo 1 | sudo tee /sys/module/zswap/parameters/enabled
    • 持久化:在 /etc/default/grubGRUB_CMDLINE_LINUX 添加 zswap.enabled=1,执行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg 并更新 initramfs(如需要),重启生效。
  • 调整 swappiness(降低系统主动使用 Swap 的倾向)
    • 查看:cat /proc/sys/vm/swappiness
    • 临时:sudo sysctl vm.swappiness=10
    • 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10 并执行 sudo sysctl -p
  • 建议:优先用 zram/zswap 满足“低磁盘占用 + 一定安全余量”,再按需微调 swappiness,通常能显著降低对磁盘 Swap 的依赖。

风险提示与验证

  • 缩小或关闭 Swap 前,确认业务可承受内存压力;过度缩减可能在负载峰值时触发 OOM Killer 导致进程被杀。
  • 每次调整后,使用 free -hswapon --showvmstat 1 5cat /proc/meminfo 观察一段时间,确认无异常换页、内存紧张或性能退化。
  • 若系统使用 LVM,在缩小 LV 前建议做好快照或备份;变更 /etc/fstab 后务必在重启前验证,避免系统无法启动。

0