bash 脚本在 RAID 重建完成后执行命令

bash 脚本在 RAID 重建完成后执行命令

有人有脚本来检查 RAID 重建何时完成然后执行命令吗?

我正在检查状态/proc/mdadm,当resync完成时,它应该执行一个命令来通知用户告诉我它已经完成。

我不确定 RAID 重建完成后最好检查哪个循环,而且我在互联网上没有找到这样的脚本。

答案1

的相关部分/proc/mdstat如下所示,其中U表示“向上”的设备和_“向下”的设备。当它恢复时,设备显示为“关闭”,因此我们可以等到所有设备再次“启动”。

md0 : active raid5 sda1[0] sdd1[2] sdb1[1]
     1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

所以,像这样:

dev=md0
until grep -A1 "^$dev :" /proc/mdstat | grep -q '\[UU*\]' ; do
    sleep 2
done 
run some command here...

(第一个grep查找给定的设备名称,并打印匹配行并在后面加一个。第二个查找括号之间的 sgrep -A1字符串。)U

当然,这从不首先检查恢复是否正在运行,我们需要更智能的逻辑来解释完整的输出,因为输出行的数量各不相同。

答案2

我在 ubuntu 18.04LTS 中执行此操作,所以也许grep有所不同,但A1给了你一行,所以你的检查不起作用。我将其更改为 grep -A2,现在至少可以返回您正在谈论的内容:

dev=md0
foo=$(grep -A2 "^$dev :" /proc/mdstat);echo $foo

输出示例:

md0 : active raid5 sdh1[0] sdg1[1] sdf1[2] sde1[4] 8790399744 blocks super 1.2 level 5, 256k chunk, algorithm 2 [4/4] [UUUU] bitmap: 0/22 pages [0KB], 65536KB chunk

所以,我认为应该这样写:

dev=md0
until grep -A2 "^$dev :" /proc/mdstat | grep -q '\[UU*\]' ; do
    sleep 2
done 
Whatever you want to do goes here.

干杯!

相关内容