我目前正在从事一个学生项目(机器学习),我们可以在其中访问公司资源。他们将数据存储在 Windows 服务器上,但我们使用 Linux 机器来访问数据。好像不能设置配额。原因似乎是数据存储在 Windows 服务器上,而我的顾问无权访问存储数据的计算机。问题是,学生偶尔会意外使用大量磁盘空间,这会导致备份空间的巨大浪费。例如,我训练了一个模型 3 天,并定期创建该模型的快照。这导致 100GB 磁盘使用量。这是个问题。
有可能预防这样的事情吗?
我正在考虑一个 CRON 作业,它为每 30 分钟左右登录的每个用户执行一次。 CRON 作业检查用户主文件夹(例如 )中的磁盘使用情况,du -s .
如果用户使用过多内存,则终止用户的所有作业。我的顾问担心这会花费大量的计算时间(CPU 时间)。
我刚刚尝试过,第一次执行的时间du -s .
比后续执行的时间要长得多。为什么会这样?我提出的解决方案是否有效,或者在我描述的环境中是否有更好的解决方案? (我们对我们使用的机器有 root 访问权限,但对我们的主文件夹所在的机器没有 root 访问权限)
答案1
应该du -s
适合您的环境。您可能需要考虑的一些注意事项:
- 如果用户向其他用户授予写入权限,则报告的数字
du
可能会出现偏差,因为无论谁拥有这些文件,它都会考虑所有文件(这不是什么大问题,因为惩罚落在授予权限的用户身上,从而阻止了这种做法) - 真正要考虑的成本并不是 CPU 时间,而是磁盘 I/O可能明显影响整体系统性能;可能也微不足道,取决于很多因素
- 浏览许多大型目录可能需要花费大量时间,30 分钟可能还不够
您的后续du
执行所需的时间可能比第一次执行要少得多(对于少数/小目录),因为文件系统缓存已经在内存中包含了一些数据。但是,不要基于短时间进行计算,因为在处理大型目录时会发生缓存搅动,并且您会看到与第一次执行更内联的时间。