我不擅长系统管理,所以如果我犯了一些基本错误,请告诉我。
有件事让我很抓狂。在公司,我们有一个大型 NFS 服务器,为公司所有员工提供服务。每个人都有一定数量的 GB 可以写入。我经常收到“超出配额”错误,因为我运行了一些程序,这些程序会生成大量临时文件,然后删除它们,但在删除它们之前它们已经达到了配额。
在与我们的系统管理员交谈后,我了解到我的配额已经增加到远远超出了这些测试所需的范围,但似乎我在主文件夹以外的地方花费了这个配额。系统管理员向我解释说,NFS 服务器中以我的用户名为所有者的每个文件都计入我的配额。
我想得到这些文件的列表,这样我就可以删除很多我不再需要的文件。但他告诉我,唯一的方法是搜索整个公司的整个文件系统,浏览每个人的主文件夹。这是一个耗时的过程。他现在正在做这个搜索。
我觉得很奇怪的是:当 Linux 给我一个“超出配额”错误时,它似乎能够立即知道我超出了配额。这不是一个耗时的过程。那么,为什么我不能不进行长时间的搜索就获得超出配额的文件列表呢?
答案1
我能想到两件可能导致您的配额问题的事情。
首先,您应该知道,配额是通过在文件系统上创建一个小型数据库来实现的,每次创建、修改或删除文件时都会更新该数据库。(实际上有两个数据库,一个用于用户配额,一个用于组配额。)首次启用配额时,该数据库已初始化通过检查文件系统上每个文件的使用情况,并在这些文件中记录每个用户和/或每个组的结果。由于每次有活动时,文件系统驱动程序都会更新它们,因此查找用户当前的配额使用情况非常快。
存在一个问题。如果文件系统没有完全卸载,例如硬关机,配额数据库可能会损坏。发生这种情况时,管理员应该 跑步quotacheck
在重新启动系统时验证并重建数据库,但这可能不会发生。或者宇宙射线或硬盘故障可能会损坏它们。
跑步quotacheck
但是,需要卸载文件系统,或者至少以只读方式安装,因此在重建配额数据库时无法使用。这可能需要很长时间,因此不幸的是很少能做到。NFS 服务器管理员应安排停机时间来检查文件系统配额,并应考虑更改程序,以便quotacheck
在崩溃后重新启动时始终运行该程序。
其次,根据您的描述,您可能已经达到了 inode 配额。除了限制磁盘空间量之外,配额还可以限制可以创建的文件数量。如果您创建了大量的临时文件,那么这可能是正在发生的事情。您(或 NFS 服务器管理员)还应该检查一下。运行quota -s
以查看数据库认为您已使用的内容与限制相比的情况。
答案2
除了@MichaelHampton 提到的腐败可能性之外,还有以下一些基本情况:
检查 /tmp 下的内容。有时某些进程很混乱,或者会被中断或终止 - 会话文件、安装程序/解压缩、打印作业等。查找锁定或隐藏的(点)文件。如果发现某些文件,不要直接删除它,而是使用时间戳来确定创建它的原因和时间。
另外,
ps -edalf
检查您的进程列表及其所有文件参数,看看是否有任何神秘的东西在意外区域创建不需要的大文件。“看来我除了主文件夹外还在其他地方花费了这个配额”那么您大概知道哪个目录占用了哪个空间吗,还是完全不知道?
确定您是否有很多小文件/目录,或一些大文件,或两者兼有。尝试使用
du -sh ...
或进行快速估算find -size <threshold> ...
,以查看是否有新文件创建,touch
晚上注销时创建一个哨兵文件,然后第二天find ... -newer SENTINEL
查看是否有任何文件创建。您可以将其设置为在半夜运行。我猜,如果所有其他方法都失败了(这是不可能想象的),一个完全安全的方法是让他们为你临时创建第二个主目录,然后逐渐克隆你的设置,记下你启用了哪些应用程序,然后看看什么时候会出现问题。(你知道,二分搜索分类。)