ASM 장치를 AIX 시스템의 물리적 장치에 매핑하기 위해 이 쉘 스크립트를 작성했습니다. 그러나 내가 얻은 출력은 예상한 것과 다르므로 디버깅할 수 없습니다. 여러분의 도움을 요청합니다. 세부사항은 다음과 같습니다.
ASM 장치:
test160 orainfra +ASM1 >> ls -l /dev | grep orainfra
crw-rw-r-- 1 orainfra dba 34, 35 Jan 23 01:16 ebs_arch_31
crw-rw-r-- 1 orainfra dba 34, 36 Jan 23 01:16 ebs_arch_32
crw-rw-r-- 1 orainfra dba 34, 37 Jan 23 01:15 ebs_arch_33
crw-rw-r-- 1 orainfra dba 34, 38 Jan 23 01:16 ebs_arch_34
crw-rw-r-- 1 orainfra dba 34, 39 Jan 22 20:01 ebs_data1_31
crw-rw-r-- 1 orainfra dba 34, 40 Jan 23 19:39 ebs_data1_32
crw-rw-r-- 1 orainfra dba 34, 41 Jan 10 19:39 ebs_data1_33
crw-rw-r-- 1 orainfra dba 34, 42 Dec 25 02:22 ebs_data1_34
crw-rw-r-- 1 orainfra dba 34, 43 Jan 24 07:34 ebs_data1_35
crw-rw-r-- 1 orainfra dba 34, 44 Jan 25 07:41 ebs_data1_36
crw-rw-r-- 1 orainfra dba 34, 45 Jan 25 19:44 ebs_data1_37
crw-rw-r-- 1 orainfra dba 34, 46 Jan 1 19:49 ebs_data1_38
crw-rw-r-- 1 orainfra dba 34, 47 Jan 22 09:23 ebs_data1_39
crw-rw-r-- 1 orainfra dba 34, 48 Jan 15 07:01 ebs_data1_40
crw-rw-r-- 1 orainfra dba 34, 49 Jan 23 07:54 ebs_data1_41
crw-rw-r-- 1 orainfra dba 34, 50 Jan 22 09:13 ebs_data1_42
crw-rw-r-- 1 orainfra dba 34, 51 Jan 22 09:13 ebs_data1_43
crw-rw-r-- 1 orainfra dba 34, 10 Jun 17 2019 ebs_gg_data31
crw-rw-r-- 1 orainfra dba 34, 11 Jun 17 2019 ebs_gg_data32
crw-rw-r-- 1 orainfra dba 34, 12 Oct 21 16:20 ebs_gg_data33
crw-rw-r-- 1 orainfra dba 34, 13 Oct 21 16:19 ebs_gg_data34
crw-rw-r-- 1 orainfra dba 34, 5 Jun 17 2019 ebs_ocr11
crw-rw-r-- 1 orainfra dba 34, 6 Jun 17 2019 ebs_ocr12
crw-rw-r-- 1 orainfra dba 34, 52 Jul 23 2019 ebs_redoa_35
crw-rw-r-- 1 orainfra dba 34, 53 Jan 25 22:28 ebs_redoa_36
crw-rw-r-- 1 orainfra dba 34, 54 Jan 25 22:28 ebs_redoa_37
crw-rw-r-- 1 orainfra dba 34, 55 Jan 23 01:15 ebs_redoa_38
crw-rw-r-- 1 orainfra dba 34, 56 Jul 12 2019 ebs_temp_35
crw-rw-r-- 1 orainfra dba 34, 57 Jan 22 09:13 ebs_temp_36
crw-rw-r-- 1 orainfra dba 34, 58 Oct 21 18:23 ebs_temp_37
crw-rw-r-- 1 orainfra dba 34, 59 Jan 22 09:13 ebs_temp_38
crw-rw-r-- 1 orainfra dba 34, 7 Jan 26 05:25 ebs_voting11
crw-rw-r-- 1 orainfra dba 34, 8 Jan 26 02:02 ebs_voting12
crw-rw-r-- 1 orainfra dba 34, 9 Jun 17 2019 ebs_voting13
test160 orainfra +ASM1 >>
물리적 장치:
test160 orainfra +ASM1 >> ls -l /dev | grep rhdiskpower
crw-rw---- 1 root system 34, 0 Jun 17 2019 rhdiskpower0
crw-rw---- 1 root system 34, 1 Jun 17 2019 rhdiskpower1
crw-rw---- 1 root system 34, 10 Jun 17 2019 rhdiskpower10
crw-rw---- 1 root system 34, 11 Jun 17 2019 rhdiskpower11
crw-rw---- 1 root system 34, 12 Jun 17 2019 rhdiskpower12
crw-rw---- 1 root system 34, 13 Jun 17 2019 rhdiskpower13
crw-rw---- 1 root system 34, 2 Jun 17 2019 rhdiskpower2
crw-rw---- 1 root system 34, 3 Jun 17 2019 rhdiskpower3
crw-rw---- 1 root system 34, 34 Jul 10 2019 rhdiskpower34
crw-rw---- 1 root system 34, 35 Jul 10 2019 rhdiskpower35
crw-rw---- 1 root system 34, 36 Jul 10 2019 rhdiskpower36
crw-rw---- 1 root system 34, 37 Jul 10 2019 rhdiskpower37
crw-rw---- 1 root system 34, 38 Jul 10 2019 rhdiskpower38
crw-rw---- 1 root system 34, 39 Jul 10 2019 rhdiskpower39
crw-rw---- 1 root system 34, 4 Jun 17 2019 rhdiskpower4
crw-rw---- 1 root system 34, 40 Jul 10 2019 rhdiskpower40
crw-rw---- 1 root system 34, 41 Jul 10 2019 rhdiskpower41
crw-rw---- 1 root system 34, 42 Jul 10 2019 rhdiskpower42
crw-rw---- 1 root system 34, 43 Jul 10 2019 rhdiskpower43
crw-rw---- 1 root system 34, 44 Jul 10 2019 rhdiskpower44
crw-rw---- 1 root system 34, 45 Jul 10 2019 rhdiskpower45
crw-rw---- 1 root system 34, 46 Jul 10 2019 rhdiskpower46
crw-rw---- 1 root system 34, 47 Jul 10 2019 rhdiskpower47
crw-rw---- 1 root system 34, 48 Jul 10 2019 rhdiskpower48
crw-rw---- 1 root system 34, 49 Jul 10 2019 rhdiskpower49
crw-rw---- 1 root system 34, 5 Jun 17 2019 rhdiskpower5
crw-rw---- 1 root system 34, 50 Jul 10 2019 rhdiskpower50
crw-rw---- 1 root system 34, 51 Jul 10 2019 rhdiskpower51
crw-rw---- 1 root system 34, 52 Jul 10 2019 rhdiskpower52
crw-rw---- 1 root system 34, 53 Jul 10 2019 rhdiskpower53
crw-rw---- 1 root system 34, 54 Jul 10 2019 rhdiskpower54
crw-rw---- 1 root system 34, 55 Jul 10 2019 rhdiskpower55
crw-rw---- 1 root system 34, 56 Jul 10 2019 rhdiskpower56
crw-rw---- 1 root system 34, 57 Jul 10 2019 rhdiskpower57
crw-rw---- 1 root system 34, 58 Jul 10 2019 rhdiskpower58
crw-rw---- 1 root system 34, 59 Jul 10 2019 rhdiskpower59
crw-rw---- 1 root system 34, 6 Jun 17 2019 rhdiskpower6
crw-rw---- 1 root system 34, 7 Jun 17 2019 rhdiskpower7
crw-rw---- 1 root system 34, 8 Jun 17 2019 rhdiskpower8
crw-rw---- 1 root system 34, 9 Jun 17 2019 rhdiskpower9
test160 orainfra +ASM1 >>
스크립트:
ls -l /dev | grep orainfra > /home/orainfra/TEST/asm_disks_8.lst
input_file="/home/orainfra/TEST/asm_disks_8.lst"
while IFS= read -r line
do
major=`echo "$line" | awk '{ print $5 }'`
minor=`echo "$line" | awk '{ print $6 }'`
asm_disk=`echo "$line" | awk '{ print $10 }'`
physical_disk=`ls -l /dev | grep rhdiskpower | grep "$major *$minor" | awk '{ print $10 }'`
echo "The ASM disk: '$asm_disk' is mapped to PHYSICAL Disk: '$physical_disk' " >> asm_physical_disks_mapping_8.lst
done <"$input_file"
산출:
The ASM disk: 'ebs_arch_31' is mapped to PHYSICAL Disk: 'rhdiskpower35'
The ASM disk: 'ebs_arch_32' is mapped to PHYSICAL Disk: 'rhdiskpower36'
The ASM disk: 'ebs_arch_33' is mapped to PHYSICAL Disk: 'rhdiskpower37'
The ASM disk: 'ebs_arch_34' is mapped to PHYSICAL Disk: 'rhdiskpower38'
The ASM disk: 'ebs_data1_31' is mapped to PHYSICAL Disk: 'rhdiskpower39'
The ASM disk: 'ebs_data1_32' is mapped to PHYSICAL Disk: 'rhdiskpower40'
The ASM disk: 'ebs_data1_33' is mapped to PHYSICAL Disk: 'rhdiskpower41'
The ASM disk: 'ebs_data1_34' is mapped to PHYSICAL Disk: 'rhdiskpower42'
The ASM disk: 'ebs_data1_35' is mapped to PHYSICAL Disk: 'rhdiskpower43'
The ASM disk: 'ebs_data1_36' is mapped to PHYSICAL Disk: 'rhdiskpower44'
The ASM disk: 'ebs_data1_37' is mapped to PHYSICAL Disk: 'rhdiskpower45'
The ASM disk: 'ebs_data1_38' is mapped to PHYSICAL Disk: 'rhdiskpower46'
The ASM disk: 'ebs_data1_39' is mapped to PHYSICAL Disk: 'rhdiskpower47'
The ASM disk: 'ebs_data1_40' is mapped to PHYSICAL Disk: 'rhdiskpower48'
The ASM disk: 'ebs_data1_41' is mapped to PHYSICAL Disk: 'rhdiskpower49'
The ASM disk: 'ebs_data1_42' is mapped to PHYSICAL Disk: 'rhdiskpower50'
The ASM disk: 'ebs_data1_43' is mapped to PHYSICAL Disk: 'rhdiskpower51'
The ASM disk: 'ebs_gg_data31' is mapped to PHYSICAL Disk: 'rhdiskpower10'
The ASM disk: 'ebs_gg_data32' is mapped to PHYSICAL Disk: 'rhdiskpower11'
The ASM disk: 'ebs_gg_data33' is mapped to PHYSICAL Disk: 'rhdiskpower12'
The ASM disk: 'ebs_gg_data34' is mapped to PHYSICAL Disk: 'rhdiskpower13'
The ASM disk: 'ebs_ocr11' is mapped to PHYSICAL Disk: 'rhdiskpower5
rhdiskpower50
rhdiskpower51
rhdiskpower52
rhdiskpower53
rhdiskpower54
rhdiskpower55
rhdiskpower56
rhdiskpower57
rhdiskpower58
rhdiskpower59'
The ASM disk: 'ebs_ocr12' is mapped to PHYSICAL Disk: 'rhdiskpower6'
The ASM disk: 'ebs_redoa_35' is mapped to PHYSICAL Disk: 'rhdiskpower52'
The ASM disk: 'ebs_redoa_36' is mapped to PHYSICAL Disk: 'rhdiskpower53'
The ASM disk: 'ebs_redoa_37' is mapped to PHYSICAL Disk: 'rhdiskpower54'
The ASM disk: 'ebs_redoa_38' is mapped to PHYSICAL Disk: 'rhdiskpower55'
The ASM disk: 'ebs_temp_35' is mapped to PHYSICAL Disk: 'rhdiskpower56'
The ASM disk: 'ebs_temp_36' is mapped to PHYSICAL Disk: 'rhdiskpower57'
The ASM disk: 'ebs_temp_37' is mapped to PHYSICAL Disk: 'rhdiskpower58'
The ASM disk: 'ebs_temp_38' is mapped to PHYSICAL Disk: 'rhdiskpower59'
The ASM disk: 'ebs_voting11' is mapped to PHYSICAL Disk: 'rhdiskpower7'
The ASM disk: 'ebs_voting12' is mapped to PHYSICAL Disk: 'rhdiskpower8'
The ASM disk: 'ebs_voting13' is mapped to PHYSICAL Disk: 'rhdiskpower9'
출력에 다음이 캡처되는 이유를 잘 모르겠습니다.
rhdiskpower50
rhdiskpower51
rhdiskpower52
rhdiskpower53
rhdiskpower54
rhdiskpower55
rhdiskpower56
rhdiskpower57
rhdiskpower58
rhdiskpower59
감사합니다, R.A.
답변1
스크립트가 ebs_ocr11
변수에 도달 major="34,"
하면 minor="5". So the
목록에서 올바른 행을 검색하는 grep 명령은 rhdiskpower
다음과 같습니다.
... | grep rhdiskpower | grep rhdiskpower | grep rhdiskpower grep "34,*5" |
$minor
정규 표현식에서는 변수 뒤에 공백이 있어야 한다고 지정하지 않으므로 표현식은 뿐만 34, 5
아니라 34, 50
, 34, 51
... 까지 끝까지 일치합니다 34, 59
. 따라서 grep
여러 줄이 출력되고 awk
10번째 요소를 제외한 모든 요소는 각 줄에서 제거되지만 별도의 줄로 유지됩니다.
최종 값 은 개행 문자 등 $physical_disk
을 포함하는 문자열입니다 ."rhdiskpower5\nrhdiskpower50\nrhdiskpower51\n..."
수리하다
이 줄을 수정하는 것이 좋습니다.
physical_disk=`ls -l /dev | grep rhdiskpower | grep "$major *$minor" | awk '{ print $10 }'`
이와 관련하여:
physical_disk=`ls -l /dev | grep "$major *$minor .* rhdiskpower[0-9]*$" | awk '{ print $10 }'`
이것은 또한 여분의 grep
.
AIX ls
명령이 출력에서 공백 대신 탭을 사용하는 경우 정규 표현식의 일부 공백을 \t
유사한 공백으로 바꿔야 할 수도 있습니다.
다른 제안
ASM 디스크 이름은 디스크 자체에서 쉽게 읽을 수 있어야 합니다. 공개설명을 보면ASM 메타데이터 블록 헤더그리고ASM 디스크 헤더이에 따라 오프셋을 계산하면 ASM 디스크를 식별하기가 매우 쉽다는 것을 알 수 있습니다.
- ASM 장치의 시작 부분부터 오프셋 0x0020에 상수 문자열이 있어야 합니다
ORCLDISK
. 이 문자열 바로 뒤에는 플랫폼별 드라이버 정보 문자열이 올 수도 있고 단순히 null 종결자가 올 수도 있습니다. - 오프셋 0x0048에서 null로 끝나는 ASM 디스크의 이름을 찾을 수 있습니다.
- 오프셋 0x0068에는 디스크가 현재 속해 있는 ASM 디스크 그룹의 이름이 있으며 역시 null로 종료됩니다.
- 오프셋 0x0088에는 디스크가 속한 ASM 실패 그룹의 이름이 있으며 역시 null로 끝납니다.
루트 액세스 권한이 있고 블록 장치의 고정 오프셋에서 문자열을 읽는 명령이 있는 경우 해당 정보를 사용하여 모든 장치를 반복하고 rhdiskpower*
모두 ASM 디스크인지 확인하고 그렇다면 식별 정보를 읽을 수 있습니다. 이는 출력을 구문 분석하는 대신 ASM 디스크를 매핑하는 보다 강력한 방법을 제공할 수 있습니다 ls
.