如何确定 Linux 中已用磁盘空间缓慢增加的原因?

如何确定 Linux 中已用磁盘空间缓慢增加的原因?

我刚刚在 Raspberry Pi 3B 上全新安装了 Raspian Buster Lite,并安装了普罗米修斯随着节点导出器只需进行一些简单的诊断 - 特别是可用磁盘空间。

问题是可用磁盘空间似乎不断减少。我可以使用 检查可用字节数df -B1,它返回以下内容(使用的“16 GB”SD 卡中的 13.08 GB):

pi@raspberrypi:/home $ df -B1

Filesystem       1B-blocks       Used   Available Use% Mounted on
/dev/root      15383740416 1647845376 13078351872  12% /
devtmpfs         480808960          0   480808960   0% /dev
tmpfs            485527552          0   485527552   0% /dev/shm
tmpfs            485527552    6459392   479068160   2% /run
tmpfs              5242880       4096     5238784   1% /run/lock
tmpfs            485527552          0   485527552   0% /sys/fs/cgroup
/dev/mmcblk0p1   264289280   54748672   209540608  21% /boot
tmpfs             97103872          0    97103872   0% /run/user/1000

如果我定期检查这一点,它就会减少。几分钟后检查显示如下:

Filesystem       1B-blocks       Used   Available Use% Mounted on
/dev/root      15383740416 1648463872 13077733376  12% /
devtmpfs         480808960          0   480808960   0% /dev
tmpfs            485527552          0   485527552   0% /dev/shm
tmpfs            485527552    6459392   479068160   2% /run
tmpfs              5242880       4096     5238784   1% /run/lock
tmpfs            485527552          0   485527552   0% /sys/fs/cgroup
/dev/mmcblk0p1   264289280   54748672   209540608  21% /boot
tmpfs             97103872          0    97103872   0% /run/user/1000

我可以使用以下命令在 Prometheus 数据库中检查此指标格拉法纳

在此输入图像描述

它很可能只是一些日志或其他东西,但我想更好地理解它。根据此图,空间似乎正在以每小时 2.9 MB 左右的速度减少,这对我来说似乎很多。

理想情况下,我想我正在寻找一种方法来仅查看大小已更改的文件,比如说在最后一刻或其他情况下。追踪其来源的好方法是什么?感谢您的耐心等待 - 我是 Linux 新手。


编辑

如果有人感兴趣,我发现几乎所有 2.9 MB/小时都可以归因于 Prometheus 中的预写日志 (WAL) - 您可以阅读有关它如何存储数据的信息这里。我能够使用命令观察 WAL 目录的建立

watch -d "sudo du -s -B1 /home/pi/prometheus/data/*"

它很好地突出显示了正在变化的文件:

在此输入图像描述

正如 Richie Frame 暗示的那样,每隔一段时间(我相信在 Prometheus 中默认情况下应该是每 2 小时一次,但我需要检查一下)数据会从 WAL 中压缩并放入更永久的存储中,这更有效就所需磁盘空间而言是高效的。您可以在 Grafana 上看到压缩的发生(这是在一夜之间进行的,而 Pi 则闲置在那里),并且释放了一些磁盘空间:

在此输入图像描述

我不知道为什么磁盘空间似乎每 4 小时就会大幅跳跃,而不是预期的 2 小时,但这是另一天的任务。感谢大家的帮助!

答案1

我的建议是这个命令:

watch -d "ls -lt /var/log/**/* | head"

watch默认情况下每 2 秒运行一次以下命令。该-d标志突出显示每次执行后的差异。

ls -lt根据上次修改日期列出文件(首先是最新的),**/*是一个递归查找所有文件的 glob。

最后,head用于仅输出前 10 行。

答案2

您可以使用类似的方法找到系统上最近更新的文件

find / -type f -newermt '-5 minutes'`

您可以将其与尺寸显示结合起来:

find / -type f -newermt '-5 minutes' -exec stat -c '%10s %n' {} + `

答案3

作为 root 做crontab -e 并做类似的事情

30 * * * * *   /root/checkmydiskspace.sh

这将每半小时运行一次 bash 脚本/root/checkmydiskspace.sh,您必须创建该脚本。查找 crontab 并决定是否需要更频繁地检查。

该脚本将是这样的,并且会输出必要的信息来帮助您查明在哪里随着时间的推移,磁盘空间会被耗尽。

#!/bin/bash

now=$(date '+%Y-%m-%d-%H:%M')

filename=wheremydiskspacegone_$now.log

du -sh /* > /root/$filename

还,chmod 744 /root/checkmydiskspace.sh

查看创建的日志文件,找出发生的事情,然后更改du -sh /*du -sh /usr/*例如;进入du显示使用空间最多的子文件夹。

当然,您可以du -sh /*预先查看哪个文件夹包含最多的内容,这可能是罪魁祸首。但是,通过所有日志文件,每 X 分钟或其他时间,您就拥有了推断具体发生的情况和地点所需的一切。然后就需要确定是哪个程序或进程导致了这种情况。

相关内容