我最近在FreeBSD服务器上的驱动器上耗尽了磁盘空间。我截断了导致问题的文件,但是在运行df
时我没有看到反映的变化。当我在分区上运行du -d0
时,它会显示正确的值。有没有办法强制更新这些信息?是什么导致输出不同?
答案 0 :(得分:3)
在BSD中,目录条目只是对底层文件数据(称为inode)的许多引用之一。使用rm(1)命令删除文件时,仅减少引用计数。如果引用计数仍为正数(例如,由于符号链接,文件具有其他目录条目),则不会删除基础文件数据。
较新的BSD用户通常没有意识到打开文件的程序也持有引用。防止底层文件数据在进程使用时消失。当进程关闭文件时,如果引用计数降为零,则文件空间将标记为可用。此方案用于避免Microsoft Windows类型问题,它不会让您删除文件,因为某些未指定的程序仍然打开它。
观察此事的简单方法是执行以下操作
cp /bin/cat /tmp/cat-test
/tmp/cat-test &
rm /tmp/cat-test
在后台进程终止之前,/ tmp / cat-test使用的文件空间将保持已分配且不可用,如df(1)所报告的那样,但du(1)命令将无法解释它,因为它没有更长的文件名。
请注意,如果系统在没有进程关闭文件的情况下崩溃,那么文件数据仍然存在但未引用,将需要运行fsck(8)来恢复文件系统空间。
保持文件打开的进程是newsyslog(8)命令向syslogd或其他日志记录程序发送信号的一个原因,通知他们应该在它们旋转后关闭并重新打开它们的日志文件。
Softupdates也可以影响文件系统的自由空间,因为可以推迟实际的inode空间恢复; sync(8)命令可用于鼓励更快地发生这种情况。
答案 1 :(得分:2)
这可能以 截断文件为中心。 du 和 df 报告this post on unix.com explains不同的内容。仅仅因为没有使用空间并不一定意味着它是免费的......
答案 2 :(得分:-1)
df --sync是否有效?