深入了解Oracle ASM(二):ASM File number 1 文件目录

ASM file number 1 – the File Directory

 

ASM文件目录File Directory针对本Disk Group中的每一个文件包含一条记录。该记录指向该文件的前60个数据盘区extents,必要时还包括间接盘区indirect extents。该文件目录在必要容纳更多文件数目时会自动增长。每一个文件目录记录保持更新以下文件信息:

 

  • 文件大小
  • 该文件的块大小
  • 文件种类,例如:数据文件,ASM元数据文件,在线日志,归档日志,控制文件等等
  • 文件冗余度:外部、2路或者3路镜像
  • 条带化配置,coarse or fine
  • 到前60个extent的直接盘区指针(direct extent pointer)
  • 300个间接盘区指针(indirect extent pointers)
  • 创建时间戳
  • 最后修改或更新时间戳
  • 指向别名目录中的用户别名和文件名

ASM 1号文件 file number 1

文件号file number是文件目录中找到对应文件记录的重要索引键。 其中第一条记录是该文件目录自身。为了找出过期的文件号,所以在每个文件创建时都生成了一个唯一的32 bit的识别号incarnation number。由此,disk group的ID+ file number + 该incarnation number 可以做到唯一识别某个指定文件。

 

请注意,约定俗成地将ASM文件的第一个block称为0号块–block zero。 0号块通常包含十分重要的接口信息。

 

文件目录file directory 的位置 

 

为了找出file directory所在AU的位置,我们需要使用kfed工具浏览ASM disk header磁盘头部0号AU中的kfdhdb.f1b1locn信息,例如我们使用kfed查看asm disk /dev/asm-diski上的信息:

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski  aun=0 |less

kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:              2147483650 ; 0x008: disk=2
kfbh.check:                  2593903300 ; 0x00c: 0x9a9bd2c4
kfbh.fcn.base:                      217 ; 0x010: 0x000000d9
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                186646528 ; 0x020: 0x0b200000
kfdhdb.dsknum:                        2 ; 0x024: 0x0002
kfdhdb.grptyp:                        3 ; 0x026: KFDGTP_HIGH
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname:           SYSTEMDG_0002 ; 0x028: length=13
kfdhdb.grpname:                SYSTEMDG ; 0x048: length=8
kfdhdb.fgname:            SYSTEMDG_0002 ; 0x068: length=13
kfdhdb.capname:                         ; 0x088: length=0
kfdhdb.crestmp.hi:             32982958 ; 0x0a8: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfdhdb.crestmp.lo:           3878604800 ; 0x0ac: USEC=0x0 MSEC=0x3b4 SECS=0x32 MINS=0x39
kfdhdb.mntstmp.hi:             32983461 ; 0x0b0: HOUR=0x5 DAYS=0xd MNTH=0x2 YEAR=0x7dd
kfdhdb.mntstmp.lo:            474934272 ; 0x0b4: USEC=0x0 MSEC=0x3bb SECS=0x4 MINS=0x7
kfdhdb.secsize:                     512 ; 0x0b8: 0x0200
kfdhdb.blksize:                    4096 ; 0x0ba: 0x1000
kfdhdb.ausize:                  1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize:                    3072 ; 0x0c4: 0x00000c00
kfdhdb.pmcnt:                         2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn:                       1 ; 0x0cc: 0x00000001
kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn:                      2 ; 0x0d4: 0x00000002
kfdhdb.redomirrors[0]:                0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]:                0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]:                0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]:                0 ; 0x0de: 0x0000
kfdhdb.dbcompat:              168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi:             32982958 ; 0x0e4: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfdhdb.grpstmp.lo:           3878197248 ; 0x0e8: USEC=0x0 MSEC=0x226 SECS=0x32 MINS=0x39
kfdhdb.vfstart:                       0 ; 0x0ec: 0x00000000
kfdhdb.vfend:                         0 ; 0x0f0: 0x00000000
kfdhdb.spfile:                       38 ; 0x0f4: 0x00000026
kfdhdb.spfflg:                        1 ; 0x0f8: 0x00000001

//也可以通过查询X$KFFXP视图找出该FILE NUMBER=1的文件的Allocation Units

select disk_kffxp, AU_kffxp, xnum_kffxp
  from x$kffxp
 where group_kffxp = 3 -- Diskgroup 3 (GROUPB)
   and number_kffxp = 1 -- File 1 (file directory)
   /

DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         0          2          0
         1          2          0
         2          2          0
         2         46          1
         3         44          1
         0         46          1

 

 

 

上面显示的结果显示 在disk number =0 的ASM Disk 上的allocation units 2属于file number=1的file directory, 同理 在disk number =0 的ASM Disk 上的allocation units 46也属于file number=1的file directory。

在1MB allocation units大小,4k ASM block大小的前提下,第一个allocation unit可以存放255个目录记录(256*4k=1MB)。 由于前255个文件是为ASM元数据保留的,所以第一个allocation unit仅记录ASM元数据文件第一到第六个。剩下的allocation unit(46)则存放接下来的255个ASM文件。

 

文件目录结构

 

Allocation unit=2 的block 1描述了该ASM 1号文件file directory自身。该块的前部分包含了标准的头部信息,并显示该块的类型为KFBTYP_FILEDIR。 在该kfffdb结构之后,该file directory的每一个block包含描述文件物理属性和盘区指针的信息, 以及指向所有间接盘区的指针。

以下是aun=2 block=1的file directory信息:

 

 

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=1  > block.log
[grid@localhost ~]$ vi block.log 

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: blk=1
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  3254018873 ; 0x00c: 0xc1f46339
kfbh.fcn.base:                      493 ; 0x010: 0x000001ed
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:                       6 ; 0x014: 0x00000006
kfffdb.xtnteof:                       6 ; 0x018: 0x00000006
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:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
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:                       6 ; 0x03c: 0x0006
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000

 

 

其中字段的含义:

 

 

KFBTYP_FILEDIR // block type = file directory block
kfffdb.node.incarn: File incarnation information
kfffdb.hibytes File size (high bytes)
kfffdb.lobyte 2097152 ; 0x010: 0x00200000 File size (low bytes) 2097152 ==》2MB大小
kfffdb.xtntcnt: 6 ; 0x014: 0x00000006 // 6 extents for this file
kfffdb.xtnteof: 6 ; 0x018: 0x00000006 // 6 extents before eof
kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 // 标准ASM block大小
kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0
// Flag definitions
O – File is original, not snapshot
S – File is striped
S – Strict allocation policy
D – File is damaged
C – File creation is committed
I – File has empty indirect block
R – File has known at-risk value
A – The at-risk value itsefl

 

接下来看一个ASM metadata 文件的实际目录记录,我们就查看aun=2的 blkn=4

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=4|less

kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       4 ; 0x004: blk=4
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  3786097185 ; 0x00c: 0xe1ab4221
kfbh.fcn.base:                      206 ; 0x010: 0x000000ce
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:                 8331264 ; 0x010: 0x007f2000
kfffdb.xtntcnt:                      24 ; 0x014: 0x00000018
kfffdb.xtnteof:                      24 ; 0x018: 0x00000018
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:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
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:                      24 ; 0x03c: 0x0018
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
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:               32982958 ; 0x050: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfffdb.crets.lo:             3878730752 ; 0x054: USEC=0x0 MSEC=0x2f SECS=0x33 MINS=0x39
kfffdb.modts.hi:               32982958 ; 0x058: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfffdb.modts.lo:             3878730752 ; 0x05c: USEC=0x0 MSEC=0x2f SECS=0x33 MINS=0x39
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                   36 ; 0x4a0: 0x00000024
kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  15 ; 0x4a7: 0x0f
kfffde[1].xptr.au:                   45 ; 0x4a8: 0x0000002d
kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                   7 ; 0x4af: 0x07
kfffde[2].xptr.au:                   34 ; 0x4b0: 0x00000022
kfffde[2].xptr.disk:                  3 ; 0x4b4: 0x0003
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  11 ; 0x4b7: 0x0b
kfffde[3].xptr.au:                   36 ; 0x4b8: 0x00000024
kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  14 ; 0x4bf: 0x0e
kfffde[4].xptr.au:                   43 ; 0x4c0: 0x0000002b
kfffde[4].xptr.disk:                  3 ; 0x4c4: 0x0003
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                   2 ; 0x4c7: 0x02
kfffde[5].xptr.au:                   37 ; 0x4c8: 0x00000025
kfffde[5].xptr.disk:                  1 ; 0x4cc: 0x0001
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0
kfffde[5].xptr.chk:                  14 ; 0x4cf: 0x0e
kfffde[6].xptr.au:                   42 ; 0x4d0: 0x0000002a
kfffde[6].xptr.disk:                  2 ; 0x4d4: 0x0002
kfffde[6].xptr.flags:                 0 ; 0x4d6: L=0 E=0 D=0 S=0
kfffde[6].xptr.chk:                   2 ; 0x4d7: 0x02
kfffde[7].xptr.au:                   40 ; 0x4d8: 0x00000028
kfffde[7].xptr.disk:                  1 ; 0x4dc: 0x0001
kfffde[7].xptr.flags:                 0 ; 0x4de: L=0 E=0 D=0 S=0
kfffde[7].xptr.chk:                   3 ; 0x4df: 0x03
kfffde[8].xptr.au:                   39 ; 0x4e0: 0x00000027
kfffde[8].xptr.disk:                  3 ; 0x4e4: 0x0003
kfffde[8].xptr.flags:                 0 ; 0x4e6: L=0 E=0 D=0 S=0

 

 

