RAID5 在增长后不会停止旋转(ext4lazyinit)

RAID5 在增长后不会停止旋转(ext4lazyinit)

我有一个由 3x5TB 磁盘组成的 RAID5 阵列,这些磁盘是使用 组装的mdadm。在此基础上,我创建了一个LUKS/dmcrypt加密层,并使用 格式化了加密设备ext4。我希望磁盘在闲置时停止旋转。

几个月来一切都运行良好,磁盘在一分钟不活动后就会停止旋转。现在,我通过 向阵列添加了第四个相同类型的 5TB 磁盘sudo mdadm --add /dev/md0 /dev/sdb1,然后将阵列扩展到该磁盘(mdadm --grow /dev/md0 --raid-devices=4),最后使用 和 扩展文件sudo fsck -f /dev/mapper/raid5系统sudo resize2fs /dev/mapper/raid5

没有发生任何错误,阵列现在大了 5TB。但磁盘不再旋转。机器全天候运行,没有使用磁盘,但尽管等待了几天,磁盘仍然一直在运行。

iotop显示频繁出现ext4lazyinit,每隔几秒弹出不到一秒。在扩大文件系统之前我没有注意到这一点。所以可能是这些任务使磁盘保持唤醒状态?但我如何强制ext4lazyinit完成它的任务?

答案1

ext4lazyinit所做的正是它所说的 - 它以一种惰性方式初始化文件系统的其余部分。这样做是为了给人一种快速生成文件系统的感觉。正如您所注意到的,它会尝试尽可能少地影响系统的性能,这意味着它将需要很长时间才能完成。

第一个选择是等待它 - 它最终会停止,并且你的磁盘应该恢复到空闲状态。


另一个选项是卸载文件系统,并临时用 挂载它-o init_itable=0,强制惰性初始化更加主动,但性能会受到影响。默认值为 10,因此如果性能在此期间很重要,也许可以尝试介于两者之间的值。(參考

init_itable=n    The lazy itable init code will wait n times the number of milliseconds
                 it took to zero out the previous block group's inode table. This
                 minimizes the impact on the system performance while file system's
                 inode table is being initialized.

第三个选项是禁用 itable 初始化 - 尽管在我看来,这是一个糟糕的选择,特别是对于正在生产并且可能有重要数据的文件系统(这就是您使用 RAID 的原因,对吗?)

您可以使用下列选项执行此noinit_itable操作:

noinit_itable     Do not initialize any uninitialized inode table blocks in the
                  background. This feature may be used by installation CD's so that the
                  install process can complete as quickly as possible; the inode table 
                  initialization process would then be deferred until the next time the
                  file system is unmounted.

编辑:持续时间的估计。

请记住,磁盘的写入性能约为 110-120MB/s...您正在运行一个阵列,因此在理想情况下,写入性能将提高到约 330-360MB/s ( 110 * (n - 1))。我还看到 RAID5 运行很多速度较慢 (使用 RAID 控制器的 8 个磁盘速度约为 40MB/s - 很痛苦)。

按照预估速度 110MB/s 计算,单磁盘 5TB 的完整初始化大约需要 12 个小时。

相关内容