我在 FUSE 文件系统中有一个新的 5tb 磁盘,我猜它基本上是空的,但 df 告诉我不然。磁盘上的文件系统是mergerfs
.该设置由 4 个 5TB Seagate 5400rpm 外置硬盘组成,所有这些硬盘均已使用 1 个分区进行ext4
格式化fdisk
。我尝试以 root 身份进入并使用 du 检查,它告诉我大约使用了 500GB 的空间。
pi@raspberrypi:~ $ df -h /mnt/hdd/disk4
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 4.6T 4.3T 393M 100% /mnt/hdd/disk4
root@raspberrypi:~# du -sh /mnt/hdd/disk4
464G /mnt/hdd/disk4
有人可以帮我解决这个问题吗?
答案1
这是我以前遇到过的情况,尽管这是我经验中的极端情况。当有文件已从磁盘中删除时,通常会发生这种情况,因此du
不会报告它们,但它们仍然在某处正在运行的进程中打开,因此df
请考虑所使用的空间。最常见的“罪犯”是 logrotate 没有正确重新启动日志记录进程,从而导致以下情况:
- 您在磁盘上看到的日志文件可能会也可能不会写入
- 日志写入进程正在写入(可能)活动日志文件(例如
app.log
)和前一天的日志文件(例如2022-01-03-app.log
,当今天是 2022-01-04 时),但前一天的文件是在ls
(例如2022-01-03-app.log.gz
) - 未压缩时,前一天的日志文件会占用大量空间(数十 GB)
在这个特定的例子中,logrotate
守护进程在午夜轮换了前一天的日志文件,并为其赋予了前一天的时间戳,但实际上并没有通过写入它的进程触发日志重新启动。它压缩了前一天的日志文件,然后删除了未压缩的文件,但由于写入进程仍打开文件句柄,df
因此认为该空间已被占用。
通常可以通过在 logrotate 配置文件中添加 (SIGHUP) 类型指令来解决该问题HUP
,但在极少数情况下,您必须实际重新启动有问题的进程,因为它无法正确响应 HUP。
如果这是您遇到的情况,一旦您找到有问题的进程并重新启动它,报告的已用空间df
将突然急剧下降,并且您的df
输出du
将匹配。