Commit aa4f557c authored by Vitaly Lipatov's avatar Vitaly Lipatov

raid_restore.sh: rewrite via /dev/md* listing

parent 72b2878b
#!/bin/sh
get_array_uuid()
# TODO: mdadm --assemble --scan -v
# device as param (/dev/sdb2)
get_array_uuid_by_device()
{
local dev="$1"
# "Array UUID for 1.2 and UUID for 0.9"
mdadm -E $dev | grep " UUID : " | head -n1 | sed -e "s|.* UUID : ||"
}
# /dev/md1
get_array_uuid_by_md()
{
mdadm -D "$1" | grep "UUID : " | sed -e "s|.* UUID : ||"
}
get_device_list_by_uuid()
{
local UUID="$(echo $1 | sed -e 's|:||g')"
blkid /dev/sd* | sed -e 's|-||g' | grep "/dev/sd[a-z].*: UUID=\"$UUID\"" | sed -e "s|:.*||"
}
get_md_by_uuid()
{
local md
for md in /dev/md* ; do
mdadm -D $md | grep -q "UUID : $1" && echo "$md" && return
done
#ARRAY /dev/md/1 metadata=1.2 UUID=1912da86:6089954c:2aead1ca:77f06477 name=azbykar.localdomain:1
# TODO: use UUID: in mdadm -D /dev/md?
local STRUUID=$(grep "UUID=$1" /etc/mdadm.conf)
[ -n "$STRUUID" ] && echo "$STRUUID" | cut -d" " -f 2 && return
echo "can't grep UUID=$1 in /etc/mdadm.conf" >>$0.log
......@@ -53,11 +72,32 @@ for dev in /dev/sd? ; do
done
fi
DEVS="/dev/sd*"
DEVS="/dev/sd[a-z]*"
MDS="/dev/md[0-9]*"
[ -n "$1" ] && DEVS="$*"
echo "$1" | grep -q "/dev/md" && MDS="$*"
echo "List by $(echo $MDS) ..."
for md in $MDS ; do
ARRAYUUID=$(get_array_uuid_by_md $md)
STATUS="$(get_dm_status $md)"
echo "$md UUID: $ARRAYUUID status: $STATUS"
[ -n "$ARRAYUUID" ] || echo "!!! cant' get UUID for $md"
echo "$STATUS" | grep -q "degraded" || continue
for dev in $(get_device_list_by_uuid $ARRAYUUID) ; do
[ -r $dev ] || continue
echo "$STATUS" | grep -q "recovering" && echo "Skip $md, already recovering ..." && continue
echo "Restore degrated $md ..."
# TODO: --readwrite for SSD
mdadm $md --add $dev
done
done
if false ; then
echo "List by $(echo $DEVS) ..."
for dev in $DEVS ; do
ARRAYUUID=$(get_array_uuid $dev)
ARRAYUUID=$(get_array_uuid_by_device $dev)
if [ -n "$ARRAYUUID" ] ; then
MDDEV=$(get_md_by_uuid $ARRAYUUID) || MDDEV=''
else
......@@ -76,6 +116,7 @@ for dev in $DEVS ; do
mdadm $MDDEV --add $dev
fi
done
fi
if [ -z "$1" ] ; then
echo
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment