Awk
創建 multipath.conf 別名的腳本
我找到了一個為 Nimble 卷創建多路徑別名的腳本,我修改它以在 freenas 中工作,它的內容是
#/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
當我執行它時
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 } }
沒有任何別名你有什麼建議嗎?
OFFSET=
註釋以and開頭的行NIMBLEVOL=
並插入NIMBLEVOL=$(echo $SUBSTRING | sed -e 's/^\(.*\)-lun.*/\1/')
在註釋行的正下方。
... #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.*/\1/') ...
不確定這是否真的會創建一個有效的配置,假設您想要 data1、data2 等作為別名。