已用

已用

昨天晚上,我运行了一些程序,产生了比我预期更多的输出数据,结果填充了根 ext4 分区。我杀死了有问题的进程并开始删除我不再需要的无关数据,然后看到了这个:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.4G     0  3.4G   0% /dev
tmpfs           690M   11M  680M   2% /run
/dev/sda4       810G  806G     0 100% /
tmpfs           3.4G     0  3.4G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.4G     0  3.4G   0% /sys/fs/cgroup
/dev/sda1       476M   26M  450M   6% /boot/efi
tmpfs           690M     0  690M   0% /run/user/1000

正如您所看到的,即使“已使用”比“大小”小 4 GB,也没有可用空间。假设这些是某个进程打开的已删除文件,我使用 lsof 发现最大的文件是 64MB /memfd:pulseaudio。

困惑的是,我重新启动了系统,几乎确定它会解决问题。然而,df 的输出没有改变。

这怎么可能?我该如何解决它?

$ uname -a
Linux ... 4.16.0-1-amd64 #1 SMP Debian 4.16.5-1 (2018-04-29) x86_64 GNU/Linux
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l

答案1

ext4有一个“保留块”的概念,只能由以 root 身份运行的进程填充。的输出可能会df考虑到这一点。

例如,在一个系统上,df显示:

Filesystem          1K-blocks      Used Available Use% Mounted on
/dev/sda1            30626752  14557916  14490036  51% /

这里,30626752 - 14557916 - 14490036 等于 1578800,大约是总数的 5%,即保留块的默认数量。将保留块百分比更改为零调2fs( tune2fs -m 0 /dev/sda1) 更改了 所示的数字df

Filesystem          1K-blocks      Used Available Use% Mounted on
/dev/sda1            30626752  14557924  16052444  48% /

(数字仍然不完全匹配,有 16384 个 1k 块未计算在内,但我认为这是由于某些内部文件系统结构由于某种原因未计为“已使用”。)

相关内容