FSTAB - 在 WSL1 上无法按预期工作,但在 WSL2 上可能可以正常工作

FSTAB - 在 WSL1 上无法按预期工作,但在 WSL2 上可能可以正常工作

我一直在大量使用 Windows Linux 子系统进行 LAMP 开发。我注意到我的 SSD 已经满了,运行 WinDirStat 后,我​​发现它的/tmp大小超过了 30GB!有没有办法模拟重启来清除/tmp或使用其他方法防止 tmp 文件夹变得太大?

答案1

FSTAB - 在 WSL1 上无法按预期工作,但在 WSL2 上可能可以正常工作

最好的方法是确保您的/tmp目录是临时挂载,但这在 WSL 上无法按预期工作

编辑您的/etc/fstab文件(具有管理员权限,即sudo vi /etc/fstab

添加以下行

tmpfs   /tmp    tmpfs   noexec,defaults,nodev,nosuid,noatime,size=256m  0 0

现在关闭所有 bash 终端并重新打开。

仔细检查 WSL1 后,发现这似乎为每个 bash 终端创建了一个新的 /tmp 挂载点,因此没有按预期工作。具体来说,在已经建立另一个 WSL1 终端后打开一个新的 WSL1 终端会使原始 /tmp 挂载变为孤立终端(它仍然占用空间),然后创建一个新的终端。早期的 WSL1 终端似乎指向新的 /tmp 挂载,并且在打开新的 WSL1 终端之前丢失 /tmp 挂载中保存的所有内容。

安装.bashrc- 推荐用于 WSL1

建议安装到~/.bashrc尚未安装的目录中。这对我来说似乎有效

mount|grep -E "^[^ ]* on /tmp " >/dev/null
if [ "$?" != "0" ];then
        echo "Mounting tmp"
        sudo mount -t tmpfs tmpfs /tmp -o noexec,defaults,nodev,nosuid,noatime,size=256m
fi

答案2

使用收割者- 它是一个专门用于定期清理 /tmp 中未使用文件的工具。在许多 Linux 发行版中,它是默认安装的。

安装时应自动设置一个 cron 任务以每天运行 tmpreaper。默认情况下,它会删除 7 天内未使用的文件和子目录,但几个“受保护”的名称除外,例如/tmp/lost+found。您可以在/etc/tmpreaper.conf配置文件中更改此值。

答案3

基于上面@raj的出色建议,您可以tmpreaper在 WSL 启动时运行,如下所示:

在 Windows 任务计划程序中定义一个任务,当我登录(到 Windows)时运行以下命令:

c:\windows\system32\wsl.exe --user root --distribution ubuntu /etc/init-wsl

(您知道这是怎么回事...)
在分发中ubuntu,创建一个文件/etc/init-wsl

tmpreaper 96 /tmp

(这个文件的我自己的版本也启动了 dbus、avahi-daemon 和 xrdp,所以我有一个稳定的 DNS 名称可以连接……)

相关内容