小智 6
在对该文件的所有引用都消失之前,无法回收文件占用的空间.因此,打开文件的任何进程都将阻止从磁盘中删除该文件.
例如,活动tail -f跟随文件.
如果需要删除这些文件以释放磁盘空间(例如,因为它们非常大,或者它们中有很多),那么拥有处理它们的进程将阻止它们被删除,并最终导致磁盘填充起来.
编辑以回应对其他答案的评论:
您报告的诊断正是您在亚当和我描述的情况下所期望的.df报告56G磁盘正在使用,并du报告仅10G在文件夹中可见.这种差异是因为有一些46G文件已从文件夹中删除,但无法从磁盘中物理删除,因为某些进程持有对它们的引用.
很容易自己试验:找到一个可以安全使用的文件系统,并创建一个庞大的文件.编写一个打开文件并进入无限循环的C程序.现在,执行以下操作:
dfrm 文件df再次检查输出df再次检查输出您将看到输出文件df后rm文件没有变化,但一旦停止程序就会改变(因此删除了对文件的最后一次引用).
如果您需要更多证据证明这是正在发生的事情,您可以从/proc文件系统获取信息(如果有的话).具体来说,找到其中一个tail -f进程(或您认为可能是其他进程)的PID ,并查看该目录/proc/<pid>/fd以查看它已打开的所有文件.
(我家里没有*nix,所以我实际上无法检查看到你/proc/<pid>/fd在这种情况下会看到什么)
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |