Browse Source

Make the lvm check script really check to see if root is on an lvm device

somehow when run in hostonly mode.
master
Victor Lowther 16 years ago
parent
commit
b5ccf21d2b
  1. 36
      modules.d/90lvm/check

36
modules.d/90lvm/check

@ -1,8 +1,42 @@
#!/bin/sh #!/bin/bash


# No point trying to support lvm if the binaries are missing # No point trying to support lvm if the binaries are missing
which lvm >/dev/null 2>&1 || exit 1 which lvm >/dev/null 2>&1 || exit 1


is_lvm() { /lib/udev/vol_id /dev/block/$1 |grep -q LVM2_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_lvm $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_lvm $(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 crypted.
# 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 LVM2_member device
check_block_and_slaves $majmin || exit 1
fi

# We should really just check to see if root is on a logical volume # We should really just check to see if root is on a logical volume
# when running in hostonly mode. I am lazy. Therefore, fail the hostonly # when running in hostonly mode. I am lazy. Therefore, fail the hostonly
# check unless there is a logical volume in use somewhere. # check unless there is a logical volume in use somewhere.

Loading…
Cancel
Save