home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / sbin / kpartx_id < prev    next >
Text File  |  2006-11-29  |  3KB  |  111 lines

  1. #!/bin/bash
  2. #
  3. # kpartx_id
  4. #
  5. # Generates ID information for device-mapper tables.
  6. #
  7. # Copyright (C) 2006 SUSE Linux Products GmbH
  8. # Author:
  9. #       Hannes Reinecke <hare@suse.de>
  10. #
  11. #
  12. #       This program is free software; you can redistribute it and/or modify it
  13. #       under the terms of the GNU General Public License as published by the
  14. #       Free Software Foundation version 2 of the License.
  15. #
  16. # This script generates ID information used to generate persistent symlinks.
  17. # It relies on the UUID strings generated by the various programs; the name
  18. # of the tables are of no consequence.
  19. #
  20. # Please note that dmraid does not provide the UUIDs (yet); a patch has been
  21. # sent upstream but has not been accepted yet.
  22. #
  23.  
  24. DMSETUP=/sbin/dmsetup
  25.  
  26. MAJOR=$1
  27. MINOR=$2
  28.  
  29. if [ -z "$MAJOR" -o -z "$MINOR" ]; then
  30.     echo "usage: $0 major minor"
  31.     exit 1;
  32. fi
  33.  
  34. # Device-mapper not installed; not an error
  35. if [ ! -x $DMSETUP ] ; then
  36.     exit 0
  37. fi
  38.  
  39. # Get the table info
  40. tblinfo=$($DMSETUP info -c --noheadings -o name,uuid -j $MAJOR -m $MINOR)
  41. if [ $? -ne 0 ] || [ -z "$tblinfo" ]; then
  42.     exit $?
  43. fi
  44.  
  45. set -- $(IFS=":"; echo $tblinfo)
  46. tblname=$1
  47. tbluuid=$2
  48.  
  49. if [ -z "$tbluuid" ] ; then
  50.     exit 0
  51. fi
  52.  
  53. # Table UUIDs are always '<type>-<uuid>'.
  54. dmuuid=${tbluuid#*-}
  55. dmtbl=${tbluuid%%-*}
  56. dmpart=${dmtbl#part}
  57. # kpartx types are 'part<num>'
  58. if [ "$dmpart" == "$dmtbl" ] ; then
  59.     dmpart=
  60. else
  61.     dmtbl=part
  62. fi
  63.  
  64. # Set the name of the table. We're only interested in dmraid,
  65. # multipath, and kparts tables; everything else is ignored.
  66. if [ "$dmtbl" == "part" ] ; then
  67.     # The name of the kpartx table is the name of the parent table
  68.     dmname=$($DMSETUP info  -c --noheadings -o name -u $dmuuid)
  69.     # We need the dependencies of the parent table to figure out
  70.     # the type if the parent is a multipath table
  71.     case "$dmparent" in
  72.     mpath-*)
  73.         dmdeps=$($DMSETUP deps -u $dmuuid)
  74.         ;;
  75.     esac
  76. elif [ "$dmtbl" == "mpath" ] ; then
  77.     dmname=$tblname
  78.     # We need the dependencies of the table to figure out the type
  79.     dmdeps=$($DMSETUP deps -u $tbluuid)
  80. elif [ "$dmtbl" == "dmraid" ] ; then
  81.     dmname=$tblname
  82. fi
  83.  
  84. if [ -z "$dmname" ] ; then
  85.     exit 0
  86. fi
  87.  
  88. echo "ID_DM_TABLE=$dmtbl"
  89. echo "ID_DM_NAME=$dmname"
  90. [ -n "$dmpart" ] && echo "ID_DM_PART=$dmpart"
  91.  
  92. # Figure out the type of the map. For non-multipath maps it's
  93. # always 'raid'.
  94. if [ -n "$dmdeps" ] ; then
  95.     case "$dmdeps" in
  96.     *\(94,*)
  97.             echo "ID_DM_TYPE=dasd"
  98.         ;;
  99.     *\(9*)
  100.             echo "ID_DM_TYPE=raid"
  101.         ;;
  102.     *)
  103.             echo "ID_DM_TYPE=scsi"
  104.         ;;
  105.     esac
  106. else
  107.     echo "ID_DM_TYPE=raid"
  108. fi
  109.  
  110. exit 0
  111.