다 중 경로 프로필 자동 스 크 립 트 채 우기

다 중 경로 프로필 자동 스 크 립 트 채 우기
1. 스 크 립 트 소개 1.1 스 크 립 트 작성 원인 2. 스 크 립 트 작성 2.1 다 중 경로 정보 얻 기 2.2 기록 할 내용 얻 기 2.3 위치 삽입 3. 전체 스 크 립 트
대본 소개
1.1 스 크 립 트 작성 이유
최근 프로젝트 (분포 식 저장 + 가상 화) 를 실시 하 는 과정 에서 사소한 일 을 만 났 습 니 다. 분포 식 저장 소 는 여러 개의 lun 으로 나 뉘 어 있 기 때문에 다 중 경로 설정 파일 을 쓸 때 매우 번 거 로 워 서 스 크 립 트 를 만들어 서 이 기능 을 실현 합 니 다.
이 스 크 립 트 는 주로 multipath. conf 파일 의 multipaths 인 자 를 자동 으로 채 웁 니 다.
일반적으로/etc/multipath. conf 파일 은 다음 과 같 습 니 다.
multipaths {

    multipath {
        wwid 3600605b00a60a980ff0000300310f370
        alias mpatha
        }
    multipath {
        wwid 3600605b00a60a980ff0000300310f371
        alias mpathb
        }
    multipath {
        wwid 3600605b00a60a980ff0000300310f372
        alias mpathc
        }
    multipath {
        wwid 3600605b00a60a980ff0000300310f373
        alias mpathd
        }
}

그런데 만약 에 100 개가 있다 면?그럼 하나씩 멀 티 패스 를 추가 해 야 겠 어 요. 귀찮아 요.
2. 대본 작성
2.1 다 중 경로 정보 획득
우선, 다 중 경로 명령 을 사용 하여 다 중 경로 정보, 정보의 형식 을 봅 니 다.
[root@arppinging /]# multipath -ll

mpatha (360a9800064665072443469563477396c) dm-0 NETAPP,LUN 

size=3.5G features='0' hwhandler='0' wp=rw

`-+- policy='round-robin 0' prio=4 status=active

|- 1:0:0:0 sdb 8:16 active ready  running  

`- 2:0:0:0 sde 8:64 active ready  running

위 설정 파일 을 비교 해 보면 우리 가 필요 로 하 는 내용 은 mpatha (alias) 와 360a9800064665072443469563477396c (wwid) 입 니 다.
나 는 선 택 된 값 을 파일 mpath 에 기록 할 것 이다.
multipath -ll | grep mpath >> mpath

아래 의 내용 을 얻다
[root@arppinging /]# cat mpath
mpatha (360a9800064665072443469563477396c) dm-0 NETAPP,LUN

그럼 제 가 어떻게 aliaswwid 의 값 을 얻 죠?이 럴 때 우리 거 쓸 수 있어. awk
[root@arppinging /]# dev=`awk '{print $1}' mpath`
[root@arppinging /]# wwid=`awk 'print $2' mpath`
[root@arppinging /]# echo $dev
mpatha
[root@arppinging /]# echo $wwid
(360a9800064665072443469563477396c)

이 를 통 해 알 수 있 듯 이 wwid 우리 의 요 구 를 만족 시 키 지 못 합 니 다. 설정 파일 에 wwid 없 기 때문에 () 텍스트 에 있 는 sed 을 삭제 하고 다른 내용 이 존재 하지 않도록 비 () 로 시작 하 는 줄 과 공백 줄 도 삭제 해 야 합 니 다.
[root@arppinging /]# sed -i 's/(\|)/^[^m]/g' mpath
[root@arppinging /]# sed -i '/^[^m]\|^$/d' mpath
[root@arppinging /]# cat mpath
mpatha 360a9800064665072443469563477396c dm-0 NETAPP,LUN

다시 가 져 오기 값
[root@arppinging /]# wwid=`awk 'print $2' mpath`
[root@arppinging /]# echo $wwid
360a9800064665072443469563477396c

2.2 기록 할 내용 가 져 오기
설정 파일 에 어떻게 malias 을 기록 합 니까?여러 줄 의 데이터 가 있다 면:
[root@arppinging /]# cat mpath
mpatha 3600605b00a60a980ff0000300310f370 dm-0 LSI     ,MR9261-8i
mpathb 3600605b00a60a980ff0000300310f371 dm-0 LSI     ,MR9261-8i
mpathc 3600605b00a60a980ff0000300310f372 dm-0 LSI     ,MR9261-8i
mpathd 3600605b00a60a980ff0000300310f373 dm-0 LSI     ,MR9261-8i
mpathe 3600605b00a60a980ff0000300310f374 dm-0 LSI     ,MR9261-8i
mpathf 3600605b00a60a980ff0000300310f375 dm-0 LSI     ,MR9261-8i
mpathg 3600605b00a60a980ff0000300310f376 dm-0 LSI     ,MR9261-8i
mpathh 3600605b00a60a980ff0000300310f377 dm-0 LSI     ,MR9261-8i
mpathi 3600605b00a60a980ff0000300310f378 dm-0 LSI     ,MR9261-8i
mpathj 3600605b00a60a980ff0000300310f379 dm-0 LSI     ,MR9261-8i
mpathk 3600605b00a60a980ff0000300310f37a dm-0 LSI     ,MR9261-8i
mpathl 3600605b00a60a980ff0000300310f37b dm-0 LSI     ,MR9261-8i
mpathn 3600605b00a60a980ff0000300310f37c dm-0 LSI     ,MR9261-8i
wwid 텍스트 를 한 줄 씩 처리 하고 결 과 를 mpath. conf 파일 에 기록 합 니 다.
while read line
do
   dev=`echo $line | awk '{print $1}'`
   wwin=`echo $line | awk '{print $2}'`
   cat <> mpath.conf
    multipath {
        wwid $wwin
        alias $dev
        }
