/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_action
或sync_completed
sys 文件?
我有两台基于 Debian 的机器,每台都有 MD RAID 1,内核分别为 5.19.0 和 6.1.0。两台机器都不是有一个raid_state
sys 文件,但它们都有/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,所以我不知道在迭代之间等待一段时间的最佳方法是什么。根据卷大小和磁盘速度,重新同步可能需要一天或更长时间,因此几分钟就可以了。