Renamed mdraid_is_raid to device_is_raid falconindy rewrote the device_is_raid and mdraid_all_slaves functions device_is_raid now uses dev major number to determine if a device is a raid device. A major ID of 8 is a /dev/sd? device whereas a major ID of 9 is a 'metadata' (raid) device. mdraid_all_slaves now uses a parameter expansion, reads the uevents file to get the DEVNAME and appends /dev to DEVNAME --- src/core/libs/lib-blockdevices-filesystems.sh | 31 +++++++++---------------- src/core/libs/lib-ui-interactive.sh | 2 +- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/core/libs/lib-blockdevices-filesystems.sh b/src/core/libs/lib-blockdevices-filesystems.sh index 8573b19..2bb0a74 100644 --- a/src/core/libs/lib-blockdevices-filesystems.sh +++ b/src/core/libs/lib-blockdevices-filesystems.sh @@ -920,19 +920,11 @@ get_blockdevice_size () # $1 blockdevice (ex: /dev/md0 or /dev/sda1) # return true when blockdevice is an md raid, otherwise return a unset value -mdraid_is_raid() -{ - local israid - if [ -z $1 ]; then - # Don't call mdadm on empty blockdevice parameter! - israid="" - elif [ "$(mdadm --query $1 | cut -d':' -f2)" == " is not an md array" ]; then - israid="" - else - israid=true - fi - echo $israid -} +device_is_raid() { + [[ $1 && -f /proc/mdstat ]] || return 1 + local devmajor=$(stat -c %t "$1") + (( devmajor == 9 )) +} # $1 md raid blockdevice (ex: /dev/md0) # return the array member device which is slave 0 in the given array @@ -948,12 +940,11 @@ mdraid_slave0 () # $1 md raid blockdevice (ex: /dev/md0) # return a list of array members from given md array # ex: /dev/md0 has slaves: "/dev/sda1 /dev/sdb2 /dev/sdc2" -mdraid_all_slaves () -{ - local slave= - local slaves= - for slave in $(ls /sys/class/block/$(basename $1)/slaves/); do - slaves=$slaves"/dev/"$slave" " +mdraid_all_slaves () { + shopt -s nullglob + for slave in /sys/class/block/${1##*/}/slaves/*; do + eval $(cat $slave/uevent) + echo /dev/$DEVNAME + unset DEVNAME done - echo $slaves } diff --git a/src/core/libs/lib-ui-interactive.sh b/src/core/libs/lib-ui-interactive.sh index 881af90..829556a 100644 --- a/src/core/libs/lib-ui-interactive.sh +++ b/src/core/libs/lib-ui-interactive.sh @@ -878,7 +878,7 @@ interactive_grub() { bootdev=$(mount | grep $var_TARGET_DIR/boot | cut -d' ' -f 1) # check if bootdev or PART_ROOT is on a md raid array # This dialog is only shown when we detect / or /boot on a raid device. - if [ -n "$(mdraid_is_raid $bootdev)" -o -n "$(mdraid_is_raid $PART_ROOT)" ]; then + if device_is_raid $bootdev || device_is_raid $PART_ROOT; then ask_yesno "Do you have your system installed on software raid?\nAnswer 'YES' to install grub to another hard disk." no if [ $? -eq 0 ]; then onraid=true -- 1.7.3.5