获取`df`以显示有关FreeBSD的更新信息

时间:2008-08-26 18:00:52

标签: filesystems sysadmin freebsd

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

3 个答案:

答案 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是否有效?