我一直在大量使用 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 名称可以连接……)