rpms/mdadm/devel mdadm-raid-check-sysconfig, NONE, 1.1 raid-check, 1.3, 1.4
Doug Ledford
dledford at fedoraproject.org
Fri Jul 24 17:43:39 UTC 2009
Author: dledford
Update of /cvs/extras/rpms/mdadm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv6658
Modified Files:
raid-check
Added Files:
mdadm-raid-check-sysconfig
Log Message:
* Fri Jul 24 2009 Doug Ledford <dledford at redhat.com> - 3.0-2
- Improved raid-check script as well as the ability to configure what devices
get checked
- Endian patch for uuid generation
--- NEW FILE mdadm-raid-check-sysconfig ---
#!/bin/bash
#
# Configuration file for /etc/cron.weekly/raid-check
#
# options:
# ENABLED - must be yes in order for the raid check to proceed
# CHECK - can be either check or repair depending on the type of
# operation the user desires. A check operation will scan
# the drives looking for bad sectors and automatically
# repairing only bad sectors. If it finds good sectors that
# contain bad data (meaning that the data in a sector does
# not agree with what the data from another disk indicates
# the data should be, for example the parity block + the other
# data blocks would cause us to think that this data block
# is incorrect), then it does nothing but increments the
# counter in the file /sys/block/$dev/md/mismatch_count.
# This allows the sysadmin to inspect the data in the sector
# and the data that would be produced by rebuilding the
# sector from redundant information and pick the correct
# data to keep. The repair option does the same thing, but
# when it encounters a mismatch in the data, it automatically
# updates the data to be consistent. However, since we really
# don't know whether it's the parity or the data block that's
# correct (or which data block in the case of raid1), it's
# luck of the draw whether or not the user gets the right
# data instead of the bad data. This option is the default
# option for devices not listed in either CHECK_DEVS or
# REPAIR_DEVS.
# CHECK_DEVS - a space delimited list of devs that the user specifically
# wants to run a check operation on.
# REPAIR_DEVS - a space delimited list of devs that the user
# specifically wants to run a repair on.
# SKIP_DEVS - a space delimited list of devs that should be skipped
#
# Note: the raid-check script intentionaly runs last in the cron.weekly
# sequence. This is so we can wait for all the resync operations to complete
# and then check the mismatch_count on each array without unduly delaying
# other weekly cron jobs. If any arrays have a non-0 mismatch_count after
# the check completes, we echo a warning to stdout which will then me emailed
# to the admin as long as mails from cron jobs have not been redirected to
# /dev/null. We do not wait for repair operations to complete as the
# md stack will correct any mismatch_cnts automatically.
#
# Note2: you can not use symbolic names for the raid devices, such as you
# /dev/md/root. The names used in this file must match the names seen in
# /proc/mdstat and in /sys/block.
ENABLED=yes
CHECK=check
# To check devs /dev/md0 and /dev/md3, use "md0 md3"
CHECK_DEVS=""
REPAIR_DEVS=""
SKIP_DEVS=""
Index: raid-check
===================================================================
RCS file: /cvs/extras/rpms/mdadm/devel/raid-check,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -p -r1.3 -r1.4
--- raid-check 29 Jun 2009 19:18:19 -0000 1.3
+++ raid-check 24 Jul 2009 17:43:39 -0000 1.4
@@ -1,7 +1,58 @@
#!/bin/bash
+#
+# This script reads it's configuration from /etc/sysconfig/raid-check
+# Please use that file to enable/disable this script or to set the
+# type of check you wish performed.
+[ -f /etc/sysconfig/raid-check ] || exit 0
+. /etc/sysconfig/raid-check
+
+[ "$ENABLED" != "yes" ] && exit 0
+
+case "$CHECK" in
+ check) ;;
+ repair) ;;
+ *) exit 0;;
+esac
+
+dev_list=""
for dev in `grep "^md.*: active" /proc/mdstat | cut -f 1 -d ' '`; do
- [ -f /sys/block/$dev/md/sync_action ] && \
- echo "check" > /sys/block/$dev/md/sync_action
+ echo $SKIP_DEVS | grep -w $dev >/dev/null 2>&1 && continue
+ if [ -f /sys/block/$dev/md/sync_action ]; then
+ array_state=`cat /sys/block/$dev/md/array_state`
+ sync_action=`cat /sys/block/$dev/md/sync_action`
+ # Only perform the checks on idle, healthy arrays
+ if [ "$array_state" = "clean" -a "$sync_action" = "idle" ]; then
+ check=""
+ echo $REPAIR_DEVS | grep -w $dev >/dev/null 2>&1 && \
+ check="repair"
+ echo $CHECK_DEVS | grep -w $dev >/dev/null 2>&1 \
+ && check="check"
+ [ -z "$check" ] && check=$CHECK
+ echo "$check" > /sys/block/$dev/md/sync_action
+ [ "$check" = "check" ] && dev_list="$dev_list $dev"
+ fi
+ fi
done
+if [ -n "$dev_list" ]; then
+ checking=1
+ while [ $checking -ne 0 ]
+ do
+ sleep 3
+ checking=0
+ for dev in $dev_list; do
+ sync_action=`cat /sys/block/$dev/md/sync_action`
+ if [ "$sync_action" != "idle" ]; then
+ checking=1
+ fi
+ done
+ done
+ for dev in $dev_list; do
+ mismatch_cnt=`cat /sys/block/$dev/md/mismatch_cnt`
+ if [ "$mismatch_cnt" -ne 0 ]; then
+ echo "WARNING: mismatch_cnt is not 0 on /dev/$dev"
+ fi
+ done
+fi
+
More information about the fedora-extras-commits
mailing list