获取df以在FreeBSD上显示更新的信息

时间:2020-03-05 18:43:27  来源:igfitidea点击:

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

解决方案

回答

df --sync是否起作用?

回答

这可能集中在我们如何截断文件。正如unix.com上的这篇帖子所解释的,du和df报告了不同的事情。仅仅因为不使用空间并不一定意味着它是免费的...

回答

在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或者其他日志记录程序发送信号以通知它们应关闭并在旋转日志文件后重新打开其日志文件的原因之一。

软更新还可以影响文件系统的可用空间,因为可以推迟实际的inode空间恢复。 sync(8)命令可用于鼓励这种情况尽快发生。