删除巨大的500G不会释放磁盘空间

我有一个远程服务器在这里运行Ubuntu(服务器版)。

昨天我注意到我硬盘空间的100%被占用了。 有一个日志文件变得越来越大,所以我通过rm file.foo删除它。

然后我运行df -h但是存储文件的分区仍然占用了100%的空间。

所以我想重启可能会有帮助, sudo shutdown -r now运行sudo shutdown -r now

等了几分钟后,我无法通过SSH连接到服务器,于是我要求数据中心的人员手动重新启动它。

这工作和服务器启动。

所以我再次运行df -h ,现在80%的分区被占用了(至less是某种东西)。

接下来,我想检查需要多大的磁盘空间并运行sudo du -h --max-depth 1 / ,结果是:

 16K /lost+found 942M /home 52K /tmp 4.0K /mnt 236K /dev du: cannot access `/proc/17189/task/17189/fd/4': No such file or directory du: cannot access `/proc/17189/task/17189/fdinfo/4': No such file or directory du: cannot access `/proc/17189/fd/4': No such file or directory du: cannot access `/proc/17189/fdinfo/4': No such file or directory 0 /proc 4.0K /media 4.0K /opt 4.0K /srv 32K /root 3.0G /var 393M /lib 37M /boot 6.9M /etc 681M /usr 4.0K /selinux 8.0M /bin 9.0M /sbin 4.0K /cdrom 0 /sys 5.0G / 

正如你可以在最后一行看到的,只有5 GB被占用(所以文件不能在垃圾桶或“lost + found”) – 从我使用rm命令来说,没有办法。

那么,怎么了?

我个人的猜测是,当服务器重新启动的时候,它是以某种方式清理我删除的巨大的500GB文件。 强制手动重启可能会中断,所以只能清理20%。

如果我的猜测是真的,我能做些什么来修复呢?

如果我的猜测是错误的,那么我的系统呢?

我的第一个猜测是,无论程序写入file.foo是否仍然存在,并保持文件句柄打开:当清除inode(file)的最后一个引用时,磁盘空间在内核的眼中只是“空闲的”以及将文件打开计数作为参考的程序。 对于将来:当你移动或删除一个日志文件记得让程序使用它 – 如果你想真正安全,重新启动有问题的程序。

既然你重新启动,虽然这在理论上是不可能的 – 所有的程序应该已经被杀死了,所以他们所持有的任何引用也将消失。 这让我想到了两种可能性:

  1. 你有一个硬链接到你不知道的文件。
    如果是这种情况, dudf应该同意你在系统上使用的空间量。

  2. 您的文件系统已损坏。 可能在一个inode有一个正引用计数的模式下,但实际上并没有被任何文件系统对象指向。
    这很容易(虽然费时)来检查:在大多数Linux系统上,你可以通过创build一个名为/forcefsck的文件来强制重启文件系统( touch /forcefsck作为根用户就可以了) – 然后重启并等待一会儿!),而你的系统扫描它的文件系统寻找像“丢失”的索引节点与螺旋引用计数的东西。