EOF
done 

파일 보기 while
    multipath {
        wwid 3600605b00a60a980ff0000300310f37b
        alias mpathl
        }
    multipath {
        wwid 3600605b00a60a980ff0000300310f37c
        alias mpathn
        }

2.3 포 지 셔 닝 삽입 위치
그럼 2, 3 에서 얻 은 내용 을 어디 에 삽입 해 야 합 니까?우선 설정 파일 의 형식 이 다음 과 같다 는 것 을 명확 하 게 해 야 합 니 다.
multipaths {
        multipath {
                  }
}

우리 가 얻 은 내용 은:
multipath {
          }

분명히 우 리 는 바깥쪽 mpath.conf 을 찾 아서 중간 에 내용 을 삽입 해 야 한다.
[root@arppinging /]# cat -n multipath.conf | grep '\'
    80    multipaths {
[root@arppinging /]

그럼 바깥쪽 multipaths {} 이 없 으 면 어 떡 하지?이 럴 때 는 판단 이 필요 하 다. 우리 가 없 으 면 그것 에 추가 해 야 한다.
cat -n multipath.conf | grep "\" >/dev/null 2>&1
if [ $? -eq 0 ]
then
    linenumber=`cat -n multipath.conf | grep "\" | awk '{print $1}'`
else
   cat <> multipath.conf
multipaths {
}
EOF
    linenumber=`cat -n multipath.conf | grep "\" | awk '{print $1}'`
fi

이 위치의 줄 번 호 를 찾 으 면 mulitipath. conf 파일 80 줄 뒤에 mpath. conf 내용 을 삽입 할 수 있 습 니 다.
sed -i "${linenumber}r mpath.conf" multipath.conf

이렇게 하면 돼!
3. 전체 스 크 립 트
#!/bin/bash
# date:2019/2/21
#  : wwin multipath.conf


#  ,
mpathtext (){
    echo > mpath.conf
    echo > mpath
    multipath -ll | grep mpath >> mpath
    sed -i 's/(\|)//g' mpath
    sed -i '/^[^m]\|^$/d' mpath
}

#  /etc/
condition (){
    path=`echo $PWD | awk -F'/' '{print $2}'`
    [ $path = 'etc' ] && echo -e "\033[31m[ERROR]\033[0m  /etc/ " && exit 1
#    cp /etc/multipath.conf ${PWD}/
#    [ $? -ne 0 ] && echo "\033[31m [ERROR]\033[0m /etc/ multipath.conf " && exit 2
    ls -l ${PWD}/multipath.conf 1>/dev/null 2>&1
    [ $? -ne 0 ] && echo -e "\033[31m[ERROR]\033[0m  multipath.conf " && exit 2
}

#   `multipaths` 
reset (){
    read -p " multipath.conf multipaths ?[y/n][n]:" option
    option=${option:-'n'}
    case $option in
        n)
    ;;
        y)
        linenumber=`cat -n multipath.conf | grep "\" | awk '{print $1}'`
            if [ ! -n "$linenumber" ];then
            echo -e " multipaths .               \033[32m [OK]\033[0m"
        else
        sed -i ${linenumber},'$'d multipath.conf
        echo -e "multipaths .       \033[32m [OK]\033[0m"
        fi
    ;;
    *)
        echo -e "\033[31m[ERROR]\033[0m input error,please enter n or y"
        exit 3
    ;;
    esac
}


condition
reset
mpathtext

#  , , multipaths 。
cat -n multipath.conf | grep "\" >/dev/null 2>&1
if [ $? -eq 0 ]
then
    linenumber=`cat -n multipath.conf | grep "\" | awk '{print $1}'`
else
   cat <> multipath.conf
multipaths {
}
EOF
    linenumber=`cat -n multipath.conf | grep "\" | awk '{print $1}'`
fi


#  wwin mpath.conf
while read line
do
   dev=`echo $line | awk '{print $1}'`
   wwin=`echo $line | awk '{print $2}'`
   cat <> mpath.conf
    multipath {
        wwid $wwin
        alias $dev
        }
EOF
done 
#  mpath.conf
sed -i "${linenumber}r mpath.conf" multipath.conf
echo -e "multipath.conf .     \033[32m [OK]\033[0m"

좋은 웹페이지 즐겨찾기