【问题标题】:why does [df] tell me I have a full disk when root [du] tells me I've only filled the disk with ~500gb out of 5tb?为什么 [df] 告诉我当 root [du] 告诉我我只用 5tb 中的 ~500gb 填充磁盘时我有一个完整的磁盘?
【发布时间】:2021-11-29 22:27:08
【问题描述】:

我在 FUSE 文件系统中有一个新的 5tb 磁盘,我猜它基本上是空的,但 df 告诉我不然。磁盘上的文件系统是mergerfs。该设置由 4 个 5TB Seagate 5400rpm 外置硬盘组成,所有这些硬盘都使用fdisk 格式化为一个分区为ext4。我尝试以 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

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你提到了 FUSE。问题磁盘上的文件系统是什么?
  • @roaima 是的,我正在使用 FUSE。磁盘上的文件系统是mergefs。该设置包括 4 个 5TB Seagate 5400rpm 外置驱动器,所有这些都使用 fdisk 以相同的方式格式化。
  • fdisk 不格式化;它会创建分区表,为您创建文件系统做好准备。 mergefs 使用这些文件系统来创建合并结果
  • 好的,谢谢。我不太确定关于这个问题的信息会发生什么变化。你能帮我解释一下吗?这些驱动器都有 1 个分区,每个分区为 ext4。
  • 如果您卸载 mergefs 文件系统并依次安装每个单独的 ext4 文件系统,它们会显示什么用途(df vs du)?请将此信息添加到您的问题中。

标签: raspberry-pi filesystems disk-usage


【解决方案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 配置文件中添加 HUP (SIGHUP) 类型指令来解决,但在极少数情况下,您必须实际重新启动有问题的进程,因为它无法正确响应 HUP。

如果这是您遇到的情况,一旦您找到有问题的进程并重新启动它,df 报告的已用空间将突然急剧下降,而您的 dfdu 输出将匹配.

【讨论】:

  • 非常有趣的案例。感谢您对该特定问题的深入回答和澄清。不幸的是,在尝试调查此问题时,我似乎无法解决我的问题。目前我最好的猜测是,由于它是机械驱动器,我猜它可能是一个有问题的驱动器,即使驱动器是全新的。
猜你喜欢
  • 1970-01-01
  • 2013-02-05
  • 2010-10-17
  • 2021-01-30
  • 2015-04-12
  • 2012-10-25
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多