其中字段的含义:

kfffdb.lobytes: 8331264 ; 0x010: 0x007f2000 ==>说明文件大小为8331264bytes
kfffdb.xtntcnt: 24 ; 0x014: 0x00000018
kfffdb.xtnteof: 24 ; 0x018: 0x00000018 ==> 说明该文件目前共24个extents
kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 ==> 4k的ASM Block size
kfffdb.fileType: 15 ; 0x021: 0x0f filetype=15 说明是ASM Metadata File
kfffde[0].xptr.au: 36 ; 0x4a0: 0x00000024 file number=4 的第一extent指向36号 AU
kfffde[0].xptr.disk: 1 ; 0x4a4: 0x0001 Disk number 1
kfffde[1].xptr.au: 45 ; 0x4a8: 0x0000002d file number=4 的第二extent指向45号AU
kfffde[2].xptr.au: 4294967295 ; 0x4b0: 0xfffffff 若 kfffde[N].xptr.au=4294967295 说明该FILE没有更多extent了

 

AU的指针情况, 可以这样查看:

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=4| egrep "xptr.au|xptr.disk"|less

kfffde[0].xptr.au:                   36 ; 0x4a0: 0x00000024
kfffde[0].xptr.disk:                  1 ; 0x4a4: 0x0001
kfffde[1].xptr.au:                   45 ; 0x4a8: 0x0000002d
kfffde[1].xptr.disk:                  0 ; 0x4ac: 0x0000
kfffde[2].xptr.au:                   34 ; 0x4b0: 0x00000022
kfffde[2].xptr.disk:                  3 ; 0x4b4: 0x0003
kfffde[3].xptr.au:                   36 ; 0x4b8: 0x00000024
kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000
kfffde[4].xptr.au:                   43 ; 0x4c0: 0x0000002b
kfffde[4].xptr.disk:                  3 ; 0x4c4: 0x0003
kfffde[5].xptr.au:                   37 ; 0x4c8: 0x00000025
kfffde[5].xptr.disk:                  1 ; 0x4cc: 0x0001
kfffde[6].xptr.au:                   42 ; 0x4d0: 0x0000002a
kfffde[6].xptr.disk:                  2 ; 0x4d4: 0x0002
kfffde[7].xptr.au:                   40 ; 0x4d8: 0x00000028
kfffde[7].xptr.disk:                  1 ; 0x4dc: 0x0001
kfffde[8].xptr.au:                   39 ; 0x4e0: 0x00000027
kfffde[8].xptr.disk:                  3 ; 0x4e4: 0x0003
kfffde[9].xptr.au:                   40 ; 0x4e8: 0x00000028
kfffde[9].xptr.disk:                  3 ; 0x4ec: 0x0003
kfffde[10].xptr.au:                  41 ; 0x4f0: 0x00000029
kfffde[10].xptr.disk:                 1 ; 0x4f4: 0x0001
kfffde[11].xptr.au:                  40 ; 0x4f8: 0x00000028
kfffde[11].xptr.disk:                 0 ; 0x4fc: 0x0000
kfffde[12].xptr.au:                  42 ; 0x500: 0x0000002a
kfffde[12].xptr.disk:                 1 ; 0x504: 0x0001
kfffde[13].xptr.au:                  41 ; 0x508: 0x00000029
kfffde[13].xptr.disk:                 0 ; 0x50c: 0x0000
kfffde[14].xptr.au:                  43 ; 0x510: 0x0000002b
kfffde[14].xptr.disk:                 2 ; 0x514: 0x0002
kfffde[15].xptr.au:                  42 ; 0x518: 0x0000002a
kfffde[15].xptr.disk:                 0 ; 0x51c: 0x0000
kfffde[16].xptr.au:                  41 ; 0x520: 0x00000029
kfffde[16].xptr.disk:                 3 ; 0x524: 0x0003
kfffde[17].xptr.au:                  43 ; 0x528: 0x0000002b
kfffde[17].xptr.disk:                 1 ; 0x52c: 0x0001
kfffde[18].xptr.au:                  44 ; 0x530: 0x0000002c
kfffde[18].xptr.disk:                 2 ; 0x534: 0x0002
kfffde[19].xptr.au:                  43 ; 0x538: 0x0000002b
kfffde[19].xptr.disk:                 0 ; 0x53c: 0x0000
kfffde[20].xptr.au:                  44 ; 0x540: 0x0000002c
kfffde[20].xptr.disk:                 1 ; 0x544: 0x0001
kfffde[20].xptr.disk:                 1 ; 0x544: 0x0001
kfffde[21].xptr.au:                  42 ; 0x548: 0x0000002a
kfffde[21].xptr.disk:                 3 ; 0x54c: 0x0003
kfffde[22].xptr.au:                  45 ; 0x550: 0x0000002d
kfffde[22].xptr.disk:                 2 ; 0x554: 0x0002
kfffde[23].xptr.au:                  45 ; 0x558: 0x0000002d
kfffde[23].xptr.disk:                 1 ; 0x55c: 0x0001
kfffde[24].xptr.au:          4294967295 ; 0x560: 0xffffffff
kfffde[24].xptr.disk:             65535 ; 0x564: 0xffff
kfffde[25].xptr.au:          4294967295 ; 0x568: 0xffffffff
kfffde[25].xptr.disk:             65535 ; 0x56c: 0xffff
kfffde[26].xptr.au:          4294967295 ; 0x570: 0xffffffff
kfffde[26].xptr.disk:             65535 ; 0x574: 0xffff
kfffde[27].xptr.au:          4294967295 ; 0x578: 0xffffffff

