为什么 du 和配额结果不匹配?

为什么 du 和配额结果不匹配?

我在没有 root 访问权限的系统上超出了磁盘配额。我尝试删除旧文件,但仍然结束。我尝试运行du以查找我使用了所有空间的位置,但它报告我使用的空间很少。

由于。。。导致的结果quota

   /home/1234$ quota -s
   Disk quotas for user 1234 (uid 1234): 
        Filesystem   space   quota   limit   grace   files   quota   limit   grace
       cslab:/home   4519M*  4096M   5120M   09:47    6155       0       0 

du

   /home/1234$ du -mad 1
   ...
   936     total

我不明白为什么quota说我正在使用 4.5GB,而实际上du只算 0.9GB。我还检查了我拥有的文件,/tmp其中有 50MB 的文件。另外 3.5GB 的文件在哪里呢?是否有可能是配额系统错误,需要重置?

答案1

我相信某些进程可能仍保持某些文件打开状态。您可以尝试使用列出它们,

lsof | grep username | grep deleted

更好的版本是使用,

lsof +L1 | grep username

du然而,有时和之间的输出可能存在差异,quota这在本节中进行了解释关联。摘自链接,

在 Unix 中,du 和quota 命令可能报告不同的值。造成这种差异的原因是,遍历文件系统、检查配额和更新使用表的进程仅在特定时间运行。因此,在配额检查之间会有一段时间,quota -v 命令会报告不正确的磁盘使用情况。使用 du 命令获取有关文件大小的最准确信息。

答案2

quota通过查询文件系统来查找文件实际占用的块来工作。

du通过递归扫描目录来查找文件。

这两种方法可能会产生不同的结果。例如,当您“删除”文件时,列出目录时该文件将不再可见。但是,直到磁盘上的最后一个文件句柄关闭后,磁盘上的块才真正被释放。在这种情况下,该文件对 不可见du,但仍计入您的配额。

相关内容