麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > ASM > 正文

手動修改asm disk header

2024-07-21 02:52:07
字體:
來源:轉載
供稿:網友
手動修改asm disk headerPosted on 2012 年 10 月 26 日 by xiaoyu手工修改asm disk header的分析[Oracle@standby ~]$ dd if=/dev/zero of=/dev/oracleasm/disks/DATA01 bs=4096 count=11+0 records in1+0 records out4096 bytes (4.1 kB) copied, 0.000715 seconds, 5.7 MB/sSQL> startup;ASM instance started Total System Global Area   79691776 bytesFixed Size                  1217812 bytesVariable Size              53308140 bytesASM Cache                  25165824 bytesORA-15032: not all alterations performedORA-15063: ASM discovered an insufficient number of disks for diskgroup"DATA_ASM" SQL> col path for a20SQL> select disk_Number,group_number,path,header_status from v$asm_disk; DISK_NUMBER GROUP_NUMBER PATH                 HEADER_STATU----------- ------------ -------------------- ------------          0            0 ORCL:DATA01          CANDIDATE          2            0 ORCL:DATA03          MEMBER          1            0 ORCL:DATA02          MEMBER[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 |morekfbh.endian:                          0 ; 0x000: 0x00kfbh.hard:                            0 ; 0x001: 0x00kfbh.type:                            0 ; 0x002: KFBTYP_INVALIDkfbh.datfmt:                          0 ; 0x003: 0x00kfbh.block.blk:                       0 ; 0x004: T=0 NUMB=0x0kfbh.block.obj:                       0 ; 0x008: TYPE=0x0 NUMB=0x0kfbh.check:                           0 ; 0x00c: 0x00000000kfbh.fcn.base:                        0 ; 0x010: 0x00000000kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000kfbh.spare1:                          0 ; 0x018: 0x00000000kfbh.spare2:                          0 ; 0x01c: 0x00000000[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA02 >/home/oracle/disk2.txt已經通過同組的diskgroup獲得了一個asm disk header,接下來如何去改寫這個asm disk header是重點,小魚這里簡單的說明下。[oracle@localhost bdump]$ vi /home/oracle/disk2.txt kfbh.endian:                          1 ; 0x000: 0x01 /*字節版本標識不需修改*/kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD /*metadata block type,其中的類型有1.KFBTYP_DISKHEAD 2.KFBYP_FREESPC 3.KFBTYP_ALLOCTBL 4.KFBTYP_FILEDIR 5.KFBTYP_LISTHEAD 6.KFBTYP_DISKDIR 17.KFBTYP_PST+META等*/kfbh.datfmt:                          1 ; 0x003: 0x01 /*取值1表示已經格式化*/kfbh.block.blk:                       0 ; 0x004: T=0 NUMB=0x0 /*block location of this block* disk header should have T=0 and NUMB=0*0 取值為0*/kfbh.block.obj:              2147483649 ; 0x008: TYPE=0x8 NUMB=0x0 /* block object id  Disk header的type 為8,numb為0,numb是asm disk在group中的編號kfdhdb.dksnum*/kfbh.check:                  1188800843 ; 0x00c: 0x46dba94b /*一致性檢驗的value*/kfbh.fcn.base:                        0 ; 0x010: 0x00000000 /* change number of last change*/kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000kfbh.spare1:                          0 ; 0x018: 0x00000000kfbh.spare2:                          0 ; 0x01c: 0x00000000kfdhdb.driver.PRovstr:   ORCLDISKDATA02 ; 0x000: length=14kfdhdb.driver.reserved[0]:   1096040772 ; 0x008: 0x41544144kfdhdb.driver.reserved[1]:        12848 ; 0x00c: 0x00003230kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000kfdhdb.compat:                168820736 ; 0x020: 0x0a100000 /*軟件的版本*/kfdhdb.dsknum:                        1 ; 0x024: 0x0001 /* disk num*,可以通過disk directory 獲得*/kfdhdb.grptyp:                        1 ; 0x026: KFDGTP_EXTERNAL /*冗余方式,可以通過PST獲得*/kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER /*disk header status*/kfdhdb.dskname:          DATA02 ; 0x028: length=6 /*dskname*/kfdhdb.grpname:           DATA_ASM ; 0x048: length=8  /*grpname*/kfdhdb.fgname:           DATA02 ; 0x068: length=6 /*fgname*/kfdhdb.capname:                         ; 0x088: length=0kfdhdb.crestmp.hi:             32975365 ; 0x0a8: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfdhdb.crestmp.lo:           2388063232 ; 0x0ac: USEC=0x0 MSEC=0x1bd SECS=0x25 MINS=0x23 /*create timestamp通過disk directory 獲得*/kfdhdb.mntstmp.hi:             32975394 ; 0x0b0: HOUR=0x2 DAYS=0x11 MNTH=0xa YEAR=0x7dckfdhdb.mntstmp.lo:           1266600960 ; 0x0b4: USEC=0x0 MSEC=0x3b3 SECS=0x37 MINS=0x12 /*mount timestamp,根據規則自定值*/kfdhdb.secsize:                     512 ; 0x0b8: 0x0200 /* disk sector size */kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000 /* block bytes*/kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000 /* au size */kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80 /* Stride between phys addr AUs  默認取值113792 */kfdhdb.dsksize:                    3820 ; 0x0c4: 0x00000eec /* Disk size  可通過KFBTYP_FREESPC獲得,也可通過disk directory獲得*/kfdhdb.pmcnt:                        2 ; 0x0c8: 0x00000002 /* Number of physically addressed allocation units */kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001 /* First FreeSpace table blk num  用于記錄freespace信息的首個block,通過KFBTYP_FREESPC 獲得*/kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002 /* First Alocation table blk num  用于記錄allocation信息的首個block ,通過KFBTYP_ALLOCTBL 獲得*/kfdhdb.f1b1locn:                      0 ; 0x0d4: 0x00000000 /* File Directory blk 1 AU num  File Directory起始地址 */kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000kfdhdb.redomirrors[1]:                0 ; 0x0da: 0x0000kfdhdb.redomirrors[2]:                0 ; 0x0dc: 0x0000kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000kfdhdb.dbcompat:              168820736 ; 0x0e0: 0x0a100000 /* database version*/kfdhdb.grpstmp.hi:             32975365 ; 0x0e4: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfdhdb.grpstmp.lo:           2387767296 ; 0x0e8: USEC=0x0 MSEC=0x9c SECS=0x25 MINS=0x23   /* diskgroup create time  可根據規則重新定義 */kfdhdb.ub4spare[0]:                   0 ; 0x0ec: 0x00000000kfdhdb.ub4spare[1]:                   0 ; 0x0f0: 0x00000000kfdhdb.ub4spare[2]:                   0 ; 0x0f4: 0x00000000kfdhdb.ub4spare[3]:                   0 ; 0x0f8: 0x00000000kfdhdb.ub4spare[4]:                   0 ; 0x0fc: 0x00000000kfdhdb.ub4spare[5]:                   0 ; 0x100: 0x00000000kfdhdb.ub4spare[6]:                   0 ; 0x104: 0x00000000........kfdhdb.acdb.aba.seq:                  0 ; 0x1d4: 0x00000000kfdhdb.acdb.aba.blk:                  0 ; 0x1d8: 0x00000000kfdhdb.acdb.ents:                     0 ; 0x1dc: 0x0000kfdhdb.acdb.ub2spare:                 0 ; 0x1de: 0x0000其實眼下我們需要修改的是下面的幾個數據:kfbh.block.obj:              2147483649 ; 0x008: TYPE=0x8 NUMB=0x0 kfbh.block.obj:              2147483649 ; 0x008: TYPE=0x8 NUMB=0x0 ( block object id  Disk header的type 為8, numb是asm disk在group中的編號kfdhdb.dksnum),其實可以通過第一個au的free au和au table來獲取obj。[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=0 blkn=1|morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            2 ; 0x002: KFBTYP_FREESPCkfbh.datfmt:                          1 ; 0x003: 0x01kfbh.block.blk:                       1 ; 0x004: T=0 NUMB=0x1kfbh.block.obj:              2147483648 ; 0x008: TYPE=0x8 NUMB=0x0此時直接通過DATA01磁盤的free au來獲取,事實上同一個disk的第一個au中的kfbh.block .obj都是相同的取值。Kfbh.block.obj從2147483649修改為2147483648。 kfdhdb.driver.provstr:   ORCLDISKDATA02 ; 0x000: length=14由于使用的是asmlib,需要修改diskname。kfdhdb.dsknum:                        1 ; 0x024: 0x0001 由于通過上面的obj已經清楚了該disk是第一塊disk,所以需要修改為kfdhdb.dsknum:      0 ; 0x024: 0x0000.kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL冗余方式,這個可以根據pst來獲取,當然同樣的disk 磁盤組的冗余方式是相同的。[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=1 blkn=0|morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                           17 ; 0x002: KFBTYP_PST_METAkfbh.datfmt:                          1 ; 0x003: 0x01kfbh.block.blk:                     256 ; 0x004: T=0 NUMB=0x100kfbh.block.obj:              2147483648 ; 0x008: TYPE=0x8 NUMB=0x0......kfdpHdrB.copyCnt:                     1 ; 0x010: 0x01disk的第二個au也就是pst信息中存儲了冗余方式kfdpHdrB.copyCnt: 1 ; 0x010: 0x01外部冗余。 kfdhdb.dskname:          DATA02 ; 0x028: length=6 /*dskname*/kfdhdb.grpname:           DATA_ASM ; 0x048: length=8  /*grpname*/kfdhdb.fgname:           DATA02 ; 0x068: length=6 /*fgname*/kfdhdb.crestmp.hi:             32975365 ; 0x0a8: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfdhdb.crestmp.lo:           2388063232 ; 0x0ac: USEC=0x0 MSEC=0x1bd SECS=0x25 MINS=0x23kfdhdb.secsize:                     512 ; 0x0b8: 0x0200這些信息就需要相應的disk directory了,如果大家有認真看過我前面介紹的vage的asm文件管理的剖析的文章,思路還是很清晰的,disk directory是文件號2,其au分布信息存儲在文件號1的第一個au的2號block上,而DATA01磁盤就是0號磁盤。[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=2 blkn=2|morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR……kfffde[0].xptr.au:                    2 ; 0x4a0: 0x00000002kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0kfffde[0].xptr.chk:                  41 ; 0x4a7: 0x29kfffde[1].xptr.au:           4294967295 ; 0x4a8: 0xffffffffkfffde[1].xptr.disk:              65535 ; 0x4ac: 0xffffkfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0kfffde[1].xptr.chk:                  42 ; 0x4af: 0x2a以上信息告訴disk directory的au是disknum 1的aunum 2上,而剛好DATA02的obj知道了他是disknum1。[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA02 aun=2|morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            6 ; 0x002: KFBTYP_DISKDIR……kfddde[0].dsknum:                     0 ; 0x034: 0x0000kfddde[0].state:                      2 ; 0x036: KFDSTA_NORMALkfddde[0].ub1spare:                   0 ; 0x037: 0x00kfddde[0].dskname:               DATA01 ; 0x038: length=6kfddde[0].fgname:                DATA01 ; 0x058: length=6kfddde[0].crestmp.hi:          32975365 ; 0x078: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfddde[0].crestmp.lo:        2388063232 ; 0x07c: USEC=0x0 MSEC=0x1bd SECS=0x25 MINS=0x23kfddde[0].failstmp.hi:                0 ; 0x080: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0kfddde[0].failstmp.lo:                0 ; 0x084: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0kfddde[0].timer:                      0 ; 0x088: 0x00000000kfddde[0].size:                    3820 ; 0x08c: 0x00000eec…..kfddde[1].dsknum:                     1 ; 0x1f4: 0x0001kfddde[1].state:                      2 ; 0x1f6: KFDSTA_NORMALkfddde[1].ub1spare:                   0 ; 0x1f7: 0x00kfddde[1].dskname:               DATA02 ; 0x1f8: length=6kfddde[1].fgname:                DATA02 ; 0x218: length=6kfddde[1].crestmp.hi:          32975365 ; 0x238: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfddde[1].crestmp.lo:        2388063232 ; 0x23c: USEC=0x0 MSEC=0x1bd SECS=0x25 MINS=0x23kfddde[1].failstmp.hi:                0 ; 0x240: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0kfddde[1].failstmp.lo:                0 ; 0x244: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0kfddde[1].timer:                      0 ; 0x248: 0x00000000kfddde[1].size:                    3820 ; 0x24c: 0x00000eec kfddde[2].dsknum:                     2 ; 0x3b4: 0x0002kfddde[2].state:                      2 ; 0x3b6: KFDSTA_NORMALkfddde[2].ub1spare:                   0 ; 0x3b7: 0x00kfddde[2].dskname:               DATA03 ; 0x3b8: length=6kfddde[2].fgname:                DATA03 ; 0x3d8: length=6kfddde[2].crestmp.hi:          32975365 ; 0x3f8: HOUR=0x5 DAYS=0x10 MNTH=0xa YEAR=0x7dckfddde[2].crestmp.lo:        2388063232 ; 0x3fc: USEC=0x0 MSEC=0x1bd SECS=0x25 MINS=0x23kfddde[2].failstmp.hi:                0 ; 0x400: HOUR=0x0 DAYS=0x0 MNTH=0x0 YEAR=0x0kfddde[2].failstmp.lo:                0 ; 0x404: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0kfddde[2].timer:                      0 ; 0x408: 0x00000000kfddde[2].size:                    4643 ; 0x40c: 0x00001223disk directory信息已經全部獲得,通過這些信息可以對著修改 kfdhdb.pmcnt:                        2 ; 0x0c8: 0x00000002kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001kfdhdb.altlocn:                       2 ; 0x0d0: 0x0000000kfdhdb.f1b1locn:                      0 ; 0x0d4: 0x00000000kfdhdb.pmcnt:是physical metadata占用的au,取值是2個au不用修改。 kfdhdb.fstlocn是free au的首個blknum,而free au是開始于每個disk 的au 0的blkn 1上[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=0 blkn=1 |morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            2 ; 0x002: KFBTYP_FREESPC kfdhdb.altlocn是allocate table的au最開始的blknum[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=0 blkn=2 |morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBLallocate table的au最開始于aun 0的blkn 2。 kfdhdb.f1b1locn是file directory的最開始aun,也就是aun 2,其中第一個blkn 0用于系統保留,blkn 1開始是file directory的開始。[oracle@standby ~]$ kfed read /dev/oracleasm/disks/DATA01 aun=2 blkn=1 |morekfbh.endian:                          1 ; 0x000: 0x01kfbh.hard:                          130 ; 0x001: 0x82kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR小魚初步帶領大家分析了一下asm disk header的信息,然后上面的故障相信很好處理,直接對著修改即可,如果同組diskgroup的所有disk header信息都丟失,也可以手工構造一個,構造的大部分數據都可以對著上面的分析方式對著修改,小魚關于asm kfed讀取header分析參考了部分文檔,謝謝!手工重構asm disk headerhttp://www.easyora.net/blog/manual_fix_asm_disk_header1.htmlasm disk header備份恢復于重建http://blog.csdn.net/tianlesoftware/article/details/6743677vage的asm文件管理解析http://www.itpub.net/thread-1597605-1-1.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 毛片网站视频 | 视频二区国产 | 精品国产一区二区三区在线 | 午夜色片 | 欧美日韩精品不卡一区二区三区 | 日本精品网 | 国产精品久久久久久久久久妇女 | 欧美大逼网 | 国产成人在线一区二区 | 成人毛片免费看 | 一级黄色毛片播放 | 成人毛片在线免费看 | 天海翼无删减av三级在线观看 | 欧美特一级片 | 欧美成人性生活片 | 国产一国产一级毛片视频在线 | 色就操 | 久久精品一二三区 | 中文字幕精品在线视频 | 久啪视频 | 国产女厕一区二区三区在线视 | 久久久久久久久亚洲精品 | videos高潮| 亚洲va久久久噜噜噜久牛牛影视 | 毛片网站网址 | 美女黄污视频 | 成人国产免费观看 | 国产免费高清 | 国产一区二区成人在线 | 黄污网站在线 | 黄片一级毛片 | 国产精品久久二区 | 叉逼视频| 欧美日韩一 | 国产电影精品久久 | 精品国产一区二区三区久久久蜜月 | 国产免费一区二区三区在线能观看 | 久久亚洲国产精品 | 国产18成人免费视频 | 久久久久免费精品 | 国产精品欧美日韩一区二区 |