可以这样验证一下

select disk_kffxp, AU_kffxp, xnum_kffxp
from x$kffxp
where group_kffxp = 3 -- Diskgroup 3 (GROUPB)
and number_kffxp =4
/

DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         1         36          0
         0         45          0
         3         34          0
         0         36          1
         3         43          1
         1         37          1
         2         42          2
         1         40          2
         3         39          2
         3         40          3
         1         41          3
         0         40          3
         1         42          4
         0         41          4
         2         43          4
         0         42          5
         3         41          5
         1         43          5
         2         44          6
         0         43          6
         1         44          6
         3         42          7
         2         45          7
         1         45          7

 

 

找出数据文件对应的目录记录directory entry:

SQL> select GROUP_NUMBER, FILE_NUMBER, NAME from v$asm_alias
  2  group by GROUP_NUMBER, FILE_NUMBER, NAME;

GROUP_NUMBER FILE_NUMBER NAME
------------ ----------- ----------------------------------------------------------------------
           3         253 REGISTRY.253.805993079
           3         256 users01.dbf
           3         256 users01.dbf.256.806828719
           3         257 system01.dbf
           3         257 system01.dbf.257.807460773
           3         258 sysaux01.dbf
           3         258 sysaux01.dbf.258.807460839
           3         259 example01.dbf
           3         259 example01.dbf.259.807460921
           3  4294967295 ASM
           3  4294967295 DATAFILE
           3  4294967295 ASMPARAMETERFILE

可以看到 system01.dbf 和 system01.dbf.257.807460773 是同一个file的2个alias

其文件号为 257, 257-256=1  则其file directory的记录位于AU=46的 第一个block

