当我运行时btrfs filesystem balance,这是否隐式地对文件进行碎片整理?我可以想象平衡只是分别重新分配每个文件范围,保留现有的碎片。
有一个常见问题条目,“平衡”有什么作用?,在这一点上不清楚:
btrfs 文件系统平衡是一种操作,它简单地获取文件系统上的所有数据和元数据,并将其重新写入磁盘上的不同位置,并在途中通过分配器算法。它最初是为多设备文件系统设计的,以便在设备之间更均匀地分布数据(即“平衡”它们的使用)。这在将新设备添加到几乎完整的文件系统时特别有用。
由于平衡的工作方式,它也有一些有用的副作用:
- 如果有大量已分配但未使用的数据或元数据块,则余额可能会回收部分已分配空间。这是在单设备文件系统上运行平衡的主要原因。
- 在复制损坏的文件系统上(例如,磁盘失效并被移除的 RAID-1 FS),它将强制 FS 在当前活动的设备之一上重建丢失的数据副本,恢复 RAID-1 功能文件系统。
文件系统“提交间隔”选项如何交互vm.dirty_expire_centisecs?当其中一个比另一个短时会发生什么?以不同的方式设置这些是否有意义?
我的理解是,文件系统提交间隔设置控制文件系统主动将脏数据和元数据写入磁盘的频率,即使fsync应用程序尚未调用也是如此。
单独来看,vm.dirty_expire_centisecs似乎有类似的作用,但在 VM 层而不是文件系统层。
Ext4 可以被告知每隔“nrsec”秒同步其所有数据和元数据。默认值为 5 秒。这意味着,如果您断电,您将丢失最近 5 秒的工作(不过,由于日志功能,您的文件系统不会被损坏)。
设置定期提交的时间间隔。较高的值会推迟将数据同步到永久存储,从而在系统崩溃时产生明显的后果。
请注意,我暂时忽略 XFS,因为它的fs.xfs.xfssyncd_centisecs选项似乎仅适用于元数据。
此可调参数用于定义脏数据何时足够旧,可以由内核刷新器线程写出。它以百分之一秒表示。内存中脏数据的时间超过此时间间隔的数据将在下次刷新器线程唤醒时被写出。