df表示磁盘已满,但事实并非如此

在运行Ubuntu 10.04的虚拟化服务器上​​,df报告以下内容:

# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 7.4G 7.0G 0 100% / none 498M 160K 498M 1% /dev none 500M 0 500M 0% /dev/shm none 500M 92K 500M 1% /var/run none 500M 0 500M 0% /var/lock none 500M 0 500M 0% /lib/init/rw /dev/sda3 917G 305G 566G 36% /home 

这是令我困惑的原因有两个:1)df表示/ dev / sda1挂载在/上,容量为7.4GB,其中只有7.0GB正在使用,但是它报告/正在满载; 和2.)我可以创build文件/因此它显然没有剩下的空间。

可能相关的是目录/ www是/ home / www的一个符号链接,它位于不同的分区上(/ dev / sda3,挂载在/ home)。

任何人都可以提供有关可能发生的事情的build议吗? 服务器似乎没有问题,但我想确保没有问题的分区表,文件系统或其他可能导致内爆(或爆炸)以后的东西。

一个进程可能已经打开了一个已被删除的大文件。 你将不得不杀死这个过程来释放空间。 您可以通过使用lsof来识别进程。 在Linux上,已经打开的文件被lsof所知,并在lsof的输出中标记为(删除)。

你可以用sudo lsof +L1来检查

文件系统的5%(默认情况下)保留在文件系统填满以防止严重问题的情况下。 你的文件系统已满。 由于5%的缓冲区没有发生灾难性的事情 – 根允许使用安全缓冲区,在你的设置中,非root用户没有理由写入该文件系统。

如果守护进程以非root用户身份运行,但需要pipe理该文件系统中的文件,则事件将中断。 一个常见的守护进程被named 。 另一个是ntpd

你可能没有inodes。 使用以下命令检查inode的使用情况:

 df -i 

大多数Linux文件系统只保留5%的空间用于root用户。

你可以看到这个例如

 dumpe2fs /dev/sda1 | grep -i reserved 

您可以使用以下方式更改预留金额:

 tune2fs -m 0 /dev/sda1 

在大多数情况下,服务器似乎会继续正常工作 – 假设所有进程都以“root”身份运行。

除了已经提出的原因之外,在某些情况下还可能包括:

  • 一个不同的磁盘被安装在现有的充满数据的文件夹“之上”
  • 杜将计算所花费的磁盘的大小和DF将显示真的花了
  • 解决方法:(如果可能)卸载所有非根磁盘,并再次用du -md 1检查大小。 通过将隐藏的文件夹移动到其他地方或挂载到不同的地方来修复情况。

我有这个问题,并被删除各种大文件并没有改善情况(不知道有关5%的缓冲区)事实困惑,这里有一些线索

从根部走下来反复做的最大目录:

 du -sh */ 

直到我来到一个有一些绝对巨大的日志的Web服务器日志文件的目录

我截断了

 :>lighttpd.error.log 

突然df -h降到48%了!

df -h正在舍入值。 即使百分比是四舍五入的。 省略-h ,你会看到更细微的差异。

哦。 ext3和derivates为这个有问题的星座保留一个文件系统的百分比(默认5%)。 如果你的根文件系统真的是满的(剩余0字节),你不能启动系统。 所以保留部分阻止了这一点。

检查/失去+find,我有一个系统(centos 7)和一些文件在/失去+find吃了所有的空间

如果您的分区是btrfs,则可能有一个子卷占用空间。 btrfs文件系统可以有许多子卷,只有其中一个被挂载。 可以使用btrfs subvolume list <dir>列出所有子卷和btrfs subvolume delete <dir>/<subvolume>以删除一个btrfs subvolume delete <dir>/<subvolume> 。 确保你不要删除默认挂载的那个。