[grid@localhost ~]$ kfed read /dev/asm-diski  aun=46 blkn=1|less
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     257 ; 0x004: blk=257
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  3782876348 ; 0x00c: 0xe17a1cbc
kfbh.fcn.base:                     2055 ; 0x010: 0x00000807
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           807460773 ; 0x000: A=1 NUMM=0x18106fd2
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:               828383232 ; 0x010: 0x31602000
kfffdb.xtntcnt:                    2373 ; 0x014: 0x00000945
kfffdb.xtnteof:                    2373 ; 0x018: 0x00000945
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:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
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:                      63 ; 0x03c: 0x003f
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    160 ; 0x044: 0x000000a0
kfffdb.alias[1]:                      2 ; 0x048: 0x00000002
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               32983534 ; 0x050: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd
kfffdb.crets.lo:             2651955200 ; 0x054: USEC=0x0 MSEC=0x68 SECS=0x21 MINS=0x27
kfffdb.modts.hi:               32983534 ; 0x058: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                  365 ; 0x4a0: 0x0000016d
kfffde[0].xptr.disk:                  3 ; 0x4a4: 0x0003
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  69 ; 0x4a7: 0x45
kfffde[1].xptr.au:                  368 ; 0x4a8: 0x00000170
kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001
kfffde[1].xptr.flags:                 0 ; 0x4ae: L=0 E=0 D=0 S=0
kfffde[1].xptr.chk:                  90 ; 0x4af: 0x5a
kfffde[2].xptr.au:                  368 ; 0x4b0: 0x00000170
kfffde[2].xptr.disk:                  2 ; 0x4b4: 0x0002
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  89 ; 0x4b7: 0x59
kfffde[3].xptr.au:                  368 ; 0x4b8: 0x00000170
kfffde[3].xptr.disk:                  0 ; 0x4bc: 0x0000
kfffde[3].xptr.flags:                 0 ; 0x4be: L=0 E=0 D=0 S=0
kfffde[3].xptr.chk:                  91 ; 0x4bf: 0x5b
kfffde[4].xptr.au:                  366 ; 0x4c0: 0x0000016e
kfffde[4].xptr.disk:                  3 ; 0x4c4: 0x0003
kfffde[4].xptr.flags:                 0 ; 0x4c6: L=0 E=0 D=0 S=0
kfffde[4].xptr.chk:                  70 ; 0x4c7: 0x46
kfffde[5].xptr.au:                  369 ; 0x4c8: 0x00000171
kfffde[5].xptr.disk:                  1 ; 0x4cc: 0x0001
kfffde[5].xptr.flags:                 0 ; 0x4ce: L=0 E=0 D=0 S=0

kfffde[0].xptr.au:                  365 ; 0x4a0: 0x0000016d
kfffde[0].xptr.disk:                  3 ; 0x4a4: 0x0003
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  69 ; 0x4a7: 0x45
kfffde[1].xptr.au:                  368 ; 0x4a8: 0x00000170
kfffde[1].xptr.disk:                  1 ; 0x4ac: 0x0001

则该system01.dbf.257.807460773的前2个extent
指向 disk number=3 的aun=365 和 disknum=1 的aun=368

用X$KFFXP来验证一下

select disk_kffxp, AU_kffxp, xnum_kffxp
from x$kffxp
where group_kffxp=3    -- group number 
and number_kffxp=257   -- file number

DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         3        365          0 
         1        368          0 
.......................

 

 

 

 

Directly addressed extents

 

来看一个大于500MB 的ASM上的数据文件的情况,sysaux01.dbf.258.807460839的 file number=258 大小为780M

 

 

SQL> select bytes/1024/1024 ,file_number from v$asm_file;

BYTES/1024/1024 FILE_NUMBER
--------------- -----------
     .001464844         253
     426.257813         256
     790.007813         257
     780.007813         258
     341.257813         259

select disk_kffxp, AU_kffxp, xnum_kffxp
from x$kffxp
where group_kffxp=3
and number_kffxp=258;

DISK_KFFXP   AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
         0        963          0 
         1        962          0 
         2        962          0 
         2        963          1
         0        964          1
         3        958          1
         1        963          2
         3        959          2
         0        965          2
......................................
......................................
         0       1549        780
         1       1548        780
         2       1547        780
         0        978 2147483648
         3        973 2147483648
         1        977 2147483648

2346 rows selected.

 

 

