df 报告 ext4 分区已满,但没有数据

han*_*nes 6 filesystem ext4

我最近收到一个警告,我的主分区已满。它是一个安装在 上的 Ext4 分区/home/dev/sda是一个 240 GB 的 SSD:

hannes@XFLR6 ~> df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              19G  5.2G   13G  30% /
none                  3.9G  792K  3.9G   1% /dev
none                  3.9G  2.4M  3.9G   1% /dev/shm
none                  3.9G  712K  3.9G   1% /var/run
none                  3.9G     0  3.9G   0% /var/lock
/dev/sda5             193G  175G  7.9G  96% /home
/dev/sdb5             357G   92G  264G  26% /mnt/schacht
Run Code Online (Sandbox Code Playgroud)

如您所见,df -h(和 gparted)报告/dev/sda5已满 96%。但是,Ubuntu Disk Usage Analyzer 并du -h只能找到大约 89 GB 的数据。~/.gvfs是空的,下面没有挂载其他文件系统/home。怎么可能?我已经尝试du以 root 身份运行,但它没有改变任何东西。

root@XFLR6 ~# sudo fdisk -l /dev/sda

Disk /dev/sda: 240.1 GB, 240057409536 bytes
255 heads, 63 sectors/track, 29185 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003e4c5

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        2432    19530752   83  Linux
/dev/sda2            2432       28450   208984065    5  Extended
/dev/sda5            2432       27963   205077504   83  Linux
/dev/sda6           27963       28450     3905536   82  Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)

编辑:哎呦-我只跑了du~不是/home-有很多无意中复制到数据/home。我的不好,对不起。

Ric*_*chm 11

可能是某个进程仍然打开了已删除的文件。如果是这种情况,它们将不会出现在du输出中,但仍会被计入df输出中。

检查这些的一种快速方法是/proc作为用户列出root(提示sudo su应该为您提供一个 root shell)。任何打开但已删除的文件都将(deleted)位于符号链接目标名称的末尾。

ls -l /proc/*/fd/* | grep deleted | grep /home
Run Code Online (Sandbox Code Playgroud)

应该给你一个打开的任何文件的列表。一旦你有了它,那么ls -lL特定文件的一个应该给你文件的大小。

作为一个例子(/tmp在我的系统上使用,因为这里没有例子/home)我看到了一些用户拥有的文件mysql

richm@viking:/$ sudo su
root@viking:/# ls -l /proc/*/fd/* | grep deleted | grep /tmp
lrwx------ 1 root     root     64 Oct 13 06:30 /proc/1489/fd/11 -> /tmp/ibwmCqpg (deleted)
lrwx------ 1 root     root     64 Oct 13 06:30 /proc/1491/fd/12 -> /tmp/ib9MTMQi (deleted)
root@viking:/# ls -lL /proc/1489/fd/11
-rw------- 0 mysql2 mysql2 0 Aug 24 14:09 /proc/1489/fd/11
root@viking:/# ls -lL /proc/1491/fd/12
-rw------- 0 mysql mysql 1320 Oct 15 13:40 /proc/1491/fd/12
Run Code Online (Sandbox Code Playgroud)

如果您有任何打开大文件的进程,那么停止该进程应该足以回收磁盘空间。或者,重新启动应该做同样的事情。


dde*_*eke 1

每个文件系统只有一定数量的可存储的索引节点和块。即使有足够的空间,你也无法走得更远。

检查您的设置

dumpe2fs /dev/sda5
Run Code Online (Sandbox Code Playgroud)

(这里只有前 50 行很重要)。

如果您有很多小于块大小的小文件,则会浪费大量空间。

  • 这与原来的问题有什么关系?如果空间不足,那么无论您有多少文件或文件大小,您都没有空间。无论文件大小,`df` 都会报告正确的使用大小,除非您使用 -b 标志。 (2认同)