On 01/22/2011 07:15 PM, [email protected] wrote:
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 ))
+}

Was looking for /proc/mdadm which didn't exist!
  # $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
  }
Uses uevent to determine the device name and appends /dev. This is better in case we have a device that does not reside in the root of /dev.
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
Fixed this code, wasn't thinking!

Reply via email to