共有2346个extent分配给该数据文件,来看一下该数据文件的directory entry

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski aun=46 blkn=2|less
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            4 ; 0x002: KFBTYP_FILEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                     258 ; 0x004: blk=258
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  1890402582 ; 0x00c: 0x70ad4116
kfbh.fcn.base:                     2882 ; 0x010: 0x00000b42
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfffdb.node.incarn:           807460839 ; 0x000: A=1 NUMM=0x18106ff3
kfffdb.node.frlist.number:   4294967295 ; 0x004: 0xffffffff
kfffdb.node.frlist.incarn:            0 ; 0x008: A=0 NUMM=0x0
kfffdb.hibytes:                       0 ; 0x00c: 0x00000000
kfffdb.lobytes:               817897472 ; 0x010: 0x30c02000
kfffdb.xtntcnt:                    2343 ; 0x014: 0x00000927
kfffdb.xtnteof:                    2343 ; 0x018: 0x00000927
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:                         19 ; 0x022: SCHE=0x1 NUMB=0x3
kfffdb.iXrs:                         19 ; 0x023: SCHE=0x1 NUMB=0x3
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:                      63 ; 0x03c: 0x003f
kfffdb.break:                        60 ; 0x03e: 0x003c
kfffdb.priZn:                         0 ; 0x040: KFDZN_COLD
kfffdb.secZn:                         0 ; 0x041: KFDZN_COLD
kfffdb.ub2spare:                      0 ; 0x042: 0x0000
kfffdb.alias[0]:                    161 ; 0x044: 0x000000a1
kfffdb.alias[1]:                      3 ; 0x048: 0x00000003
kfffdb.strpwdth:                      1 ; 0x04c: 0x01
kfffdb.strpsz:                       20 ; 0x04d: 0x14
kfffdb.usmsz:                         0 ; 0x04e: 0x0000
kfffdb.crets.hi:               32983534 ; 0x050: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd
kfffdb.crets.lo:             2724658176 ; 0x054: USEC=0x0 MSEC=0x1bf SECS=0x26 MINS=0x28
kfffdb.modts.hi:               32983534 ; 0x058: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd
kfffdb.modts.lo:                      0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0
kfffdb.dasz[0]:                       0 ; 0x060: 0x00
kfffdb.dasz[1]:                       0 ; 0x061: 0x00
kfffdb.dasz[2]:                       0 ; 0x062: 0x00
kfffdb.dasz[3]:                       0 ; 0x063: 0x00
kfffdb.permissn:                      0 ; 0x064: 0x00
kfffdb.ub1spar1:                      0 ; 0x065: 0x00
kfffdb.ub2spar2:                      0 ; 0x066: 0x0000
kfffdb.user.entnum:                   0 ; 0x068: 0x0000
kfffdb.user.entinc:                   0 ; 0x06a: 0x0000
kfffdb.group.entnum:                  0 ; 0x06c: 0x0000
kfffdb.group.entinc:                  0 ; 0x06e: 0x0000
kfffdb.spare[0]:                      0 ; 0x070: 0x00000000
kfffdb.spare[1]:                      0 ; 0x074: 0x00000000
kfffdb.spare[2]:                      0 ; 0x078: 0x00000000
kfffdb.spare[3]:                      0 ; 0x07c: 0x00000000
kfffdb.spare[4]:                      0 ; 0x080: 0x00000000
kfffdb.spare[5]:                      0 ; 0x084: 0x00000000
kfffdb.spare[6]:                      0 ; 0x088: 0x00000000
kfffdb.spare[7]:                      0 ; 0x08c: 0x00000000
kfffdb.spare[8]:                      0 ; 0x090: 0x00000000
kfffdb.spare[9]:                      0 ; 0x094: 0x00000000
kfffdb.spare[10]:                     0 ; 0x098: 0x00000000
kfffdb.spare[11]:                     0 ; 0x09c: 0x00000000
kfffdb.usm:                             ; 0x0a0: length=0
kfffde[0].xptr.au:                  963 ; 0x4a0: 0x000003c3

kfffdb.xtntblk:                      63 ; 0x03c: 0x003f  //63 extents described in this
kfffdb.break:                        60 ; 0x03e: 0x003c  // file directory block
kfffdb.alias[0]  ALIAS_INDEX

 

 

 

kfffdb.xtntblk=63 说明共有63个extent pointer指针,从kfffde[0].xptr.au到kfffde[59].xptr.au是60个直接盘区指针 direct extent pointer。

 

 

Indirectly addressed extents (kffixe structure)

 

