Script para criar o apelido multipath.conf

1

Eu encontrei um script para criar alias para multipath para volumes Nimble e eu modifiquei para trabalhar em freenas o conteúdo dele é

#/bin/bash
# This script will scan the system for attached Nimble Volumes
# and output a list of multipath alias statements for the linux
# /etc/multipath.conf.  This will allow for the volume to be 
# referenced by the volume name in place of the normal mpathX
# 
# To use the script, just run it.  If Nimble volumes are present
# it will output the confiugration data to standard out
# Just copy and paste that output in to /etc/multipath.conf
# Take care when adding these lines to make sure another alias
# is not present or if there are other multipath statements

# Start by checking to see if we have any Nimble volumes connected
ls -l /dev/disk/by-path | grep freenas > /dev/null

if [ $? -eq 0 ] 
then

#Build list of Nimble devices
DEV_LIST=$(ls -l /dev/disk/by-path | grep freenas | awk '{print $NF'} | sed 's/..\/..\///')

# Output the first line of the config
echo "multipaths {"

# For each device found we determine the name and the mpathid
for i in $DEV_LIST
    do

    SUBSTRING=$(ls -l /dev/disk/by-path | grep $i  | awk -F: '{print $4}') 

    # This uses pattern matching to find the name of the volume
    OFFSET=$(echo $SUBSTRING | awk --re-interval 'match($0, /\-[v][a-z0-9]{16}/) { print RSTART-1 }')
    NIMBLEVOL=${SUBSTRING::$OFFSET}

    # Here we collect the MPATHID
    MPATHID=$(multipath -ll /dev/$i | grep FreeBSD | awk '{print $2}' | sed -e 's\(\g' | sed -e 's\)\g')

    # Enable for debug
    #echo "Volume name for $device is $nimblevol with multipath ID is $mpathid"

    # Putting it all together with proper formatting using printf
    MULTIPATH=$(printf "multipath {\n \t\twwid \t\t%s \n \t\talias\t\t %s\n \t}" $MPATHID $NIMBLEVOL)
    MATCH='multipaths {'

    echo "$MULTIPATH"

    done

    # End the configuration section
    echo "}"
else 

    # If no Nimble devices found, exit with message
    echo "No Nimble Devices Found, have you met leeloo?"
    exit 1
fi

exit 0

quando eu corro, fico

multipaths {
multipath {
                wwid            36589cfc000000e9f2e24f431339ec7b0
                alias
        }
multipath {
                wwid            36589cfc00000026c07d6caed9e43aa22
                alias
        }
multipath {
                wwid            36589cfc000000f051b0d5718e0b46b2f
                alias
        }
multipath {
                wwid            36589cfc000000af38b5be525e3cf1cb4
                alias
        }
multipath {
                wwid            36589cfc000000824684e211c61d58fc5
                alias
        }
multipath {
                wwid            36589cfc000000f0f579280a94ef72125
                alias
        }
multipath {
                wwid            36589cfc000000e9f2e24f431339ec7b0
                alias
        }
multipath {
                wwid            36589cfc00000026c07d6caed9e43aa22
                alias
        }
multipath {
                wwid            36589cfc000000f051b0d5718e0b46b2f
                alias
        }
multipath {
                wwid            36589cfc000000af38b5be525e3cf1cb4
                alias
        }
multipath {
                wwid            36589cfc000000824684e211c61d58fc5
                alias
        }
multipath {
                wwid            36589cfc000000f0f579280a94ef72125
                alias
        }
}

sem nenhum alias você tem alguma sugestão ??

    
por Khalid Abo El MaGd 27.02.2016 / 15:15

1 resposta

1

Comente as linhas que começam com OFFSET= e NIMBLEVOL= e insira

NIMBLEVOL=$(echo $SUBSTRING | sed -e 's/^\(.*\)-lun.*//')

logo abaixo das linhas comentadas.

...
#OFFSET=$(echo $SUBSTRING | awk --re-interval 'match($0, /\-[v][a-z0-9]{16}/) { print RSTART-1 }')
#NIMBLEVOL=${SUBSTRING::$OFFSET}
NIMBLEVOL=$(echo $SUBSTRING | sed -e 's/^\(.*\)-lun.*//')
...

Não tenho certeza se isso realmente criará uma configuração válida, supondo que você queira ter data1, data2 etc como alias.

    
por 27.02.2016 / 16:39