以下脚本用于ASM修复disk header时:
1. dd各种有用的metadata block :
#! /bin/sh rm /tmp/kfed_DH.out /tmp/kfed_FS.out /tmp/kfed_BK.out /tmp/kfed_FD.out /tmp/kfed_DD.out /tmp/kfed_PST.out for i in `ls /dev/asm-disk*` do echo $i >> /tmp/kfed_DH.out kfed read $i >> /tmp/kfed_DH.out echo $i >> /tmp/kfed_FS.out kfed read $i blkn=1 >> /tmp/kfed_FS.out echo $i >> /tmp/kfed_BK.out kfed read $i aun=1 blkn=254 >> /tmp/kfed_BK.out echo $i >> /tmp/kfed_FD.out kfed read $i aun=2 blkn=1 >> /tmp/kfed_FD.out echo $i >> /tmp/kfed_DD.out kfed read $i aun=2 blkn=2 >> /tmp/kfed_DD.out echo $i >> /tmp/kfed_PST.out kfed read $i aun=1 blkn=2 >> /tmp/kfed_PST.out done
kfed_DH.out ==>KFBTYP_DISKHEAD aun=0 blkn=0
kfed_FS.out ==> KFBTYP_FREESPC aun=1 blkn=0
kfed_BK.out ==> KFBTYP_DISKHEAD DISK HEAD BACKUP aun=1 blkn=254
kfed_FD.out ==> KFBTYP_FILEDIR aun=2 blkn=1
kfed_DD.out ==> KFBTYP_FILEDIR aun=2 blkn=2
kfed_PST.out ==> KFBTYP_PST_NONE aun=1 blkn=2
2 . Query ASM header from SQL:
spool asm_info.html set pagesize 1000 set linesize 250 set feedback off col bytes format 999,999,999,999 col space format 999,999,999,999 col gn format 999 col name format a20 col au format 99999999 col state format a12 col type format a12 col total_mb format 999,999,999 col free_mb format 999,999,999 col od format 999 col compatibility format a12 col dn format 999 col mount_status format a12 col header_status format a12 col mode_status format a12 col mode format a12 col failgroup format a20 col label format a12 col path format a45 col path1 format a40 col path2 format a40 col path3 format a40 col bytes_read format 999,999,999,999,999 col bytes_written format 999,999,999,999,999 col cold_bytes_read format 999,999,999,999,999 col cold_bytes_written format 999,999,999,999,999 alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS' ; select to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS' ) current_time from dual; select group_number gn, name, allocation_unit_size au, state, type, total_mb, free_mb, offline_disks od, compatibility from v$asm_diskgroup; select group_number gn,disk_number dn, mount_status, header_status,mode_status,state, total_mb, free_mb,name, failgroup, label, path,create_date, mount_date from v$asm_disk order by group_number, disk_number; break on g_n skip 1 break on failgroup skip 1 compute sum of t_mb f_mb on failgroup compute count of failgroup on failgroup select g.group_number g_n,g.disk_number d_n,g.name , g.path , g.total_mb t_mb,g.free_mb f_mb,g.failgroup from v$asm_disk g order by g_n, failgroup, d_n; SET MARKUP HTML ON set echo on select 'THIS ASM REPORT WAS GENERATED AT: ==)> ' , sysdate " " from dual; select 'HOSTNAME ASSOCIATED WITH THIS ASM INSTANCE: ==)> ' , MACHINE " " from v$session where program like '%SMON%'; select * from v$asm_diskgroup; SELECT * FROM V$ASM_DISK ORDER BY GROUP_NUMBER,DISK_NUMBER; SELECT * FROM V$ASM_CLIENT; select * from V$ASM_ATTRIBUTE; select * from v$asm_operation; select * from v$version; show parameter show sga spool off exit
AMDU result:
Placeholder for AMDU binaries and using with ASM 10g (Doc ID 553639.1) amdu -diskstring '/dev/asm-disk*' -dump 'MACLEAN_DG' -noimage
4. 脚本查找LISTHEAD
#!/bin/bash # Usage: scan.sh <path> <AU size> <disk size in AU> i=0 size=0 asize=$2 rm list.txt echo AUSZIE=$asize while [ 1 ] do kfed read $1 ausz=$asize aunum=$i blknum=0 | grep LISTHEAD > list.txt size=$(stat -c %s list.txt) if [ $size -gt 0 ]; then echo LISTHEAD is found in AU=$i FILE=lhAU$i.txt kfed read $1 ausz=$asize aunum=$i blknum=0 text=lhAU$i.txt fi i=$[$i+1] if [ $i -eq $3 ]; then echo $3 AUs scanned exit 0 fi done
使用方法:
[grid@vmac1 tmp]$ ./scan.sh /dev/asm-diskb 1048576 10
AUSZIE=1048576
LISTHEAD is found in AU=2 FILE=lhAU2.txt
10 AUs scanned
Comment