BTRFS 平衡占用 100% CPU 和 100% I/O

BTRFS 平衡占用 100% CPU 和 100% I/O

我们有一台 SuSE 12,sp3 服务器(SLES,不是 openSuSE)。系统上只有一个磁盘在使用,即根磁盘,其下挂载了多个使用 BTRFS 文件系统的文件系统。

我们发现在生产日的中间阶段启动“btrfs 平衡”作业时出现了问题。这似乎会锁定服务器,尽管实际发生的情况是平衡进程消耗了 100% 的 CPU 和 100% 的 I/O。

因为我们只有一个磁盘,并且平衡操作的原因是平衡所有设备之间的块组,所以我们真的需要运行平衡操作吗?

答案1

因为我们只有一个磁盘,并且平衡操作的原因是平衡所有设备之间的块组,所以我们真的需要运行平衡操作吗?

这是主要原因,但不是唯一原因。

我的回答有点儿像轶事。我将描述两种btrfs balance对我有用的场景。在这两种情况下,Btrfs 文件系统都存在于单个设备上。这是关于家庭使用情况的,但答案可能会给你一些线索。


第一个设备大约 1.8 TB。我已经使用这个文件系统几年了。在过去的几个月里,可用空间在 100 GB 以下波动,我不断添加新文件并删除一些旧文件。

有一天,我遇到了“设备上没有剩余空间”的问题,这真是出乎意料。我通常使用df而不是btrfs fi df,该工具报告 0 字节可用空间。我删除了一些可消耗文件,几 GB,然后df报告大约有 20 GB 可用空间。我能够再次添加新数据。在某个时候,可用df空间从大约 20 GB 跳升到 0 字节。此后,我设法添加更多数据(兆字节而不是 GB),直到我遇到“没有剩余空间”。

这种情况重复了几次,但我不得不删除越来越多的文件才能继续运行。阈值,我第一次观察到时是 20 GB,后来增长到大约 120 GB。最后我据称有 120 GB 的可用空间,但我只能写入几 GB,然后就出现“没有剩余空间”的情况。

btrfs balance start …有帮助。完成后,我成功地将大约 50 GB 写入文件系统。

看什么man 8 btrfs-balance说了关于“使块组使用更加紧凑”(usage过滤器,示例)。比较这个答案,它比我的故事技术性更强。


第二个设备是我的 SSD。我注意到fstrim -v …报告的修剪字节数比我预期的要少。只有在btrfs balance start …数量达到我的预期后。比较这个问题

不过,我并不经常平衡 SSD。我fstrim -v …大约每周调用一次;只有当我确认修剪“太少”时,我才知道是时候平衡(并再次修剪)了。


所以是的,您可能需要运行平衡。 带有“没有剩余空间”的场景fstrim可能不适用于您的设置,但带有“没有剩余空间”的场景可能适用。 一些提示:

  • 也许您不需要经常运行平衡。
  • 考虑不要在“生产日的中间”运行它。
  • 你可能不需要运行完整的余额。例子提供man 8 btrfs-balance了一些见解。有了它,btrfs fi df您就可以估计是否需要平衡以及-dusage=要使用什么。

相关内容