我最近用完了 FreeBSD 服务器上驱动器上的磁盘空间。我截断了导致问题的文件,但运行时没有看到反映的更改 df. 。当我跑步时 du -d0 在分区上它显示正确的值。有什么办法可以强制更新这些信息吗?是什么导致这里的输出不同?

有帮助吗?

解决方案

这大概集中在 如何 你截断了文件。 df 将不同的事情报告为 unix.com 上的这篇文章解释了. 。仅仅因为空间未被使用并不一定意味着它是免费的......

其他提示

在 BSD 中,目录条目只是对底层文件数据(称为索引节点)的众多引用之一。当使用 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 或其他日志记录程序发送信号以通知它们应该在轮换日志文件后关闭并重新打开日志文件的原因之一。

软更新还可能影响文件系统可用空间,因为实际的索引节点空间恢复可以被推迟;可以使用sync(8)命令来促使这种情况更快发生。

df --sync 有效吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top