树莓派3B+扩展系统交换空间swap设置

作者:我就是个世界 发表于:2026-04-12
  1. 首先,验证当前交换文件的配置状态

    # 查看交换文件详情
    sudo swapon --show
    
    # 查看文件权限和大小
    ls -lh /var/swap
    
    # 检查是否已写入 fstab 实现开机自动挂载
    grep swap /etc/fstab
  2. 设置系统交换空间swap

    # ① 禁用当前的交换文件
    sudo swapoff /var/swap
    
    # ② 删除旧的交换文件(可选,但建议先备份)
    sudo rm /var/swap
    
    # ③ 从 /etc/fstab 中删除旧条目(如果存在)
    sudo nano /etc/fstab
    # 找到并删除包含 “/var/swap” 的那一行,保存退出。
    
    # ④ 在根目录创建新的交换文件(以2GB为例)
    sudo fallocate -l 2G /swapfile
    # 如果 fallocate 失败,使用:sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
    
    # ⑤ 设置权限并格式化
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    
    # ⑥ 启用并永久生效
    sudo swapon /swapfile
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
    # ⑦ 验证新配置
    sudo swapon --show
    free -h

总结

你的 /var/swap 2GB可以正常工作,无需立即更改。但如果你:
  • 是服务器管理员或追求最佳实践


  • 发现 /var分区空间不足


  • 未来需要调整交换空间大小


那么迁移到根目录的 /swapfile是更规范、更一劳永逸的选择。否则,保持现状完全没问题。


按以上方法修改完成,重启后,发现/var/swap 2GB的文件依然存在,交换空间变成了4GB。


我们之前将交换文件从 /var/swap 迁移到了 /swapfile,但是重启后 /var/swap 被重新创建,并且两个交换文件都启用了,导致交换空间变成了4G(两个2G)。
这可能是因为系统中还有某个服务或配置在每次启动时自动创建并启用 /var/swap。
常见的原因可能是:
  1. 系统中安装了某些服务(例如某些云镜像或特定发行版)会自动创建交换文件。


  2. 有一个 systemd 服务单元专门负责创建交换文件。


  3. 在 /etc/fstab 中仍然有 /var/swap 的条目,但之前我们删除了,所以可能不是这个原因。


  4. 可能是某个启动脚本(如 /etc/rc.local)中创建了交换文件。


为了解决这个问题,我们需要找出是哪个进程在创建 /var/swap 并禁用掉。
步骤:
  1. 首先,检查 /etc/fstab 是否还有 /var/swap 的条目。
    如果没有,那么可能不是通过 fstab 挂载的。


  2. 检查 systemd 服务,看是否有与交换文件相关的服务。
    例如,一些系统会有 swapfile.service或类似的服务。


  3. 检查 /etc/init.d/ 或 /etc/rc.local 等初始化脚本。


  4. 另外,也可以检查是否有定时任务在创建交换文件。


但是,根据描述,重启后自动创建,很可能是某个系统服务。
我们可以尝试以下命令来查找哪些服务与交换文件相关:
查看 systemd 服务中与 swap 相关的单元:
systemctl list-unit-files | grep swap

解决方案

步骤1:先查看当前情况

# 查看所有启用的交换空间
sudo swapon --show

# 查看哪些服务与交换文件相关
sudo systemctl list-units | grep -i swap

# 查看 fstab 内容
cat /etc/fstab | grep swap

# 检查是否有 systemd-swap 服务
sudo systemctl status systemd-swap

步骤2:禁用并删除当前的 /var/swap

# 先停用 /var/swap
sudo swapoff /var/swap

# 删除文件
sudo rm -f /var/swap

# 验证停用
sudo swapon --show

步骤3:找出并禁用自动创建 /var/swap 的元凶

情况A:如果有 systemd-swap 服务

# 查看 systemd-swap 配置
sudo cat /etc/systemd/swap.conf
# 或
sudo cat /etc/systemd/swap.conf.d/*.conf 2>/dev/null

# 如果发现 swapfile 设置为 /var/swap,修改为 /swapfile
sudo nano /etc/systemd/swap.conf
# 查找并修改:
# SwapFile=/var/swap   →   SwapFile=/swapfile
# 或完全禁用自动创建:
# SwapFile=

情况B:如果是 systemd 单元

# 查找所有与 swap 相关的 systemd 单元
systemctl list-unit-files | grep swap

# 查看是否有专门创建 /var/swap 的服务
sudo systemctl list-unit-files | grep -E '(var|swap)'

# 如果有可疑服务,禁用它
sudo systemctl disable 服务名
sudo systemctl stop 服务名

情况C:检查 init.d 脚本

# 查看是否有开机启动脚本
ls -la /etc/rc*.d/*swap* 2>/dev/null
ls -la /etc/init.d/*swap* 2>/dev/null

# 检查 rc.local
cat /etc/rc.local 2>/dev/null | grep swap

情况D:检查定时任务或脚本

# 查找所有包含 /var/swap 的文件
sudo grep -r "/var/swap" /etc/ 2>/dev/null
sudo grep -r "mkswap" /etc/ 2>/dev/null

步骤4:验证 fstab 配置

确保 /etc/fstab中只有 /swapfile的配置:

# 备份原始文件
sudo cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)

# 编辑 fstab
sudo nano /etc/fstab
应该只有一行交换文件配置
/swapfile none swap sw 0 0
删除或注释掉 /var/swap的任何行(如果存在):
# /var/swap none swap sw 0 0

步骤5:重启并验证

# 重启系统sudo reboot# 重启后检查sudo swapon --show# 应该只显示 /swapfilefree -h# 交换空间应该只有 2G# 检查 /var/swap 是否被重新创建ls -la /var/swap# 如果文件存在,说明有遗漏的服务

步骤6:如果问题依旧存在(最后的手段)

创建一个不可删除的锁文件来阻止自动创建:
# 创建空目录(文件无法覆盖目录)
sudo rmdir /var/swap 2>/dev/nullsudo mkdir /var/swap
# 设置不可删除属性
sudo chattr +i /var/swap
# 或者创建只读文件
sudo touch /var/swapsudo chattr +i /var/swap


版权声明

本文仅代表作者观点,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

请发表您的评论