Browse Source

Make dmraid checking use common functionality in dracut-functions

master
Victor Lowther 16 years ago
parent
commit
bc9ae19deb
  1. 44
      modules.d/90dmraid/check

44
modules.d/90dmraid/check

@ -4,39 +4,21 @@ @@ -4,39 +4,21 @@
# in trying to support it in the initramfs.
which dmraid >/dev/null 2>&1 || exit 1

. $dracutfunctions

is_dmraid() { /lib/udev/vol_id /dev/block/$1 |grep -v linux_raid_member | \
grep -q _raid_member; }

check_block_and_slaves() (
# $1 = block device in major:minor format
local x
cd /sys/dev/block/$1
[[ -b /dev/block/$1 ]] || return 1 # Not a block device? So sorry.
is_dmraid $1 && return
[[ -d slaves ]] || return 1 # there are no underlying devices, done.
# we want to search the tree breadthwise, so...
for x in slaves/*/dev; do
is_dmraid $(cat "$x") && return 0
done
for x in slaves/*/dev; do
check_block_and_slaves $(cat "$x") && return 0
done
return 1
)

if [[ $1 = '-h' ]] ; then
rootdev=''
while read blkdev fs type opts misc; do
[[ $blkdev = rootfs ]] && continue # skip rootfs entry
[[ $fs = / ]] && { rootdev=$blkdev; break; }
done < /proc/mounts
[[ -b $rootdev ]] || exit 1 # Not on a block device? Definitly not dmraid
# get major/minor for the device
majmin=$(ls -nLl "$rootdev" | \
(read x x x x maj min x; maj=${maj//,/}; echo $maj:$min))
# now, walk backwards though our master/slave relationships looking
# for a dmraid device
check_block_and_slaves $majmin || exit 1
fi
[[ $1 = '-h' ]] && {
rootdev=$(find_root_block_device)
if [[ $rootdev ]]; then
# root lives on a block device, so we can be more precise about
# hostonly checking
check_block_and_slaves is_dmraid "$rootdev" || exit 1
else
# root is not on a block device, use the shotgun approach
dmraid -r | grep -q ok || exit 1
fi
}

exit 0

Loading…
Cancel
Save