메이저 및 마이너 번호를 기반으로 AIX의 물리적 디스크에 ASM 디스크 매핑

메이저 및 마이너 번호를 기반으로 AIX의 물리적 디스크에 ASM 디스크 매핑

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여러 줄이 출력되고 awk10번째 요소를 제외한 모든 요소는 각 줄에서 제거되지만 별도의 줄로 유지됩니다.

최종 값 은 개행 문자 등 $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.

관련 정보