|
|
|
@ -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 |
|
|
|
|
[[ $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 |
|
|
|
|