我知道有很多“ext4lazyinit”主题。但它们都是关于 4-6TB HDD 的,而且发帖者说它最终在几个小时后就完成了。
在我这边,我有一个新创建的 RAID5 区域,有 5*14TB 磁盘(因此总大小为 51TB),并且“ext4lazyinit”自 ... 6 天以来一直在运行(= 自上次重启以来,但可能在那之前已经运行了几天)。当然,它不断在阵列上生成 I/O。任何地方都没有错误,所以除此之外,一切似乎都很好。
但是,为什么要花这么长时间?好吧,磁盘阵列很大,但是... 6天?!
起初我并没有意识到这种行为,所以我在某个时间点(创建 raid 阵列几天后)重新启动了系统 - “ext4lazyinit”似乎在那之后自动重新启动了,但重新启动是否可能损坏了某些东西?
ps -ef|grep lazy
root 583 2 0 Dec02 ? 00:04:37 [ext4lazyinit]
有什么方法可以监控这个过程的进度吗(类似于cat /proc/mdstat
某些 mdadm 操作可用的方法)?(我无法在 dmesg、journalctl 或任何其他日志中找到任何内容)
需要注意的是(这也许可以解释为什么它这么慢?),I/O 的数量似乎随着时间的推移而保持不变,但相当低(所以也许该过程没有以全速 HDD 运行?)。有什么办法可以提高速度吗?
avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 0.42 1.17 0.00 98.17
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
mmcblk0 0.00 0.00 0.00 0 0
sda 3.00 0.00 8.50 0 17
sdb 5.00 256.00 264.50 512 529
sdc 4.00 192.00 200.50 384 401
sdd 4.00 64.00 72.50 128 145
sde 3.00 0.00 8.50 0 17
md0 0.50 0.00 256.00 0 512
答案1
我遇到了同样的问题。24GB RAID5 阵列,我昨天启动了 mkfs.ext4。将这个信息留在这里,以便其他看到这个帖子的人能够找到我找到的信息。
最简单的方法是关闭惰性选项,运行 mkfs.ext4,然后等待很长时间,让其初始化所有内容。如果您想使用阵列,那么在旋转磁盘上效果不会很好,因为在惰性初始化完成之前会发生大量分散的 I/O,这绝对会降低读/写速度。
mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
加速:使用此选项挂载:init_itable = 0(这是将块归零后等待时间的乘数(默认值为 10,这意味着在继续之前等待将最后一个块归零所用时间的 10 倍。0 = 立即执行,但它会占用更多的 I/O 带宽)。
上面评论中的链接(强制 ext4lazyinit 完成其工作?) 对于监控进度非常有用。当前写入与 fdisk 的总扇区。我已经运行了一天,现在已达到 54%,所以我想我快到了... lazy init 的运行速度大约为 10-12MB/s。
确保您没有在磁盘上执行任何其他操作,并且:
echo 1 > /proc/sys/vm/block_dump # Turn on logging in /var/log/syslog
fdisk -l /dev/md0 # Note total sectors.
echo 0 > /proc/sys/vm/block_dump # Turn of logging. Don't fill the log :)
将 syslog 中写入的扇区数除以 fdisk 中的总数。
希望这对遇到此问题的人有所帮助。现在我只需再等一天,直到完成,然后我就可以开始以不错的速度使用阵列了。(到那时,我仍然可以从中提取 30MB/s,所以这不是没有希望的)