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

Chr*_*ris 79 linux ubuntu partition

在运行 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
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑有两个原因:1.) df 说 /dev/sda1 安装在 /,有 7.4 GB 的容量,其中只有 7.0 GB 正在使用中,但它报告 / 100% 已满;和 2.) 我可以在 / 上创建文件,所以它显然还有空间。

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

任何人都可以就这里可能发生的事情提供建议吗?服务器似乎正常工作,但我想确保分区表、文件系统或其他可能导致稍后内爆(或爆炸)的问题没有问题。

mko*_*tee 132

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

你可以检查这个 sudo lsof +L1

  • 它为我解开了谜团。我从 uwsgi 中删除了一个大日志文件,而没有重新启动服务。当查询 `df -ah` 时,我的磁盘已满,但是 `du -sh /` 告诉我应该有可用空间。重新启动 uwsgi 后,我得到了很多可用空间! (9认同)

Dav*_*rtz 54

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

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


小智 39

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

df -i
Run Code Online (Sandbox Code Playgroud)


Dav*_*win 19

大多数 Linux 文件系统(ext3、ext4)保留 5% 的空间仅供 root 用户使用。

你可以看到这个,例如

dumpe2fs /dev/sda1 | grep -i reserved
Run Code Online (Sandbox Code Playgroud)

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

tune2fs -m 0 /dev/sda1
Run Code Online (Sandbox Code Playgroud)

0 在此命令中代表磁盘大小的百分比,因此您可能希望至少保留 1%。

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


小智 12

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

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


zza*_*per 10

我遇到了这个问题,并且对删除各种大文件并没有改善情况(不知道 5% 缓冲区)这一事实感到困惑,无论如何遵循这里的一些线索

从根开始,通过重复执行以下操作显示的最大目录:-

du -sh */ 
Run Code Online (Sandbox Code Playgroud)

直到我来到一个包含一些绝对大量日志的网络服务器日志文件的目录

我截断了

:>lighttpd.error.log
Run Code Online (Sandbox Code Playgroud)

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

  • 那真的应该以“......然后我设置日志轮换”结束。 (18认同)

mai*_*ilq 8

df -h正在四舍五入这些值。甚至百分比也是四舍五入的。省略-h,您会看到更细粒度的差异。

哦。并且 ext3 和派生类为文件系统保留了一个百分比(默认为 5%),正是这个有问题的星座。如果您的根文件系统真的满了(剩余 0 个字节),您将无法启动系统。所以保留部分可以防止这种情况。