![如何查找幻像存储的使用情况?](https://linux22.com/image/531593/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E5%B9%BB%E5%83%8F%E5%AD%98%E5%82%A8%E7%9A%84%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%9F.png)
我有一台 Mac OS X 10.6.4 Snow Leopard Server 文件服务器 (AFP),过去几周启动卷上的存储空间已经用完了。80GB 启动卷上剩余的 42GB 大约需要两天时间才能用完,尽管仍然sudo du -chsx -I dev /
显示只使用了 29GB。
我以前遇到过这种情况,Linux 服务器的 Apache 日志在 N 天后被删除,但日志仍由 Apache 保持打开状态,导致存储未被释放。在那种情况下,我能够相对轻松地追踪到它sudo lsof
,但在这种情况下,我很难找到罪魁祸首(作为文件服务器,有很多吨打开的文件和套接字)。如何lsof
按文件大小对输出进行排序(并以人性化的格式显示大小)以便找到罪魁祸首?
服务器有 3GB 的 RAM。启动 4 小时后,活动监视器显示有 700MB 可用,1.5GB 不活动,以及 200GB 的 VM。VMmds
使用量最大,为 1.8GB,AppleFileServer
第二位为 500MB,其他所有服务器均使用 10MB-75MB 的 VM。也就是说,/private/var/vm 只有 128MB。
重新启动系统可以解决问题,因此我相信它是仍然由一个或多个进程保持开放的可用存储空间。
任何其他假设、建议等都将不胜感激。
答案1
您可以使用以下方法找到最大的打开文件:
sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 50
这将列出常规文件(不是管道、套接字等),按大小降序排序,并取前 50 个。
您还可以查看哪些进程打开了最多的文件,例如
sudo lsof | awk '$5 == "REG" {freq[$2]++ ; names[$2] = $1 ;} END {for (pid in freq) print freq[pid], names[pid], pid ; }' | sort -n -r -k 1,1
答案2
我会看看sudo lsof | grep deleted
答案3
sudo lsof +L1
将显示已删除的文件。为了提高速度,请将其与 结合使用-Pn
。
例如lsof -Pn +L1