磁盘空间使用量不会与df&du相加


13

我正在尝试释放一些磁盘空间-如果执行a df -h,我有一个名为/ dev / mapper / vg00-var的文件系统,其中说它的4G,已用3.8G,还剩205M。

那对应于我的/ var目录。

如果我进入/ var并这样做du -kscxh *,则总计为2.1G

2.1G + 200M可用= 2.3G ...所以我的问题是,剩余的1.7G在哪里?


什么du -shx /var发言权?
凯尔·史密斯

1
您可能还删除了具有打开文件句柄的文件。在关闭手柄之前,操作系统不会释放空间,但是您不会看到带有“ du”的空格。您可以运行“ lsof / var | grep已删除”(或类似内容)以查看这些内容。如果轮换了日志,但未以正确的方式进行日志记录过程,那么在/ var / log中,这实际上并不是令人惊讶的发现。
cjc 2012年

我一直在删除一些变得疯狂的日志文件,好像它们没有在旋转,但是无论如何,我收到一个来自朋友“重启”的单字电子邮件-认为他很讽刺,但显然不是:)我再次找到了我的磁盘空间...。(暂时)避免了灾难。
Codecraft

@Codecraft是的,重新启动肯定会清除所有打开的文件句柄,尽管这有点像用锤子砸鸡蛋。
cjc 2012年

@cjc,只要我能获得悠然自得的感觉...!关于如何不打蛋就可以清除打开的文件句柄的任何建议?
Codecraft

Answers:


20

您可能已经删除了一些大日志文件,数据库文件或类似的东西,等待持有该文件的过程将其释放。

在Linux中,删除文件只是取消链接。实际上,当不再有文件句柄连接到该文件时,它将被删除。因此,如果您有一个2 GB的日志文件,并使用rm手动删除了该文件,则在重新启动syslog守护程序(或向其发送HUP信号)之前,不会释放磁盘空间。

尝试

lsof -n | grep -i deleted

并查看是否还有任何删除的僵尸文件还在漂浮。


我没有运行命令,但是您所说的似乎很麻烦-我一直在手动杀死一些疯狂的日志,最后,重新启动导致重新计算磁盘空间并正确显示。
Codecraft

它与我们一起使用,Apache日志填充了/ var / log / apache /目录。因此,您不必重新启动整个服务器,也不必重新启动syslog,只需重新启动上面命令输出中的服务即可。
伊万2014年

只是我们自己。我们的tomcat6 catalina.out没有被logrotate捕获,当它达到4Gb并修复logrotate时我们是否将其删除。几周后,我们想知道为什么4Gb没有回来。该lsof命令显示我们有许多待删除的tomcat文件。重新启动tomcat,突然之间我们又有了很多空间!
尼克

最后一个对我有用的答案。PostgreSQL崩溃了,并断开了与1TiB磁盘上未链接文件的400GiB(!!!)的打开连接。重新启动Postgres修复了它。
sudo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.