我们有一台 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=
要使用什么。