如何确定哪个进程正在耗尽所有可用磁盘空间?

如何确定哪个进程正在耗尽所有可用磁盘空间?

突然间,所有可用磁盘空间都/消失了。

如果我在磁盘中腾出空间(例如,通过删除约 50GB 的内容),几分钟后我将回到 0 可用磁盘空间(根据df)。

显然,某些进程正在快速消耗磁盘空间,但我不知道它是什么。

不过有一点是肯定的:不管是什么,它一定会创建许多小文件,因为磁盘上没有大于 10GB 的文件,而且所有大于 1GB 的文件都比今天老得多。

如何找到正在占用磁盘空间的内容?


FWIW,只df看到问题,没有看到du

例如,下面我展示了几张 60 秒的“快照dudf。分开。 (我在磁盘中腾出一些空间后执行了此操作。)请注意 的du输出如何保持稳定(在495G),但df显示可用空间量稳步减少。 (我已遵循给出的建议这里。 IOW,/mnt/root正在指向/。)

# while true; do du -sh /mnt/root && df -h /mnt/root; sleep 60; done
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  824G   12G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  825G   11G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  827G  8.9G  99% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  827G  8.1G 100% /mnt/root
495G    /mnt/root
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       880G  828G  7.5G 100% /mnt/root

答案1

您正在处理已删除的文件,这就是为什么du不注册已用空间,而是df注册的原因。

删除的文件只有在所有者进程停止后才会消失;当这种情况没有发生时,它们仍然在使用。

因此,要找到罪魁祸首,我建议您这样做:

sudo lsof -nP | grep '(deleted)'

然后用于杀死进程。

sudo kill -9 $(lsof | grep deleted | cut -d " " -f4)

答案2

你可以使用iotop查看哪些进程正在执行最多的磁盘写入操作。

例子:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]

相关内容