df说磁盘已满,但还没有


57

在运行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.4 GB的容量,其中仅7.0 GB的容量正在使用,但报告/已100%充满。和2.)我可以在/上创建文件,因此显然还有剩余空间。

可能相关的是,目录/ www是指向/ home / www的符号链接,该目录位于不同的分区(/ dev / sda3,安装在/ home上)。

谁能提供关于这里可能发生的情况的建议?服务器似乎可以正常工作,但我想确保分区表,文件系统或其他可能不会导致稍后爆破(或爆炸)的问题。


感谢所有有用的答案。我无法以普通用户身份创建文件,因此看来这是防止灾难发生的5%缓冲区。现在,我只需要弄清楚为什么磁盘已满(我有点担心会发生恶意事件,因为没有一个日志文件占用那么多空间,没有安装太多软件,只是一个简单的LAMP服务器) ...
克里斯(Chris

3
我要看的第一位是/ tmp。另一种可能性是您已删除了正在运行的程序所要保留的文件。我认为您可以运行'lsof | grep delete'作为根目录找到了。
斯科特,

Answers:


102

进程可能打开了一个较大的文件,此文件此后已被删除。您必须终止该过程以释放空间。您也许可以使用lsof来识别该过程。在Linux上,lsof知道已删除但尚未打开的文件,并在lsof的输出中将其标记为(已删除)。

你可以用 sudo lsof +L1


7
为我解决了这个谜。我从uwsgi中删除了一个大日志文件,而没有重新启动服务。查询时df -ah,我的磁盘已满,但du -sh /告诉我应该有可用空间。retart uwsgi之后,我有了很多可用空间!
Fabio Montefuscolo 2014年

我有40G的日志被困在一片混乱中,而lsof + L1使我有了X射线视线,以查看发生了什么事情;-)我要做的就是重启服务。
PJ Brunet '18

46

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

如果您有以非root用户身份运行的守护程序,但需要管理该文件系统中的文件,则事情将会中断。一种常见的此类守护程序是named。另一个是ntpd


1
为何您的磁盘已满的问题是7G确实没有多少空间。您似乎也将所有内容都转储到一个分区/文件系统(/)下。通常认为这是一件坏事(因为如果杂草/填满了,世界结束了),但是Linux发行版仍然坚持这样做,因为它“更简单”。首先,我将在/var(特别是/var/log)中查找大型日志文件。du -hs /(以root用户身份)将帮助您找到最大的目录,并可能指出需要清除的内容。
voretaq7 2011年


17

大多数Linux文件系统保留5%的空间,仅供root用户使用。

你可以用例如

dumpe2fs /dev/sda1 | grep -i reserved

您可以使用更改保留金额:

tune2fs -m 0 /dev/sda1

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


8

我遇到了这个问题,并且对以下事实感到困惑:删除各种大文件并不能改善情况(不知道5%的缓冲区)

从根目录走下来,重复执行以下操作显示的最大目录:

du -sh */ 

直到我进入Web服务器日志文件的目录,其中有一些绝对大量的日志

我被截断了

:>lighttpd.error.log

突然df -h的使用率降低到48%!


14
那真的应该以“ ...然后我设置日志轮换”结束。
hayalci 2012年

hayalci:发现logrotation指向错误的目录。
zzapper 2012年

8

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

  • 在充满数据的现有文件夹上“挂载”另一个磁盘
  • du将计算已安装磁盘的大小,而df将显示实际花费的大小
  • 解决方案:(如果可能)卸载所有非根磁盘,然后du -md 1再次检查其大小。通过将隐藏文件夹移动到其他位置或挂载到其他位置来修复情况。

您如何找到df以外的挂载点?
霍根

@Hogan:也许调用“ mount”或“ cat / etc / fstab”会有所帮助?
罗伯特·卢霍

5

df -h四舍五入值。甚至将百分比四舍五入。忽略-h,您会看到更细微的差异。

哦。ext3及其派生文件为这个有问题的星座保留了一个百分比(默认为5%)给文件系统。如果您的根文件系统真的很满(剩余0字节),则无法引导系统。因此,保留部分可以防止这种情况。


也可能是他的免费i节点用完了。运行“ df -i”以获取inode的使用情况。
Andrew Case

他没有提供的信息,该盘满。他只认为磁盘已满。100%的已使用空间没有错误,只是“几乎已满”。
mailq

1

我对几个库做了很大的更新,并且有很多不必要的库和临时文件,因此我使用以下命令释放“ /”文件夹中的空间:

apt-get install -f
sudo apt-get clean

倒空你的垃圾


这是减少磁盘使用量的合理一般建议,但并未解决df为什么说磁盘未满时为何已满的问题。
安德鲁·舒尔曼

0

检查/ lost + found,我有一个系统(centos 7),/ lost + found中的一些文件占用了所有空间


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.