다 중 경로 프로필 자동 스 크 립 트 채 우기
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
그럼 제 가 어떻게
alias
와 wwid
의 값 을 얻 죠?이 럴 때 우리 거 쓸 수 있어. 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 기록 할 내용 가 져 오기
설정 파일 에 어떻게
m
과 alias
을 기록 합 니까?여러 줄 의 데이터 가 있다 면:[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"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.