搞清楚为什么我要通过硬盘配额

我吮吸系统pipe理,所以如果我得到一些基本的错误,请让我知道。

这是让我疯狂的东西。 在工作中,我们有一个大型的NFS服务器,为我们公司的所有员工提供服务。 每个人都有一定数量的GB被允许写入。 我经常得到“超出配额”的错误,因为我运行了一些程序,这些程序产生了大量的临时文件,然后删除它们,但是在它们删除它们之前,它们达到了配额。

在与我们的系统pipe理员交谈之后,我了解到,我的配额已经增加到超出了我对这些testing所需要的范围,但是似乎我将这个配额用于除家庭文件夹以外的其他位置。 系统pipe理员向我解释说,NFS服务器中的所有者拥有我的用户名的每个文件都会占用我的配额。

我想得到这些文件的列表,所以我可以删除很多我不再需要的文件。 但他告诉我,唯一的办法就是search整个公司的整个文件系统,浏览每个人的家庭文件夹。 即耗时的过程。 他现在正在做这个search。

对我来说听起来很奇怪的是:当Linux给我一个“超出配额”的错误,它似乎能够立即知道我要超过我的配额。 不是一个耗时的过程。 那么,为什么我无法获取与我的配额相关的文件列表,而无需进行长时间的search?

我可以想到两件事情可能会导致您的配额问题。

首先,您应该知道配额是通过在文件系统上创build一个小型数据库来实现的,每次创build,修改或删除文件时都会更新配额。 (实际上有两个,一个用于用户配额,另一个用于组配额。)首次打开配额时,通过检查文件系统上每个文件的使用情况并logging每个用户和/或每个文件的结果在这些文件中组。 由于每次有活动时都由文件系统驱动程序保持最新状态,因此查找用户当前的配额使用情况很快。

有一个问题。 配额数据库可能会损坏,如果文件系统没有完全卸载,例如,如果有硬关机。 发生这种情况时,pipe理员应该在重新引导系统时运行quotacheck来validation和重build数据库,但这可能没有发生。 或者宇宙射线或硬盘故障可能会破坏它们。

但是, 运行quotacheck需要卸载文件系统,或者至less挂载为只读,因此在重build配额数据库时无法使用。 这可能需要很长时间,所以不幸的是很less做到这一点。 NFS服务器pipe理员应安排停机时间来检查文件系统配额,并应考虑更改过程,以便在崩溃后重新启动时始终运行quotacheck

其次,根据您的描述,您可能已经达到了inode配额。 除了限制磁盘空间量外,配额还可以限制可以创build的文件数量。 如果你创build大量的临时文件,那么这可能是发生了什么事情。 你(或NFS服务器pipe理员)也应该检查这个 。 运行quota -s来查看数据库认为你使用了什么与你的限制相比。

除了迈克尔·汉普顿所说的腐败可能性之外,这里还有一些基本的东西:

  • 在/ tmp下检查。 有时候一些进程是混乱的,或者被打断或者被打断 – 会话文件,安装/解压缩,打印作业等等。 寻找locking或隐藏的(点)文件。 如果你发现了什么,不要只是删除它,使用时间戳来确定什么时候创build它。

  • 另外, ps -edalf并检查你的进程列表及其所有的文件参数,看看是否有什么神秘的东西正在创build不需要的大文件或在意想不到的地方。

  • “看起来我正在把这个配额花在我的主文件夹以外的地方”那么你知道哪个目录占用了哪个空间,或者完全是盲目的吗?

  • 弄清楚你是否有很多小文件/目录,或一些大文件,或两者兼而有之。 尝试使用du -sh ...做一个快速的估计du -sh ...或者find -size <threshold> ...要查看是否有更新的文件正在创build,请在晚上注销时touch一个定位文件,然后在第二天find ... -newer SENTINEL看看是否有任何东西被创build。 你可以cron,在半夜跑。

  • 我想如果所有其他方法都失败了(这是不可能的),那么总的故障安全方法就是让他们为你暂时创build第二个homedir,然后逐渐克隆你的设置,记下你启用的应用程序,然后看看当事情变得繁荣时 (二进制search分stream,你知道。)