diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-25 13:11:57 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-02-25 17:54:02 +0000 |
commit | 6170eacc6852ef3165f616f1506df923ce0fa38e (patch) | |
tree | f5a6af017e0c7b9a62e51268d1387101879c2722 /debian/checkarray | |
parent | Marking maintainer scripts executable in debian tree. (diff) | |
download | mdadm-6170eacc6852ef3165f616f1506df923ce0fa38e.tar.xz mdadm-6170eacc6852ef3165f616f1506df923ce0fa38e.zip |
Moving scripts to subdirectory in debian tree.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/checkarray')
-rwxr-xr-x | debian/checkarray | 221 |
1 files changed, 0 insertions, 221 deletions
diff --git a/debian/checkarray b/debian/checkarray deleted file mode 100755 index 2fb7ee7..0000000 --- a/debian/checkarray +++ /dev/null @@ -1,221 +0,0 @@ -#!/bin/sh -# -# checkarray -- initiates a check run of an MD array's redundancy information. -# -# Copyright © martin f. krafft <madduck@debian.org> -# distributed under the terms of the Artistic Licence 2.0 -# -set -eu - -PROGNAME=${0##*/} - -about() -{ - echo "\ -$PROGNAME -- MD array (RAID) redundancy checker tool -Copyright © martin f. krafft <madduck@debian.org> -Released under the terms of the Artistic Licence 2.0" -} - -usage() -{ - about - echo " -Usage: $PROGNAME [options] [arrays] - -Valid options are: - -a|--all check all assembled arrays (ignores arrays in command line). - -s|--status print redundancy check status of devices. - -x|--cancel queue a request to cancel a running redundancy check. - -r|--repair repair instead of check - -i|--idle perform check in a lowest scheduling class (idle) - -l|--slow perform check in a lower-than-standard scheduling class - -f|--fast perform check in higher-than-standard scheduling class - --realtime perform check in real-time scheduling class (DANGEROUS!) - -c|--cron honour AUTOCHECK setting in /etc/default/mdadm. - -q|--quiet suppress informational messages - (use twice to suppress error messages too). - -h|--help show this output. - -V|--version show version information. - -Examples: - $PROGNAME --all --idle - $PROGNAME --quiet /dev/md[123] - $PROGNAME -sa - $PROGNAME -x --all - -Devices can be specified in almost any format. The following are equivalent: - /dev/md0, md0, /dev/md/0, /sys/block/md0 - -You can also control the status of a check/repair with /proc/mdstat file." -} - -SHORTOPTS=achVqQsxrilf -LONGOPTS=all,cron,help,version,quiet,real-quiet,status,cancel,repair,idle,slow,fast,realtime - -eval set -- $(getopt -o $SHORTOPTS -l $LONGOPTS -n $PROGNAME -- "$@") - -arrays='' -cron=0 -all=0 -quiet=0 -status=0 -action=check -ionice= - -for opt in $@; do - case "$opt" in - -a|--all) all=1;; - -s|--status) action=status;; - -x|--cancel) action=idle;; - -r|--repair) action=repair;; - -i|--idle) ionice=idle;; - -l|--slow) ionice=low;; - -f|--fast) ionice=high;; - --realtime) ionice=realtime;; - -c|--cron) cron=1;; - -q|--quiet) quiet=$(($quiet+1));; - -Q|--real-quiet) quiet=$(($quiet+2));; # for compatibility - -h|--help) usage; exit 0;; - -V|--version) about; exit 0;; - /dev/md/*|md/*) arrays="${arrays:+$arrays }md${opt#*md/}";; - /dev/md*|md*) arrays="${arrays:+$arrays }${opt#/dev/}";; - /sys/block/md*) arrays="${arrays:+$arrays }${opt#/sys/block/}";; - --) :;; - *) echo "$PROGNAME: E: invalid option: $opt. Try --help." >&2; exit 1;; - esac -done - -is_true() -{ - case "${1:-}" in - [Yy]es|[Yy]|1|[Tt]rue|[Tt]) return 0;; - *) return 1; - esac -} - -DEBIANCONFIG=/etc/default/mdadm -[ -r $DEBIANCONFIG ] && . $DEBIANCONFIG -if [ $cron = 1 ] && ! is_true ${AUTOCHECK:-false}; then - [ $quiet -lt 1 ] && echo "$PROGNAME: I: disabled in $DEBIANCONFIG ." >&2 - exit 0 -fi - -if [ ! -f /proc/mdstat ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: E: MD subsystem not loaded, or /proc unavailable." >&2 - exit 2 -fi - -if [ ! -d /sys/block ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: E: /sys filesystem not available." >&2 - exit 7 -fi - -if [ -z "$(ls /sys/block/md* 2>/dev/null)" ]; then - if [ $quiet -lt 2 ] && [ $cron != 1 ]; then - echo "$PROGNAME: W: no active MD arrays found." >&2 - echo "$PROGNAME: W: (maybe uninstall the mdadm package?)" >&2 - fi - exit 0 -fi - -if [ -z "$(ls /sys/block/md*/md/level 2>/dev/null)" ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: E: kernel too old, no support for redundancy checks." >&2 - exit 6 -fi - -if ! egrep -q '^raid([1456]|10)$' /sys/block/md*/md/level 2>/dev/null; then - [ $quiet -lt 1 ] && echo "$PROGNAME: I: no redundant arrays present; skipping checks..." >&2 - exit 0 -fi - -if [ -z "$(ls /sys/block/md*/md/sync_action 2>/dev/null)" ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: E: no kernel support for redundancy checks." >&2 - exit 3 -fi - -[ $all = 1 ] && arrays="$(ls -d1 /sys/block/md* | cut -d/ -f4)" - -for array in $arrays; do - MDBASE=/sys/block/$array/md - - if [ ! -e $MDBASE/sync_action ]; then - [ $quiet -lt 1 ] && echo "$PROGNAME: I: skipping non-redundant array $array." >&2 - continue - fi - - cur_status="$(cat $MDBASE/sync_action)" - - if [ $action = status ]; then - echo "$array: $cur_status" - continue - fi - - if [ ! -w $MDBASE/sync_action ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: E: $MDBASE/sync_action not writeable." >&2 - exit 4 - fi - - if [ "$(cat $MDBASE/array_state)" = 'read-auto' ]; then - [ $quiet -lt 1 ] && echo "$PROGNAME: W: array $array in auto-read-only state, skipping..." >&2 - continue - fi - - case "$action" in - idle) - echo $action > $MDBASE/sync_action - [ $quiet -lt 1 ] && echo "$PROGNAME: I: cancel request queued for array $array." >&2 - ;; - - check|repair) - if [ "$cur_status" != idle ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: W: array $array not idle, skipping..." >&2 - continue - fi - - # check if the array created recently and skip test if it is - created=$(mdadm --detail /dev/$array 2>/dev/null | - sed -n 's/.*Creation Time *://p' ) - if [ -n "$created" ]; then - created=$(date +%s -d "$created" 2>/dev/null) - fi - if [ -n "$created" ]; then - now=$(date +%s) - if [ "$created" -lt "$now" -a \ - "$created" -gt "$(($now - 14 * 24 * 60 * 60))" ]; then - [ $quiet -lt 2 ] && echo "$PROGNAME: I: array $array created recently, skipping..." >&2 - continue - fi - fi - - # queue request for the array. The kernel will make sure that these requests - # are properly queued so as to not kill one of the arrays. - echo $action > $MDBASE/sync_action - [ $quiet -lt 1 ] && echo "$PROGNAME: I: $action queued for array $array." >&2 - - case "$ionice" in - idle) ioarg='-c3'; renice=15;; - low) ioarg='-c2 -n7'; renice=5;; - high) ioarg='-c2 -n0'; renice=0;; - realtime) ioarg='-c1 -n4'; renice=-5;; - *) continue;; - esac - - resync_pid= wait=5 - while [ $wait -gt 0 ]; do - wait=$((wait - 1)) - resync_pid=$(ps -ef | awk -v dev=$array 'BEGIN { pattern = "^\\[" dev "_resync]$" } $8 ~ pattern { print $2 }') - if [ -n "$resync_pid" ]; then - [ $quiet -lt 1 ] && echo "$PROGNAME: I: selecting $ionice I/O scheduling class and $renice niceness for resync of $array." >&2 - ionice -p "$resync_pid" $ioarg 2>/dev/null || : - renice -n $renice -p "$resync_pid" 1>/dev/null 2>&1 || : - break - fi - sleep 1 - done - ;; - esac - -done - -exit 0 |