從ASM磁碟中還原出檔案(一)
在KFBTYP_FILEDIR Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE還完好的情況下,找到FILE和AU的對映關係,從ASM磁碟中恢復資料檔案。如果KFBTYP_FILEDIR也沒了,也可以一個塊一個塊的分析ASM磁碟,也能將資料檔案恢復出來。
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE1. 找到File Directory
for((i=1;i<=4;i++))
do
for ((j=0;j<=100;j++))
do
COUNT=`kfed p=find aun=$j dev=/dev/oracleasm/disks/VOL$i|grep "type 4"|wc -l`
echo "[DISK]VOL"$i"[AUN]"$j" "$COUNT
done
done
[DISK]VOL1[AUN]0 0
[DISK]VOL1[AUN]1 0
[DISK]VOL1[AUN]2 255
[DISK]VOL1[AUN]3 0
[DISK]VOL1[AUN]4 0
[DISK]VOL1[AUN]5 0
[DISK]VOL1[AUN]6 0
[DISK]VOL1[AUN]7 0
[DISK]VOL1[AUN]8 0
[DISK]VOL1[AUN]9 0
[DISK]VOL1[AUN]10 0
[DISK]VOL1[AUN]11 0
[DISK]VOL1[AUN]12 0
[DISK]VOL1[AUN]13 0
[DISK]VOL1[AUN]14 0
[DISK]VOL1[AUN]15 0
[DISK]VOL1[AUN]16 0
[DISK]VOL1[AUN]17 0
[DISK]VOL1[AUN]18 0
[DISK]VOL1[AUN]19 0
[DISK]VOL1[AUN]20 0
[DISK]VOL1[AUN]21 0
[DISK]VOL1[AUN]22 256
2. 第一個AU(AUN最小的)才是後設資料AU,是記錄DISKGROUP中還有那些FILEDIR AU的AU
相當於ASSM的3級點陣圖
DISK[0]AU[2]BLOCK[0]是KFBTYP_LISTHEAD
DISK[0]AU[2]BLOCK[0]是KFBTYP_FILEDIR
[oracle10@zhangqiaoc ~]$ kfed p=read aun=2 blkn=1 dev=/dev/oracleasm/disks/VOL1 |more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 1 ; 0x004: T=0 NUMB=0x1
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 4227228654 ; 0x00c: 0xfbf663ee
kfbh.fcn.base: 262 ; 0x010: 0x00000106
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x00c: 0x00000000
kfffdb.lobytes: 2097152 ; 0x010: 0x00200000
kfffdb.xtntcnt: 2 ; 0x014: 0x00000002
kfffdb.xtnteof: 2 ; 0x018: 0x00000002
kfffdb.blkSize: 4096 ; 0x01c: 0x00001000
kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0
kfffdb.fileType: 15 ; 0x021: 0x0f
kfffdb.dXrs: 17 ; 0x022: SCHE=0x1 NUMB=0x1
kfffdb.iXrs: 17 ; 0x023: SCHE=0x1 NUMB=0x1
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 2 ; 0x03c: 0x0002
kfffdb.break: 60 ; 0x03e: 0x003c
kfffdb.priZn: 0 ; 0x040: 0x00
kfffdb.secZn: 0 ; 0x041: 0x00
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 0 ; 0x04c: 0x00
kfffdb.strpsz: 0 ; 0x04d: 0x00
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32940650 ; 0x050: HOUR=0xa DAYS=0x13 MNTH=0x8 YEAR=0x7da
kfffdb.crets.lo: 3670807552 ; 0x054: USEC=0x0 MSEC=0x305 SECS=0x2c MINS=0x36
kfffdb.modts.hi: 32940650 ; 0x058: HOUR=0xa DAYS=0x13 MNTH=0x8 YEAR=0x7da
kfffdb.modts.lo: 3670807552 ; 0x05c: USEC=0x0 MSEC=0x305 SECS=0x2c MINS=0x36
kfffdb.spare[0]: 0 ; 0x060: 0x00000000
kfffdb.spare[1]: 0 ; 0x064: 0x00000000
kfffdb.spare[2]: 0 ; 0x068: 0x00000000
kfffdb.spare[3]: 0 ; 0x06c: 0x00000000
kfffdb.spare[4]: 0 ; 0x070: 0x00000000
kfffdb.spare[5]: 0 ; 0x074: 0x00000000
kfffdb.spare[6]: 0 ; 0x078: 0x00000000
kfffdb.spare[7]: 0 ; 0x07c: 0x00000000
kfffdb.spare[8]: 0 ; 0x080: 0x00000000
kfffdb.spare[9]: 0 ; 0x084: 0x00000000
kfffdb.spare[10]: 0 ; 0x088: 0x00000000
kfffdb.spare[11]: 0 ; 0x08c: 0x00000000
kfffdb.spare[12]: 0 ; 0x090: 0x00000000
kfffdb.spare[13]: 0 ; 0x094: 0x00000000
kfffdb.spare[14]: 0 ; 0x098: 0x00000000
kfffdb.spare[15]: 0 ; 0x09c: 0x00000000
kfffdb.usm: ; 0x0a0: length=0
kfffde[0].xptr.au: 2 ; 0x4a0: 0x00000002
kfffde[0].xptr.disk: 0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0
kfffde[0].xptr.chk: 40 ; 0x4a7: 0x28
kfffde[1].xptr.au: 22 ; 0x4a8: 0x00000016
kfffde[1].xptr.disk: 0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0
kfffde[1].xptr.chk: 60 ; 0x4af: 0x3c
kfffde[2].xptr.au: 4294967295 ; 0x4b0: 0xffffffff
kfffde[2].xptr.disk: 65535 ; 0x4b4: 0xffff
kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 C=0 S=0
kfffde[2].xptr.chk: 42 ; 0x4b7: 0x2a
第一個,kfffde[0]指向的自身,DISK[0]AU[2]
第二個,kfffde[1]指向儲存著其他檔案的FILEDIR,DISK[0]AU[22]
第三個,kfffde[2],已經超出的範圍
3. 由於現在檔案少,所以只有一個AU記錄著檔案的分佈
在這個AU中,每個塊代表一個檔案,既DISK[0]AU[22]BLK[0]表示一個檔案,DISK[0]AU[22]BLK[1]表示一個檔案[oracle10@zhangqiaoc ~]$ kfed p=read aun=22 blkn=4 dev=/dev/oracleasm/disks/VOL1 |more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 260 ; 0x004: T=0 NUMB=0x104 --internal file id
kfbh.block.obj: 1 ; 0x008: TYPE=0x0 NUMB=0x1
kfbh.check: 1448949561 ; 0x00c: 0x565d3739
kfbh.fcn.base: 3092 ; 0x010: 0x00000c14
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfffdb.node.incarn: 727441081 ; 0x000: A=1 NUMM=0x15adef5c
kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes: 0 ; 0x00c: 0x00000000
kfffdb.lobytes: 314580992 ; 0x010: 0x12c02000 --檔案大小
kfffdb.xtntcnt: 301 ; 0x014: 0x0000012d --檔案一共有多少個AU
kfffdb.xtnteof: 301 ; 0x018: 0x0000012d
kfffdb.blkSize: 8192 ; 0x01c: 0x00002000
kfffdb.flags: 17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0
kfffdb.fileType: 2 ; 0x021: 0x02
kfffdb.dXrs: 17 ; 0x022: SCHE=0x1 NUMB=0x1
kfffdb.iXrs: 17 ; 0x023: SCHE=0x1 NUMB=0x1
kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff
kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000
kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000
kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff
kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000
kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000
kfffdb.xtntblk: 61 ; 0x03c: 0x003d --本塊中記錄著多少個AU
kfffdb.break: 60 ; 0x03e: 0x003c --跳轉到下一級記錄中 的記錄號
kfffdb.priZn: 0 ; 0x040: 0x00
kfffdb.secZn: 0 ; 0x041: 0x00
kfffdb.ub2spare: 0 ; 0x042: 0x0000
kfffdb.alias[0]: 212 ; 0x044: 0x000000d4
kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff
kfffdb.strpwdth: 1 ; 0x04c: 0x01
kfffdb.strpsz: 20 ; 0x04d: 0x14
kfffdb.usmsz: 0 ; 0x04e: 0x0000
kfffdb.crets.hi: 32940650 ; 0x050: HOUR=0xa DAYS=0x13 MNTH=0x8 YEAR=0x7da
kfffdb.crets.lo: 3893391360 ; 0x054: USEC=0x0 MSEC=0x1c SECS=0x1 MINS=0x3a
kfffdb.modts.hi: 32940651 ; 0x058: HOUR=0xb DAYS=0x13 MNTH=0x8 YEAR=0x7da
kfffdb.modts.lo: 0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.spare[0]: 0 ; 0x060: 0x00000000
kfffdb.spare[1]: 0 ; 0x064: 0x00000000
kfffdb.spare[2]: 0 ; 0x068: 0x00000000
kfffdb.spare[3]: 0 ; 0x06c: 0x00000000
kfffdb.spare[4]: 0 ; 0x070: 0x00000000
kfffdb.spare[5]: 0 ; 0x074: 0x00000000
kfffdb.spare[6]: 0 ; 0x078: 0x00000000
kfffdb.spare[7]: 0 ; 0x07c: 0x00000000
kfffdb.spare[8]: 0 ; 0x080: 0x00000000
kfffdb.spare[9]: 0 ; 0x084: 0x00000000
kfffdb.spare[10]: 0 ; 0x088: 0x00000000
kfffdb.spare[11]: 0 ; 0x08c: 0x00000000
kfffdb.spare[12]: 0 ; 0x090: 0x00000000
kfffdb.spare[13]: 0 ; 0x094: 0x00000000
kfffdb.spare[14]: 0 ; 0x098: 0x00000000
kfffdb.spare[15]: 0 ; 0x09c: 0x00000000
kfffdb.usm: ; 0x0a0: length=0
kfffde[0].xptr.au: 74 ; 0x4a0: 0x0000004a --這是是資料AU
kfffde[0].xptr.disk: 1 ; 0x4a4: 0x0001
kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 C=0 S=0
kfffde[0].xptr.chk: 97 ; 0x4a7: 0x61
kfffde[1].xptr.au: 83 ; 0x4a8: 0x00000053
kfffde[1].xptr.disk: 0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 C=0 S=0
kfffde[1].xptr.chk: 121 ; 0x4af: 0x79
…………………….
kfffde[58].xptr.au: 102 ; 0x670: 0x00000066
kfffde[58].xptr.disk: 0 ; 0x674: 0x0000
kfffde[58].xptr.flags: 0 ; 0x676: L=0 E=0 D=0 C=0 S=0
kfffde[58].xptr.chk: 76 ; 0x677: 0x4c
kfffde[59].xptr.au: 93 ; 0x678: 0x0000005d
kfffde[59].xptr.disk: 2 ; 0x67c: 0x0002
kfffde[59].xptr.flags: 0 ; 0x67e: L=0 E=0 D=0 C=0 S=0
kfffde[59].xptr.chk: 117 ; 0x67f: 0x75
kfffde[60].xptr.au: 94 ; 0x680: 0x0000005e -- kfffdb.break指定的跳轉出去的,也就是說這個AU不是資料AU,而是一個記錄該FILE有哪些AU的AU
kfffde[60].xptr.disk: 2 ; 0x684: 0x0002
kfffde[60].xptr.flags: 0 ; 0x686: L=0 E=0 D=0 C=0 S=0
kfffde[60].xptr.chk: 118 ; 0x687: 0x76
kfffde[61].xptr.au: 4294967295 ; 0x688: 0xffffffff
kfffde[61].xptr.disk: 65535 ; 0x68c: 0xffff
kfffde[61].xptr.flags: 0 ; 0x68e: L=0 E=0 D=0 C=0 S=0
kfffde[61].xptr.chk: 42 ; 0x68f: 0x2a
4. 檢視這個塊
[oracle10@zhangqiaoc ~]$ kfed p=read aun=94 blkn=0 dev=/dev/oracleasm/disks/VOL3 |more
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 2147483648 ; 0x004: T=1 NUMB=0x0
kfbh.block.obj: 260 ; 0x008: TYPE=0x0 NUMB=0x104
kfbh.check: 4058154623 ; 0x00c: 0xf1e2867f
kfbh.fcn.base: 1336 ; 0x010: 0x00000538
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kffixb.dxsn: 60 ; 0x000: 0x0000003c
kffixb.xtntblk: 241 ; 0x004: 0x00f1 --本塊中記錄著多少AU
kffixb.dXrs: 17 ; 0x006: SCHE=0x1 NUMB=0x1
kffixb.ub1spare: 0 ; 0x007: 0x00
kffixb.ub4spare: 0 ; 0x008: 0x00000000
kffixe[0].xptr.au: 94 ; 0x00c: 0x0000005e
kffixe[0].xptr.disk: 1 ; 0x010: 0x0001
kffixe[0].xptr.flags: 0 ; 0x012: L=0 E=0 D=0 C=0 S=0
kffixe[0].xptr.chk: 117 ; 0x013: 0x75
kffixe[1].xptr.au: 103 ; 0x014: 0x00000067
kffixe[1].xptr.disk: 0 ; 0x018: 0x0000
kffixe[1].xptr.flags: 0 ; 0x01a: L=0 E=0 D=0 C=0 S=0
kffixe[1].xptr.chk: 77 ; 0x01b: 0x4d
kffixe[2].xptr.au: 95 ; 0x01c: 0x0000005f
kffixe[2].xptr.disk: 2 ; 0x020: 0x0002
kffixe[2].xptr.flags: 0 ; 0x022: L=0 E=0 D=0 C=0 S=0
kffixe[2].xptr.chk: 119 ; 0x023: 0x77
kffixe[3].xptr.au: 95 ; 0x024: 0x0000005f
kffixe[3].xptr.disk: 1 ; 0x028: 0x0001
kffixe[3].xptr.flags: 0 ; 0x02a: L=0 E=0 D=0 C=0 S=0
kffixe[3].xptr.chk: 116 ; 0x02b: 0x74
kffixe[4].xptr.au: 104 ; 0x02c: 0x00000068
kffixe[4].xptr.disk: 0 ; 0x030: 0x0000
kffixe[4].xptr.flags: 0 ; 0x032: L=0 E=0 D=0 C=0 S=0
kffixe[4].xptr.chk: 66 ; 0x033: 0x42
這樣就能找到這個檔案所有的AU了
那還會不會有下一級記錄塊分配的AU了,理論上應該沒有了
因為FILEDIR中1個塊,記錄著300個AU分配
每個AU 1MB,每個塊4096byte,一個AU就256個塊
一個塊記錄著480個資料AU
一共 300*256*480/1024/1024 = 35.15625 TB
OTN文件中描述 External redundancy 下最大檔案為 35 TB
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-671472/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從ASM磁碟中還原出檔案(二)ASM
- 從ASM磁碟中複製檔案到本地檔案系統ASM
- 移動資料檔案從檔案系統到ASM磁碟組中ASM
- ASM之磁碟組中目錄檔案的管理ASM
- rman還原控制檔案(一)
- 用RMAN遷移檔案到ASM或從ASM遷出ASM
- 從控制檔案自動備份還原引數檔案
- Windows 下使用檔案模擬磁碟配置ASM磁碟組WindowsASM
- 全面學習和應用ORACLE ASM特性--(5)管理asm磁碟中的檔案OracleASM
- 在ASM磁碟組中刪除一個磁碟ASM
- 使用dbms_file_transfer從asm中抽取檔案ASM
- 在ASM磁碟組之間移動檔案ASM
- oracle 將表空間下的資料檔案從檔案系統遷移到ASM磁碟組OracleASM
- 如何移動asm磁碟組內的資料檔案到另外一個磁碟組ASM
- pg從磁碟讀取檔案
- 磁碟已滿,如何從 Mac 中刪除大檔案?Mac
- 全面學習和應用ORACLE ASM特性--(4)管理asm磁碟組中目錄和檔案OracleASM
- 【ASM學習】從ASM拷貝檔案的方法ASM
- 實現資料庫由檔案系統遷移到 ASM 磁碟組中資料庫ASM
- oracle asm 儲存 a磁碟組中的資料檔案 遷移到b磁碟組實施步驟OracleASM
- rman還原控制檔案(四)
- rman還原控制檔案(三)
- rman還原控制檔案(二)
- 用oracle amdu 抽取asm磁碟組的資料檔案OracleASM
- ORACLE 資料庫 ASM磁碟組上新增控制檔案Oracle資料庫ASM
- 訪問ASM中的檔案ASM
- ASM中多功控制檔案ASM
- 移動資料檔案從ASM到檔案系統ASM
- 從檔案系統遷移到ASM上ASM
- oralce 從檔案系統遷移到ASMASM
- 記一次逆向分析解密還原Class檔案解密
- 【原創】使用普通檔案建立ASM例項ASM
- 從定位資料塊所在ASM磁碟到ASM strippingASM
- 檔案還原工具ForemostREM
- SVN還原已刪除檔案
- ASM下資料檔案遷移至不同磁碟組小記ASM
- 【原創】資料庫從檔案系統轉移至ASM實驗記錄資料庫ASM
- Linux 磁碟對應 ASM diskgroup 中的磁碟LinuxASM