kfffde[60].xptr.au指向剩下的文件目录信息, 这样查看。 kffixe 即是KFBTYP_INDIRECT 间接地址盘区Indirectly addressed extents块,与kfffde结构类似

 

 

[grid@localhost ~]$ kfed read /dev/asm-diski  aun=46 blkn=2|egrep "xptr.au|xptr.disk"

kfffde[60].xptr.au:                 978 ; 0x680: 0x000003d2
kfffde[60].xptr.disk:                 0 ; 0x684: 0x0000
kfffde[61].xptr.au:                 973 ; 0x688: 0x000003cd
kfffde[61].xptr.disk:                 3 ; 0x68c: 0x0003
kfffde[62].xptr.au:                 977 ; 0x690: 0x000003d1
kfffde[62].xptr.disk:                 1 ; 0x694: 0x0001

  1* select path,disk_number from v$asm_disk where group_number=3
SQL> /

PATH                 DISK_NUMBER
-------------------- -----------
/dev/asm-diskj                 3
/dev/asm-diski                 2
/dev/asm-diskh                 1
/dev/asm-diskg                 0

[grid@localhost ~]$ kfed read /dev/asm-diskg aun=978 blkn=0|less
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: blk=0 (indirect)
kfbh.block.obj:                     258 ; 0x008: file=258
kfbh.check:                  2166327859 ; 0x00c: 0x811f8a33
kfbh.fcn.base:                     2244 ; 0x010: 0x000008c4
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffixb.dxsn:                         20 ; 0x000: 0x00000014
kffixb.xtntblk:                     480 ; 0x004: 0x01e0
kffixb.dXrs:                         19 ; 0x006: SCHE=0x1 NUMB=0x3
kffixb.ub1spare:                      0 ; 0x007: 0x00
kffixb.ub4spare:                      0 ; 0x008: 0x00000000
kffixe[0].xptr.au:                  979 ; 0x00c: 0x000003d3
kffixe[0].xptr.disk:                  0 ; 0x010: 0x0000
kffixe[0].xptr.flags:                 0 ; 0x012: L=0 E=0 D=0 S=0
kffixe[0].xptr.chk:                 250 ; 0x013: 0xfa
kffixe[1].xptr.au:                  977 ; 0x014: 0x000003d1
kffixe[1].xptr.disk:                  2 ; 0x018: 0x0002
kffixe[1].xptr.flags:                 0 ; 0x01a: L=0 E=0 D=0 S=0
kffixe[1].xptr.chk:                 250 ; 0x01b: 0xfa
kffixe[2].xptr.au:                  974 ; 0x01c: 0x000003ce
kffixe[2].xptr.disk:                  3 ; 0x020: 0x0003

