7 BA_DEFAULT_USER="oracle"
8 BA_DEFAULT_GROUP="oracle"
9 BA_CONF_PATH="/etc/blkdevalias"
10 BA_DEV_PATH="oracleasm/disks"
11 BA_MAP_PATH="${BA_CONF_PATH}/map"
12 BA_CONF="${BA_CONF_PATH}/conf"
13 BA_USER="$BA_DEFAULT_USER"
14 BA_GROUP="$BA_DEFAULT_GROUP"
15 BA_LOCK="/var/lock/blkdevalias"
16 BA_SCSI_ID="/sbin/scsi_id"
17 BA_SCSI_ID_FLAGS="-g -u"
27 echo "WARNING: $@" 1>&2
31 [ "$BA_DEBUG" == "yes" ] && echo "$@" 1>&2
35 print_wwid_mapping() {
37 if [ "$WWID" == "" ]; then
40 debug "ALIAS for WWID '$WWID' is: '${WWIDMAP[$WWID]}' (${TYPEMAP[$WWID]})"
43 # store the WWID map to disk
45 TMP_MAP=$(mktemp --tmpdir=$BA_CONF_DIR)
46 if [ ! -f "$TMP_MAP" ]; then
47 error "could not write temporary file"
50 for WWID in ${!WWIDMAP[@]}; do
51 echo "$WWID ${WWIDMAP[$WWID]} ${TYPEMAP[$WWID]}"
53 mv $TMP_MAP $BA_MAP_PATH
56 # read the WWID map from disk
58 if [ ! -f "$BA_MAP_PATH" ] || [ ! -r "$BA_MAP_PATH" ]; then
59 error "$BA_MAP_PATH does not exist or is not readable"
62 while read WWID ALIAS TYPE; do
63 if [[ $WWID == \#* ]]; then
66 WWIDMAP[$WWID]="$ALIAS"
67 NAMEMAP[$ALIAS]="$WWID"
68 TYPEMAP[$WWID]="$TYPE"
72 # ba_add_wwid_mapping <wwid> <nickname> <sd|mpath>
73 ba_add_wwid_mapping() {
78 debug "ba_add_wwid_mapping WWID=\"$WWID\" ALIAS=\"$ALIAS\""
79 if [ "$WWID" == "" ]; then
83 if [ "$ALIAS" == "" ]; then
84 warn "no nickname given"
87 if [ "${NAMEMAP[$WWID]}" != "" ]; then
88 warn "$WWID already mapped to name ${NAMEMAP[$WWID]}; replacing it."
90 WWIDMAP[$WWID]="$ALIAS"
91 NAMEMAP[$ALIAS]="$WWID"
92 TYPEMAP[$WWID]=${TYPE:-"sd"}
95 # ba_del_wwid_mapping <wwid>
96 ba_del_wwid_mapping() {
99 if [ "$WWID" == "" ]; then
102 if [ "${WWIDMAP[$WWID]}" == "" ]; then
103 warn "WARNING: $WWID does not exist; doing nothing."
106 ALIAS=${WWIDMAP[$WWID]}
108 unset NAMEMAP[$ALIAS]
113 $BA_SCSI_ID $BA_SCSI_ID_FLAGS $1
118 Configuring the blkdevalias map.
120 This will configure persistent aliases and permissions for storage
121 devices. The current values will be shown in brackets ('[]'). Hitting
122 <ENTER> without typing an answer will keep the current value.
128 echo -n "Default user to own device nodes [$BA_USER]: "
130 if [ "$_BA_USER" != "" ]; then
133 echo -n "Default group to own device nodes [$BA_GROUP]: "
135 if [ "$_BA_GROUP" != "" ]; then
138 echo -n "Default device directory [$BA_DEV_PATH]: "
140 if [ "$_BA_DEV_PATH" != "" ]; then
141 BA_DEV_PATH=$_BA_DEV_PATH;
143 debug "BA_DEV_PATH=\"$BA_DEV_PATH\""
144 debug "BA_USER=\"$BA_USER\""
145 debug "BA_GROUP=\"$BA_GROUP\""
146 echo -n "Writing wwid map configuration: "
147 TMP_CONF=$(mktemp --tmpdir=$BA_CONF_PATH)
148 if [ ! -f "$TMP_CONF" ]; then
150 error "could not write temporary file"
153 echo "BA_DEV_PATH=\"$BA_DEV_PATH\"" >> $TMP_CONF
154 echo "BA_USER=\"$BA_USER\"" >> $TMP_CONF
155 echo "BA_GROUP=\"$BA_GROUP\"" >> $TMP_CONF
156 mv $TMP_CONF $BA_CONF
157 if [ "$?" != 0 ]; then
158 error "could not create configuration file $BA_CONF"
164 # createdisk <nickname> <device>
169 if [ "$DEV" == "" ] || [ "$ALIAS" == "" ]; then
170 echo "Usage: $0 createdisk <nickname> <device>"
173 debug "ba_createdisk: WWID=\"$WWID\" DEV=\"$DEV\" ALIAS=\"$ALIAS\""
175 WWID=$(ba_scsi_id $DEV)
176 if [ "$WWID" == "" ]; then
177 error "could not get SCSI ID for $DEV"
180 if [[ $DEV == *mpath* ]]; then
182 debug "wm_createdisk: WWID=\"$WWID\" DEV=\"$DEV\" ALIAS=\"$ALIAS\""
187 ba_add_wwid_mapping $WWID $ALIAS $TYPE
194 if [ "$ALIAS" == "" ]; then
195 echo "Usage: $0 deletedisk <nickname>"
198 WWID=${NAMEMAP[$ALIAS]}
199 if [ "$WWID" == "" ]; then
200 error "\"$ALIAS\" does not exist"
201 echo "Usage: $0 deletedisk <nickname>"
204 echo -n "Removing wwid map disk \"$ALIAS\":"
205 ba_del_wwid_mapping $WWID \
211 for D in ${WWIDMAP[@]}; do
217 local LISTDEV ONDEV WWID ALIAS
218 if [ "$1" == "-d" ]; then
223 if [ "$ALIAS" == "" ]; then
224 echo "Usage: $0 querydisk <nickname>"
227 WWID=${NAMEMAP[$ALIAS]}
228 debug "ba_querydisk: ALIAS=\"$ALIAS\" WWID=\"$WWID\" LISTDEV=\"$LISTDEV\""
229 if [ "$LISTDEV" == "1" ]; then
230 DEV="/dev/$BA_DEV_PATH/$(readlink "/dev/$BA_DEV_PATH/$ALIAS")"
231 MAJ="$[0x$(stat --format "%t" $DEV)]"
232 MIN="$[0x$(stat --format "%T" $DEV)]"
233 ONDEV="on device [$MAJ,$MIN]"
234 debug "ba_querydisk: DEV=\"$DEV\" MAJ=\"$MAJ\" MIN=\"$MIN\""
236 if [ "$WWID" != "" ]; then
237 echo "$ALIAS is a valid blkdevalias disk$ONDEV"
244 warn "(unimplemented)"
250 if [ "$WWID" == "" ] || [ "${WWIDMAP[$WWID]}" == "" ]; then
251 echo "Usage: $0 map <wwid>" 1>&2
255 echo "BA_NAME=$BA_DEV_PATH/${WWIDMAP[$WWID]}"
256 echo "BA_TYPE=${TYPEMAP[$WWID]}"
257 echo "BA_USER=$BA_USER"
258 echo "BA_GROUP=$BA_GROUP"
261 # no point optimizing this out for configure
287 echo "{configure|createdisk|deletedisk|scandisks|querydisk|map}"