From 67d558dd2dcede7ddf3ccd5f383e752d617a17b9 Mon Sep 17 00:00:00 2001 From: Gitea Date: Sun, 6 Dec 2020 21:14:06 +0100 Subject: [PATCH] Added support for 'check' sync progress --- check_mdstat.sh | 51 +++++++++++--------- test/checking.input/md0/md/array_size | 1 + test/checking.input/md0/md/array_state | 1 + test/checking.input/md0/md/chunk_size | 1 + test/checking.input/md0/md/component_size | 1 + test/checking.input/md0/md/degraded | 1 + test/checking.input/md0/md/dev-sda1/slot | 1 + test/checking.input/md0/md/dev-sda1/state | 1 + test/checking.input/md0/md/dev-sdb1/slot | 1 + test/checking.input/md0/md/dev-sdb1/state | 1 + test/checking.input/md0/md/dev-sdc1/slot | 1 + test/checking.input/md0/md/dev-sdc1/state | 1 + test/checking.input/md0/md/last_sync_action | 1 + test/checking.input/md0/md/level | 1 + test/checking.input/md0/md/max_read_errors | 1 + test/checking.input/md0/md/raid_disks | 1 + test/checking.input/md0/md/rd0 | 1 + test/checking.input/md0/md/rd1 | 1 + test/checking.input/md0/md/rd2 | 1 + test/checking.input/md0/md/sync_action | 1 + test/checking.input/md0/md/sync_completed | 1 + test/checking.input/md0/md/sync_speed | 1 + test/checking.input/md0/queue/hw_sector_size | 1 + test/checking.output | 1 + test/recovering.output | 2 +- 25 files changed, 53 insertions(+), 23 deletions(-) create mode 100644 test/checking.input/md0/md/array_size create mode 100644 test/checking.input/md0/md/array_state create mode 100644 test/checking.input/md0/md/chunk_size create mode 100644 test/checking.input/md0/md/component_size create mode 100644 test/checking.input/md0/md/degraded create mode 100644 test/checking.input/md0/md/dev-sda1/slot create mode 100644 test/checking.input/md0/md/dev-sda1/state create mode 100644 test/checking.input/md0/md/dev-sdb1/slot create mode 100644 test/checking.input/md0/md/dev-sdb1/state create mode 100644 test/checking.input/md0/md/dev-sdc1/slot create mode 100644 test/checking.input/md0/md/dev-sdc1/state create mode 100644 test/checking.input/md0/md/last_sync_action create mode 100644 test/checking.input/md0/md/level create mode 100644 test/checking.input/md0/md/max_read_errors create mode 100644 test/checking.input/md0/md/raid_disks create mode 120000 test/checking.input/md0/md/rd0 create mode 120000 test/checking.input/md0/md/rd1 create mode 120000 test/checking.input/md0/md/rd2 create mode 100644 test/checking.input/md0/md/sync_action create mode 100644 test/checking.input/md0/md/sync_completed create mode 100644 test/checking.input/md0/md/sync_speed create mode 100644 test/checking.input/md0/queue/hw_sector_size create mode 100644 test/checking.output diff --git a/check_mdstat.sh b/check_mdstat.sh index 55c3d92..46f3972 100755 --- a/check_mdstat.sh +++ b/check_mdstat.sh @@ -57,8 +57,9 @@ CHUNK_SIZE_IN_BYTES= # size in bytes for chunks NUM_DEVICES=0 # int with total number of devices in raid NUM_ACTIVE_DEVICES=0 # int with number of active devices in raid NUM_SPARE_DEVICES=0 # int with number of spare devices in raid -RECOVERY_PROGRESS= # float in percent -RECOVERY_SPEED= # sync speed in K/s +rYNC_ACTION= # "idle", "check" or "recover" +SYNC_PROGRESS= # float in percent +SYNC_SPEED= # sync speed in K/s declare -A DEVICE_STATE # dict of strings. key = dev, value = state declare -A FAULTY_DEVICES # dict with only faulty devices. key = dev, value = true declare -A TO_REPLACE_DEVICES # dict of devices in raid that shall be replaced. key = dev, value = true @@ -71,15 +72,19 @@ function getDataFromSys { CHUNK_SIZE_IN_BYTES=$(<$INPUT/chunk_size) SIZE_IN_BLOCKS=$(<$INPUT/component_size) STATE=$(<$INPUT/array_state) - RECOVERY_PROGRESS=$(<$INPUT/sync_completed) - RECOVERY_SPEED=$(<$INPUT/sync_speed) + SYNC_ACTION=$(<$INPUT/sync_action) + if [ "$SYNC_ACTION" != "idle" ]; then + SYNC_PROGRESS=$(<$INPUT/sync_completed) + SYNC_SPEED=$(<$INPUT/sync_speed) + fi log "LEVEL = $LEVEL" log "STATE = $STATE" log "CHUNK_SIZE_IN_BYTES = $CHUNK_SIZE_IN_BYTES" log "SIZE_IN_BLOCKS = $SIZE_IN_BLOCKS" - log "RECOVERY_PROGRESS = $RECOVERY_PROGRESS" - log "RECOVERY_SPEED = $RECOVERY_SPEED" + log "SYNC_ACTION = $SYNC_ACTION" + log "SYNC_PROGRESS = $SYNC_PROGRESS" + log "SYNC_SPEED = $SYNC_SPEED" for dev in `find $INPUT -type d -name 'dev-*' -printf "%f\n"`; do local deviceName=${dev:4} @@ -106,15 +111,15 @@ function getDataFromSys { log "FAULTY_DEVICES = ${FAULTY_DEVICES[*]}" log "TO_REPLACE_DEVICES = ${TO_REPLACE_DEVICES[*]}" - if [ "$RECOVERY_PROGRESS" != "none" ]; then - RECOVERY_NUM=${RECOVERY_PROGRESS% /*} - log "'$RECOVERY_NUM'" - RECOVERY_DEN=${RECOVERY_PROGRESS#*/ } - log "'$RECOVERY_DEN'" - RECOVERY_PERCENT=$(($RECOVERY_NUM*100/$RECOVERY_DEN)) + if [ "$SYNC_ACTION" != "idle" ]; then + SYNC_NUM=${SYNC_PROGRESS% /*} + log "'$SYNC_NUM'" + SYNC_DEN=${SYNC_PROGRESS#*/ } + log "'$SYNC_DEN'" + SYNC_PERCENT=$(($SYNC_NUM*100/$SYNC_DEN)) BLOCK_SIZE=$(<$(dirname $INPUT)/queue/hw_sector_size) - RECOVERY_REMAINING_S=$(( ($RECOVERY_DEN-$RECOVERY_NUM)*$BLOCK_SIZE/1024/$RECOVERY_SPEED)) - RECOVERY_REMAINING_MIN=$(($RECOVERY_REMAINING_S/60)) + SYNC_REMAINING_S=$(( ($SYNC_DEN-$SYNC_NUM)*$BLOCK_SIZE/1024/$SYNC_SPEED)) + SYNC_REMAINING_MIN=$(($SYNC_REMAINING_S/60)) fi } @@ -140,10 +145,14 @@ function printOutputAndExit { info="${info}These devices should be replaced: ${!TO_REPLACE_DEVICES[@]}" fi - if [ "$RECOVERY_PROGRESS" != "none" ]; then + if [ "$SYNC_ACTION" == "recover" ]; then if [ -z "$result" ]; then result="WARNING"; fi if [ -n "$info" ]; then info="$info. "; fi - info="${info}Recovering: $RECOVERY_PERCENT%, remaining ${RECOVERY_REMAINING_MIN}min" + info="${info}Recovering: $SYNC_PERCENT%, remaining ${SYNC_REMAINING_MIN}min" + fi + if [ "$SYNC_ACTION" == "check" ]; then + if [ -n "$info" ]; then info="$info. "; fi + info="${info}Checking: $SYNC_PERCENT%, remaining ${SYNC_REMAINING_MIN}min" fi if [ -z "$result" ]; then result="OK"; fi @@ -160,12 +169,10 @@ function printOutputAndExit { echo -n " 'num active devices'=$NUM_ACTIVE_DEVICES;;;0;$NUM_DEVICES" echo -n " 'num failed devices'=${#FAILED_DEVICES[@]};;1;0;$NUM_DEVICES" echo -n " 'num spare devices'=$NUM_SPARE_DEVICES;;;0" - if [ "$RECOVERY_PROGRESS" != "none" ]; then - if [ -z "$result" ]; then result="WARNING"; fi - if [ -n "$info" ]; then info="$info. "; fi - echo -n " 'recovery progress'=$RECOVERY_NUM;0;;0;$RECOVERY_DEN" - echo -n " 'recovery speed [1/s]'=${RECOVERY_SPEED}K" - echo -n " 'recovery remaining'=${RECOVERY_REMAINING_S}s" + if [ "$SYNC_ACTION" != "idle" ]; then + echo -n " 'sync progress'=$SYNC_NUM;0;;0;$SYNC_DEN" + echo -n " 'sync speed [1/s]'=${SYNC_SPEED}K" + echo -n " 'sync remaining'=${SYNC_REMAINING_S}s" fi for dev in ${!DEVICE_STATE[@]}; do echo -n " 'dev $dev: ${DEVICE_STATE[$dev]}" diff --git a/test/checking.input/md0/md/array_size b/test/checking.input/md0/md/array_size new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/test/checking.input/md0/md/array_size @@ -0,0 +1 @@ +default diff --git a/test/checking.input/md0/md/array_state b/test/checking.input/md0/md/array_state new file mode 100644 index 0000000..8312630 --- /dev/null +++ b/test/checking.input/md0/md/array_state @@ -0,0 +1 @@ +clean diff --git a/test/checking.input/md0/md/chunk_size b/test/checking.input/md0/md/chunk_size new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/checking.input/md0/md/chunk_size @@ -0,0 +1 @@ +0 diff --git a/test/checking.input/md0/md/component_size b/test/checking.input/md0/md/component_size new file mode 100644 index 0000000..6086cfe --- /dev/null +++ b/test/checking.input/md0/md/component_size @@ -0,0 +1 @@ +976431104 diff --git a/test/checking.input/md0/md/degraded b/test/checking.input/md0/md/degraded new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/checking.input/md0/md/degraded @@ -0,0 +1 @@ +0 diff --git a/test/checking.input/md0/md/dev-sda1/slot b/test/checking.input/md0/md/dev-sda1/slot new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/test/checking.input/md0/md/dev-sda1/slot @@ -0,0 +1 @@ +2 diff --git a/test/checking.input/md0/md/dev-sda1/state b/test/checking.input/md0/md/dev-sda1/state new file mode 100644 index 0000000..9649910 --- /dev/null +++ b/test/checking.input/md0/md/dev-sda1/state @@ -0,0 +1 @@ +in_sync diff --git a/test/checking.input/md0/md/dev-sdb1/slot b/test/checking.input/md0/md/dev-sdb1/slot new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/checking.input/md0/md/dev-sdb1/slot @@ -0,0 +1 @@ +1 diff --git a/test/checking.input/md0/md/dev-sdb1/state b/test/checking.input/md0/md/dev-sdb1/state new file mode 100644 index 0000000..9649910 --- /dev/null +++ b/test/checking.input/md0/md/dev-sdb1/state @@ -0,0 +1 @@ +in_sync diff --git a/test/checking.input/md0/md/dev-sdc1/slot b/test/checking.input/md0/md/dev-sdc1/slot new file mode 100644 index 0000000..573541a --- /dev/null +++ b/test/checking.input/md0/md/dev-sdc1/slot @@ -0,0 +1 @@ +0 diff --git a/test/checking.input/md0/md/dev-sdc1/state b/test/checking.input/md0/md/dev-sdc1/state new file mode 100644 index 0000000..9649910 --- /dev/null +++ b/test/checking.input/md0/md/dev-sdc1/state @@ -0,0 +1 @@ +in_sync diff --git a/test/checking.input/md0/md/last_sync_action b/test/checking.input/md0/md/last_sync_action new file mode 100644 index 0000000..f03fc12 --- /dev/null +++ b/test/checking.input/md0/md/last_sync_action @@ -0,0 +1 @@ +check diff --git a/test/checking.input/md0/md/level b/test/checking.input/md0/md/level new file mode 100644 index 0000000..341b806 --- /dev/null +++ b/test/checking.input/md0/md/level @@ -0,0 +1 @@ +raid1 diff --git a/test/checking.input/md0/md/max_read_errors b/test/checking.input/md0/md/max_read_errors new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/test/checking.input/md0/md/max_read_errors @@ -0,0 +1 @@ +20 diff --git a/test/checking.input/md0/md/raid_disks b/test/checking.input/md0/md/raid_disks new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/test/checking.input/md0/md/raid_disks @@ -0,0 +1 @@ +3 diff --git a/test/checking.input/md0/md/rd0 b/test/checking.input/md0/md/rd0 new file mode 120000 index 0000000..d3a806e --- /dev/null +++ b/test/checking.input/md0/md/rd0 @@ -0,0 +1 @@ +dev-sdc1 \ No newline at end of file diff --git a/test/checking.input/md0/md/rd1 b/test/checking.input/md0/md/rd1 new file mode 120000 index 0000000..719a4fa --- /dev/null +++ b/test/checking.input/md0/md/rd1 @@ -0,0 +1 @@ +dev-sdb1 \ No newline at end of file diff --git a/test/checking.input/md0/md/rd2 b/test/checking.input/md0/md/rd2 new file mode 120000 index 0000000..d5e8cf1 --- /dev/null +++ b/test/checking.input/md0/md/rd2 @@ -0,0 +1 @@ +dev-sda1 \ No newline at end of file diff --git a/test/checking.input/md0/md/sync_action b/test/checking.input/md0/md/sync_action new file mode 100644 index 0000000..f03fc12 --- /dev/null +++ b/test/checking.input/md0/md/sync_action @@ -0,0 +1 @@ +check diff --git a/test/checking.input/md0/md/sync_completed b/test/checking.input/md0/md/sync_completed new file mode 100644 index 0000000..e4df7c6 --- /dev/null +++ b/test/checking.input/md0/md/sync_completed @@ -0,0 +1 @@ +1893234560 / 1952862208 diff --git a/test/checking.input/md0/md/sync_speed b/test/checking.input/md0/md/sync_speed new file mode 100644 index 0000000..5283c5a --- /dev/null +++ b/test/checking.input/md0/md/sync_speed @@ -0,0 +1 @@ +13718 diff --git a/test/checking.input/md0/queue/hw_sector_size b/test/checking.input/md0/queue/hw_sector_size new file mode 100644 index 0000000..4d0e90c --- /dev/null +++ b/test/checking.input/md0/queue/hw_sector_size @@ -0,0 +1 @@ +512 diff --git a/test/checking.output b/test/checking.output new file mode 100644 index 0000000..0cb502a --- /dev/null +++ b/test/checking.output @@ -0,0 +1 @@ +OK: Checking: 96%, remaining 36min | 'raid level: raid1'=0 'size in blocks'=976431104 'num devices'=3 'num active devices'=3;;;0;3 'num failed devices'=0;;1;0;3 'num spare devices'=0;;;0 'sync progress'=1893234560;0;;0;1952862208 'sync speed [1/s]'=13718K 'sync remaining'=2173s 'dev sdc1: in_sync'=0 'dev sdb1: in_sync'=0 'dev sda1: in_sync'=0 diff --git a/test/recovering.output b/test/recovering.output index 713d2b4..86bcb59 100644 --- a/test/recovering.output +++ b/test/recovering.output @@ -1 +1 @@ -CRITICAL: Missing 1 of 3 devices. Recovering: 88%, remaining 108min | 'raid level: raid1'=0 'size in blocks'=976431104 'num devices'=3 'num active devices'=2;;;0;3 'num failed devices'=0;;1;0;3 'num spare devices'=1;;;0 'recovery progress'=1728697856;0;;0;1952862208 'recovery speed [1/s]'=17170K 'recovery remaining'=6527s 'dev sdd1: spare'=0 'dev sdc1: in_sync'=0 'dev sda1: in_sync'=0 +CRITICAL: Missing 1 of 3 devices. Recovering: 88%, remaining 108min | 'raid level: raid1'=0 'size in blocks'=976431104 'num devices'=3 'num active devices'=2;;;0;3 'num failed devices'=0;;1;0;3 'num spare devices'=1;;;0 'sync progress'=1728697856;0;;0;1952862208 'sync speed [1/s]'=17170K 'sync remaining'=6527s 'dev sdd1: spare'=0 'dev sdc1: in_sync'=0 'dev sda1: in_sync'=0