James Doe Asked: 2018-02-10 02:12:04 +0800 CST2018-02-10 02:12:04 +0800 CST 2018-02-10 02:12:04 +0800 CST 当 RAID 重建完成时执行命令的 bash 脚本 772 是否有人有脚本来检查 RAID 重建何时完成然后执行命令? 我正在检查状态,/proc/mdadm当resync它完成时,它应该执行一个命令,通知用户告诉我它完成了。 我不确定当 RAID 完成重建时最好检查哪个循环,并且我在互联网上找不到这样的脚本。 bash mdadm 2 个回答 Voted Best Answer ilkkachu 2018-02-10T02:33:16+08:002018-02-10T02:33:16+08:00 的相关部分/proc/mdstat如下所示,其中U表示“向上”_的设备和“向下”的设备。当它恢复时,设备显示为“down”,所以我们可以等到所有设备再次“up”。 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查找给定的设备名称,然后grep -A1打印匹配的行加上一个。第二个查找U括号之间的 s 字符串。) 当然,这永远不会首先检查恢复是否正在运行,我们需要更智能的逻辑来解释完整的输出,因为输出行的数量会有所不同。 Nathan Corbett 2020-01-14T20:06:26+08:002020-01-14T20:06:26+08:00 我在 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. 干杯!
的相关部分
/proc/mdstat
如下所示,其中U
表示“向上”_
的设备和“向下”的设备。当它恢复时,设备显示为“down”,所以我们可以等到所有设备再次“up”。所以,像这样:
(第一个
grep
查找给定的设备名称,然后grep -A1
打印匹配的行加上一个。第二个查找U
括号之间的 s 字符串。)当然,这永远不会首先检查恢复是否正在运行,我们需要更智能的逻辑来解释完整的输出,因为输出行的数量会有所不同。
我在 ubuntu 18.04LTS 中执行此操作,所以可能
grep
有所不同,但A1
给了你一行,所以你的检查不起作用。我将其更改为 grep-A2
,现在至少可以返回您正在谈论的内容:示例输出:
所以,我认为它应该是:
干杯!