【问题标题】:Get `df` to show updated information on FreeBSD获取 `df` 以显示有关 FreeBSD 的更新信息
【发布时间】:2010-09-06 22:09:37
【问题描述】:

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

【问题讨论】:

    标签: filesystems sysadmin freebsd


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这可能以如何您截断文件为中心。 dudfthis post on unix.com explains 报告不同的内容。仅仅因为空间没有被使用并不一定意味着它是免费的......

      【讨论】:

        【解决方案3】:

        df --sync 有效吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多