[grid@localhost ~]$ kfed read /dev/asm-diskj aun=973 blkn=0|less
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: blk=0 (indirect)
kfbh.block.obj:                     258 ; 0x008: file=258
kfbh.check:                  2166327859 ; 0x00c: 0x811f8a33
kfbh.fcn.base:                     2244 ; 0x010: 0x000008c4
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffixb.dxsn:                         20 ; 0x000: 0x00000014
kffixb.xtntblk:                     480 ; 0x004: 0x01e0
kffixb.dXrs:                         19 ; 0x006: SCHE=0x1 NUMB=0x3
kffixb.ub1spare:                      0 ; 0x007: 0x00
kffixb.ub4spare:                      0 ; 0x008: 0x00000000
kffixe[0].xptr.au:                  979 ; 0x00c: 0x000003d3
kffixe[0].xptr.disk:                  0 ; 0x010: 0x0000
kffixe[0].xptr.flags:                 0 ; 0x012: L=0 E=0 D=0 S=0
kffixe[0].xptr.chk:                 250 ; 0x013: 0xfa
kffixe[1].xptr.au:                  977 ; 0x014: 0x000003d1
kffixe[1].xptr.disk:                  2 ; 0x018: 0x0002
kffixe[1].xptr.flags:                 0 ; 0x01a: L=0 E=0 D=0 S=0
kffixe[1].xptr.chk:                 250 ; 0x01b: 0xfa
kffixe[2].xptr.au:                  974 ; 0x01c: 0x000003ce
kffixe[2].xptr.disk:                  3 ; 0x020: 0x0003
kffixe[2].xptr.flags:                 0 ; 0x022: L=0 E=0 D=0 S=0
kffixe[2].xptr.chk:                 228 ; 0x023: 0xe4
kffixe[3].xptr.au:                  978 ; 0x024: 0x000003d2
kffixe[3].xptr.disk:                  2 ; 0x028: 0x0002
kffixe[3].xptr.flags:                 0 ; 0x02a: L=0 E=0 D=0 S=0
kffixe[3].xptr.chk:                 249 ; 0x02b: 0xf9
kffixe[4].xptr.au:                  975 ; 0x02c: 0x000003cf
kffixe[4].xptr.disk:                  3 ; 0x030: 0x0003

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: blk=0 (indirect)
kfbh.block.obj:                     258 ; 0x008: file=258
kfbh.check:                  2166327859 ; 0x00c: 0x811f8a33
kfbh.fcn.base:                     2244 ; 0x010: 0x000008c4
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffixb.dxsn:                         20 ; 0x000: 0x00000014
kffixb.xtntblk:                     480 ; 0x004: 0x01e0
kffixb.dXrs:                         19 ; 0x006: SCHE=0x1 NUMB=0x3
kffixb.ub1spare:                      0 ; 0x007: 0x00
kffixb.ub4spare:                      0 ; 0x008: 0x00000000
kffixe[0].xptr.au:                  979 ; 0x00c: 0x000003d3
kffixe[0].xptr.disk:                  0 ; 0x010: 0x0000
kffixe[0].xptr.flags:                 0 ; 0x012: L=0 E=0 D=0 S=0
kffixe[0].xptr.chk:                 250 ; 0x013: 0xfa
kffixe[1].xptr.au:                  977 ; 0x014: 0x000003d1
kffixe[1].xptr.disk:                  2 ; 0x018: 0x0002
kffixe[1].xptr.flags:                 0 ; 0x01a: L=0 E=0 D=0 S=0
kffixe[1].xptr.chk:                 250 ; 0x01b: 0xfa
kffixe[2].xptr.au:                  974 ; 0x01c: 0x000003ce
kffixe[2].xptr.disk:                  3 ; 0x020: 0x0003
kffixe[2].xptr.flags:                 0 ; 0x022: L=0 E=0 D=0 S=0
kffixe[2].xptr.chk:                 228 ; 0x023: 0xe4
kffixe[3].xptr.au:                  978 ; 0x024: 0x000003d2
kffixe[3].xptr.disk:                  2 ; 0x028: 0x0002
kffixe[3].xptr.flags:                 0 ; 0x02a: L=0 E=0 D=0 S=0
kffixe[3].xptr.chk:                 249 ; 0x02b: 0xf9
kffixe[4].xptr.au:                  975 ; 0x02c: 0x000003cf
kffixe[4].xptr.disk:                  3 ; 0x030: 0x0003

 

 

知识总结

 

  • asm disk的前50个AU(50MB)是为asm metadata保留的
  • ASM 的前255个file number是为metadata file保留的,文件号从1开始, file numner=1的1号文件为ASM的file directory
  • 普通的ASM File的file number从256开始
  • ASM disk的第二个AU即是file number=1的file directory (非必然),在1MB AU和4096 bytes block的情况下可以存放255个file directory information,其block type为KFBTYP_FILEDIR
  • 普通ASM FILE的directory entry的位置,可以这样计算 File number=1的 第 (file number- 256)/256 +2  个extent,blkn=mod(file number-256),256) ,例如文件号 258  =》 第二个extent的blkn=2。
  • KFBTYP_FILEDIR中从kfffde[0].xptr.au到kfffde[59].xptr.au是直接盘区指针 directly extent pointers, kfffde[60].xptr.au以上是KFBTYP_INDIRECT(kffixe)间接盘区指针Indirectly extents pointers。

 

 Indirect Extents

 

由于FILE number 1 中可以存放的extent 指针是有限的,所以对于超过60个extent的文件使用Indirect Extents存放指针。如果需要使用indirect extents,则之后的extent map 记录都记录的是指向indirect extent的指针。

大多数文件仅仅需要一个Indirect Extent,除非文件确实很大。  只能有一级indirection extent,不会有多级。indirect extent中的指针只指向data extent ,不会再指向别的indirect extent 。

 

 

沪ICP备14014813号-2

沪公网安备 31010802001379号