All pastes #764132 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-11-06 23:42 UTC
rendered paste body
#!/bin/bash

KERNEL=`uname -r | cut -c1-3`


is_physical_disk() {
# This also screens lines that already use UUIDs
  FSTAB_ENT=${1}

  return `echo "${FSTAB_ENT}" |
    awk 'BEGIN { RC = 0 }
         { if ( $3 ~ /devpts|proc|tmpfs|sysfs|auto/ ) RC=1 ;
           if ( $2 ~ /cdrom|floppy/ ) RC=1 ;
           if ( $1 ~ /^UUID|^#/ ) RC=1 ;
           print RC }'`
}

rhel3_dev_uuid() {
  DEV=${1}
  /usr/bin/partition_uuid ${DEV}
}

rhel4_dev_uuid() {
  DEV=${1}
  /sbin/blkid ${DEV} | sed -e 's/^.* UUID="//' -e 's/" .*$//'
}

get_device() {
  FS_ENTRY=${1}

  if test -n "`echo ${FS_ENTRY} | grep /dev/`"
    then
    echo "${FS_ENTRY}"
    return 0
  fi

  if test -n "`echo ${FS_ENTRY} | grep LABEL=`"
    then
    echo `/sbin/findfs ${FS_ENTRY}`
    return 0
  fi

  echo ""
  return 1
}

while read FS_LINE
  do
  if is_physical_disk "${FS_LINE}"
    then
    echo "#${FS_LINE}"
    THIS_DEVICE=`echo ${FS_LINE} | awk '{print $1}'`
    REAL_DEVICE=`get_device "${THIS_DEVICE}"`

    case ${KERNEL} in
      2\.4) THIS_UUID=`rhel3_dev_uuid ${REAL_DEVICE}` ;;
      2\.6) THIS_UUID=`rhel4_dev_uuid ${REAL_DEVICE}` ;;
    esac

    echo "UUID=${THIS_UUID}"`echo ${FS_LINE} | awk '{ gsub(/.*/,"",$1) ; print $0 }'`


  else
    echo "${FS_LINE}"
  fi
done < fstab