也许使用sync_action或sync_completedsys 文件?

也许使用sync_action或sync_completedsys 文件?

/sys/block/mdXXX/md/raid_state我目前有一个逻辑,即通过查看来等待重新同步过程完成clean并假设重新同步已完成。但是,我认为这并不正确,因为在重新同步仍在进行时,RAID 可能处于干净状态。

有什么方法可以保证使用 mdadm 新创建的 raid1 阵列已完全完成重新同步过程?

mdadm 是否有内置方法来指定我们是否要等待重新同步完成?

我有一个 Rust 程序正在使用 mdadm 协调 RAID 创建。

    // above create RAID-1 using mdadm --create
    loop {
        let raid_state = read_file("/sys/block/mdXXX/md/raid_state")
        let sync_complete = raid_state == RaidState::Clean;

        if sync_complete {
            // do more
        }
    }

答案1

也许使用sync_actionsync_completedsys 文件?

我有两台基于 Debian 的机器,每台都有 MD RAID 1,内核分别为 5.19.0 和 6.1.0。两台机器都不是有一个raid_statesys 文件,但它们都有/sys/block/mdX/md/sync_action/sys/block/mdX/md/sync_completed

在 RAID 1 重新同步期间,它们显示重新同步状态和进度:

# cat /sys/block/mdX/md/sync_action
resync
# cat /sys/block/mdX/md/sync_completed
10491763200 / 27344500736

当重新同步完成后,输出如下:

# cat /sys/block/mdX/md/sync_action
idle
# cat /sys/block/mdX/md/sync_completed
none

因此您可以使用其中一个系统文件来检查是否完成。

请不要“忙着等”

另一方面,不要像代码示例中那样“忙等待”,否则您的机器将更忙于该循环而不是重新同步。我不会说 Rust,所以我不知道在迭代之间等待一段时间的最佳方法是什么。根据卷大小和磁盘速度,重新同步可能需要一天或更长时间,因此几分钟就可以了。

相关内容