Skip to content
黑川启太
Go back

OpenWrt:使用 USB 磁盘作为 Swapfile 虚拟内存

如果你的 OpenWrt 设备内存有限,在 USB 磁盘上使用 swapfile 可以帮助防止运行 Docker 或其他高负载服务时出现 OOM 内存耗尽问题。以下是在 mountd 下简单可靠的设置方法。

  1. 检查当前内存和 Swap 状态
swapon -s   cat /proc/swaps

如果 Swap 显示为 0,说明当前未使用 Swap。

  1. 在 USB 上创建一个 512MB 的 swapfile
    请根据实际的 USB 挂载路径调整命令中的路径。
dd if=/dev/zero of=/tmp/mountd/disk1_part1/swapfile bs=1M count=512
  1. 确保权限安全
    这一步非常重要。

    chmod 600 /tmp/mountd/disk1_part1/swapfile
  2. 将文件格式化为 Swap

    mkswap /tmp/mountd/disk1_part1/swapfile
  3. 立即启用 Swap 无需重启

    swapon /tmp/mountd/disk1_part1/swapfile

验证命令:

free -hswapon -scat /proc/swaps
  1. 调整 Swap 行为推荐设置
    降低 swappiness 值,优先使用物理内存,仅在需要时使用 Swap:
    sysctl -w vm.swappiness=10echo 'vm.swappiness=10' >> /etc/sysctl.conf

检查设置:

sysctl vm.swappiness
  1. 重启后自动启用 Swap
    USB 磁盘通过 mountd 挂载的时间较晚,过早启用 Swap 通常会导致失败。这里的 init 脚本会等待直到 swapfile 确实存在,具有良好的挂载安全性。

创建 init 脚本:

vi /etc/init.d/swap-delay

粘贴以下内容:

#!/bin/sh /etc/rc.commonSTART=99start() {    (        for i in $(seq 1 120); do            if [ -f /tmp/mountd/disk1_part1/swapfile ]; then                logger -t swap-delay "Enabling swap from mountd path"                swapon /tmp/mountd/disk1_part1/swapfile                exit 0            fi            sleep 1        done        logger -t swap-delay "Swapfile not found, giving up"    ) &}
  1. 启用脚本并重启

    chmod +x /etc/init.d/swap-delay/etc/init.d/swap-delay enablereboot
  2. 重启后验证

    free -hswapon -slogread | grep swap-delay

一旦 USB 磁盘挂载完成,你应该能看到 Swap 被自动启用。

  1. 注意事项与提示
    Swapfile 相比 Swap 分区具有更好的灵活性。
    尽可能使用 USB 3.0 存储设备,因为 USB 2.0 速度较慢且在高负载下不够稳定。
    保持合理的 Swap 大小,通常 256MB 到 512MB 已经足够。
    Swap 有助于提升系统稳定性,无法提升性能。

P.S.最近买了一台GL-MT3600BE Wi-Fi路由器。虽然是四核2.0 GHz CPU,但内存仅有512 MB。



Previous Post
【AI翻译】祝山 by 加門七海
Next Post
供养