Oracle ASM Volume Directory

Volume Directory
从oracle 11gR2开始,引入了ACFS,其中11gR2同时又引入了ASM Dynamic Volume Manager (ADVM)去支持ACFS。在11.2的asm中,不仅仅用于存储database files,还能存储一些非结构化的数据,例如clusterware 文件、以及一些通常的二进制文件、external files和text files。逻辑卷目录的ASM文件号为7,它用于跟踪与ADVM有关的文件。ASM动态逻辑卷设备是由ASM动态逻辑卷构建的。一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备。ASM集群文件系统通过ADVM接口构建在ASM磁盘组之上。ADVM像数据库一样,也是ASM的一个客户端。当一个逻辑卷被访问时,相应的ASM文件会被打开并且ASM extent的信息会被发送到ADVM驱动。有两种与ADVM逻辑卷相关的文件类型:
.ASMVOL:逻辑卷文件,作为逻辑卷存储的容器。
.ASMVDRL:包含脏数据记录区域信息的文件;重新同步镜像数据时会用到此文件。

在未创建ADVM之前,直接查询是看不到file 7的

SQL> select number_kffxp file#, disk_kffxp disk#, count(disk_kffxp) extents
  2  from x$kffxp
  3  where group_kffxp=3
  4   and disk_kffxp <> 65534
  5   and number_kffxp=7
  6  group by number_kffxp, disk_kffxp
  7  order by 1;

no rows selected

SQL> select x.xnum_kffxp "virtual extent",pxn_kffxp "physical extent",x.au_kffxp "au",x.disk_kffxp "disk #",d.name "disk name"
  2  from x$kffxp x, v$asm_disk_stat d
  3  where x.group_kffxp=d.group_number
  4  and x.disk_kffxp=d.disk_number
  5  and x.group_kffxp=3
  6  and x.number_kffxp=7
  7  order by 1,2,3;

no rows selected

创建ADVM

为ADVM创建一个单独的磁盘组并不是必须的,但这样做确实是有意义的,通过这种方式,可以把数据库文件与ACFS文件隔离开。要创建逻辑卷,首先需要有一个磁盘组,下面创建了一个名称为acfs的磁盘组。为了能在磁盘组中创建逻辑卷,磁盘组的COMPATIBLE.ASM与COMPATIBLE.ADVM必须设置为11.2或以上,同时ADVM/ACFS驱动要被加载(在集群环境中,已经默认加载,而在单实例环境中,需要手动加载)。

单实例加载ADVM/ACFS驱动的命令如下,RAC环境不需要,因为已经默认加载

[root@jyrac1 bin]# ./acfsroot install
ACFS-9300: ADVM/ACFS distribution files found.
ACFS-9118: oracleadvm.ko driver in use - cannot unload.
ACFS-9312: Existing ADVM/ACFS installation detected.
ACFS-9118: oracleadvm.ko driver in use - cannot unload.
ACFS-9314: Removing previous ADVM/ACFS installation.
ACFS-9315: Previous ADVM/ACFS components successfully removed.
ACFS-9307: Installing requested ADVM/ACFS software.
ACFS-9308: Loading installed ADVM/ACFS drivers.
ACFS-9321: Creating udev for ADVM/ACFS.
ACFS-9323: Creating module dependencies - this may take some time.
ACFS-9154: Loading 'oracleacfs.ko' driver.
ACFS-9327: Verifying ADVM/ACFS devices.
ACFS-9156: Detecting control device '/dev/asm/.asm_ctl_spec'.
ACFS-9156: Detecting control device '/dev/ofsctl'.
ACFS-9309: ADVM/ACFS installation correctness verified.
[root@jyrac1 bin]#  ./acfsload  start
ACFS-9391: Checking for existing ADVM/ACFS installation.
ACFS-9392: Validating ADVM/ACFS installation files for operating system.
ACFS-9393: Verifying ASM Administrator setup.
ACFS-9308: Loading installed ADVM/ACFS drivers.
ACFS-9327: Verifying ADVM/ACFS devices.
ACFS-9156: Detecting control device '/dev/asm/.asm_ctl_spec'.
ACFS-9156: Detecting control device '/dev/ofsctl'.
ACFS-9322: completed
[root@jyrac1 bin]# ./acfsdriverstate version
ACFS-9325:     Driver OS kernel version = 2.6.18-8.el5(x86_64).
ACFS-9326:     Driver Oracle version = 130707.


SQL> create diskgroup acfs disk '/dev/raw/raw5','/dev/raw/raw6' attribute 'COMPATIBLE.ASM' = '11.2', 'COMPATIBLE.ADVM' = '11.2'; 

Diskgroup created.

创建advm卷组

SQL> select
  2     nvl(a.name, '[candidate]')                       disk_group_name
  3   , b.path                                           disk_file_path
  4   , b.name                                           disk_file_name
  5   , b.failgroup                                      disk_file_fail_group
  6   , b.total_mb                                       total_mb
  7   , (b.total_mb - b.free_mb)                         used_mb
  8  -- , round((1- (b.free_mb / b.total_mb))*100, 2)      pct_used
  9  from
 10      v$asm_diskgroup a,v$asm_disk b  where a.group_number(+)=b.group_number
 11  order by  1,3,2,4  ;

disk group name      path              file name            fail group           file size (mb) used size (mb)
-------------------- ----------------- -------------------- -------------------- -------------- --------------
ACFS                 /dev/raw/raw5     ACFS_0000            ACFS_0000                     5,120             53
ACFS                 /dev/raw/raw6     ACFS_0001            ACFS_0001                     5,120             53
ARCHDG               /dev/raw/raw2     ARCHDG_0000          ARCHDG_0000                   5,120          3,447
ARCHDG               /dev/raw/raw9     ARCHDG_0001          ARCHDG_0001                   5,120          3,447
CRSDG                /dev/raw/raw1     CRSDG_0000           CRSDG_0000                    5,120            215
CRSDG                /dev/raw/raw8     CRSDG_0001           CRSDG_0001                    5,120            183
DATADG               /dev/raw/raw10    DATADG_0000          DATADG_0000                   5,120          1,673
DATADG               /dev/raw/raw11    DATADG_0001          DATADG_0001                   5,120          1,670
DATADG               /dev/raw/raw3     DATADG_0002          DATADG_0002                   5,120          1,666
DATADG               /dev/raw/raw4     DATADG_0003          DATADG_0003                   5,120          1,666
[candidate]          /dev/raw/raw12                                                           0              0
[candidate]          /dev/raw/raw13                                                           0              0
[candidate]          /dev/raw/raw14                                                           0              0
[candidate]          /dev/raw/raw7                                                            0              0

14 rows selected.

上面的查询显示ACFS磁盘中可用空间还有大约5G,那么在磁盘组ACFS中有足够的空间来创建2个2G大小的建逻辑卷

[grid@jyrac1 ~]$ asmcmd volcreate -G ACFS -s 2G ACFS_VOL1
[grid@jyrac1 ~]$ asmcmd volcreate -G ACFS -s 2G ACFS_VOL2
[grid@jyrac1 ~]$ asmcmd volinfo -a
Diskgroup Name: ACFS

         Volume Name: ACFS_VOL1
         Volume Device: /dev/asm/acfs_vol1-319
         State: ENABLED
         Size (MB): 2048
         Resize Unit (MB): 32
         Redundancy: MIRROR
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: 
         Mountpath: 

         Volume Name: ACFS_VOL2
         Volume Device: /dev/asm/acfs_vol2-319
         State: ENABLED
         Size (MB): 2048
         Resize Unit (MB): 32
         Redundancy: MIRROR
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: 
         Mountpath: 

从上面,大家可以看到,默认创建advm是必须镜像的,且其分配单元是32m,条带宽度是128k。创建完advm之后,我们再次查询试图,看能否看到asm file 7

SQL> select number_kffxp file#, disk_kffxp disk#, count(disk_kffxp) extents
  2  from x$kffxp
  3  where group_kffxp=4
  4  and disk_kffxp <> 65534
  5  and number_kffxp=7
  6  group by number_kffxp, disk_kffxp
  7  order by 1;

     FILE#      DISK#    EXTENTS
---------- ---------- ----------
         7          0          1
         7          1          1

从查询结果可以看到在磁盘组ACFS创建ADVM之后可以查询到7号文件。

到现在,还没有相应的挂载目录与逻辑卷相关联,所以还不能使用它们。这时,我们可以先看看ADVM逻辑卷元信息,我们先从逻辑卷目录获取其所在的分配单元

SQL> select x.xnum_kffxp "virtual extent",pxn_kffxp "physical extent",x.au_kffxp "au",x.disk_kffxp "disk #",d.name "disk name",d.path "disk path"
  2  from x$kffxp x, v$asm_disk_stat d
  3  where x.group_kffxp=d.group_number
  4  and x.disk_kffxp=d.disk_number
  5  and x.group_kffxp=4
  6  and x.number_kffxp=7
  7  order by 1,2,3;

virtual extent physical extent         au     disk # disk name                      disk path
-------------- --------------- ---------- ---------- ------------------------------ ----------------------------------------
             0               0         53          0 ACFS_0000                      /dev/raw/raw5
             0               1         53          1 ACFS_0001                      /dev/raw/raw6

上面的结果显示有一个虚拟区,并且它有两个物理区,说明7号文件Volume Directory存在镜像,逻辑卷目录分布在0号磁盘(/dev/raw/raw5)的53号AU,与1号磁盘(/dev/raw/raw6)的53号AU中。

通过kfed来获取逻辑卷目录的AU分布情况
由于1号文件总是开始在0号磁盘2号AU,记住这个位置:0号盘2号AU。这是ASM中定位文件的起点,它的作用,有点相当于磁盘上的引导区,在电脑开机后负责将OS启动起来。1号文件在最少情况下,至少有两个AU。在1号文件中,每个文件占用一个元数据块,存放自身的空间分布信息。每个元数据块大小是4K,一个AU是1M,哪么,每个AU中,可以存储256个文件的空间分布信息。这其中,0号盘2号AU中,全是元文件的信息。再具体一点,0号盘2号AU,第一个元数据块被系统占用,从第二个块开始,到255为止,共255个元数据块,对应索引号1至255的文件。其实,也就是全部的元文件了。也就是说0号盘2号AU,保存了全部元文件的空间分布信息。1号文件的第二个AU,从第一个块开始,保存256号文件。第二个块对应257号文件,等等。每次从ASM中读数据时,Oracle都要先读到1号文件,从中找出要读的目标文件在磁盘上的分布位置,然后再去读取相应的文件的数据。由于逻辑卷目录是7号文件,所以要读取0号磁盘(/dev/raw/raw11)的2号AU的7号块

[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=2 blkn=7 | 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:                       7 ; 0x004: blk=7
kfbh.block.obj:                       1 ; 0x008: file=1
kfbh.check:                  3972298863 ; 0x00c: 0xecc4786f
kfbh.fcn.base:                     6805 ; 0x010: 0x00001a95
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:                 1048576 ; 0x010: 0x00100000
kfffdb.xtntcnt:                       3 ; 0x014: 0x00000003
kfffdb.xtnteof:                       3 ; 0x018: 0x00000003
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:                       3 ; 0x03c: 0x0003
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:               33043401 ; 0x050: HOUR=0x9 DAYS=0x1e MNTH=0xc YEAR=0x7e0
kfffdb.crets.lo:             1933631488 ; 0x054: USEC=0x0 MSEC=0x38 SECS=0x34 MINS=0x1c
kfffdb.modts.hi:               33043401 ; 0x058: HOUR=0x9 DAYS=0x1e MNTH=0xc YEAR=0x7e0
kfffdb.modts.lo:             1933631488 ; 0x05c: USEC=0x0 MSEC=0x38 SECS=0x34 MINS=0x1c
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:                   53 ; 0x4a0: 0x00000035
kfffde[0].xptr.disk:                  0 ; 0x4a4: 0x0000
kfffde[0].xptr.flags:                 0 ; 0x4a6: L=0 E=0 D=0 S=0
kfffde[0].xptr.chk:                  31 ; 0x4a7: 0x1f
kfffde[1].xptr.au:                   53 ; 0x4a8: 0x00000035
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:                  30 ; 0x4af: 0x1e
kfffde[2].xptr.au:           4294967294 ; 0x4b0: 0xfffffffe
kfffde[2].xptr.disk:              65534 ; 0x4b4: 0xfffe
kfffde[2].xptr.flags:                 0 ; 0x4b6: L=0 E=0 D=0 S=0
kfffde[2].xptr.chk:                  42 ; 0x4b7: 0x2a

从kfffde[0].xptr.au=53,kfffde[0].xptr.disk=0与kfffde[1].xptr.au=53,kfffde[1].xptr.disk=1可以确定逻辑卷目录分布在0号磁盘(/dev/raw/raw5)的53号AU与1号磁盘(/dev/raw/raw6)的53号AU中,与上面SQL语句所查询的分布情况完全一致。

在逻辑卷设备上创建ASM集群文件系统(ACFS)

[root@jyrac1 bin]# /sbin/mkfs -t acfs /dev/asm/acfs_vol1-319
mkfs.acfs: version                   = 11.2.0.4.0
mkfs.acfs: on-disk version           = 39.0
mkfs.acfs: volume                    = /dev/asm/acfs_vol1-319
mkfs.acfs: volume size               = 2147483648
mkfs.acfs: Format complete.
[root@jyrac1 bin]# /sbin/mkfs -t acfs /dev/asm/acfs_vol2-319
mkfs.acfs: version                   = 11.2.0.4.0
mkfs.acfs: on-disk version           = 39.0
mkfs.acfs: volume                    = /dev/asm/acfs_vol2-319
mkfs.acfs: volume size               = 2147483648
mkfs.acfs: Format complete.


[root@jyrac1 bin]# mkdir /acfs1
[root@jyrac1 bin]# mkdir /acfs2

[root@jyrac1 bin]# chown -R grid:oinstall /acfs1
[root@jyrac1 bin]# chown -R grid:oinstall /acfs2

[root@jyrac1 bin]# mount -t acfs /dev/asm/acfs_vol1-319 /acfs1
[root@jyrac1 bin]# mount -t acfs /dev/asm/acfs_vol2-319 /acfs2
[root@jyrac1 bin]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/asm/acfs_vol1-319 on /acfs1 type acfs (rw)
/dev/asm/acfs_vol2-319 on /acfs2 type acfs (rw)


[grid@jyrac1 ~]$ asmcmd volinfo -G ACFS ACFS_VOL1
Diskgroup Name: ACFS

         Volume Name: ACFS_VOL1
         Volume Device: /dev/asm/acfs_vol1-319
         State: ENABLED
         Size (MB): 2048
         Resize Unit (MB): 32
         Redundancy: MIRROR
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: ACFS
         Mountpath: /acfs1 

[grid@jyrac1 ~]$ asmcmd volinfo -G ACFS ACFS_VOL2
Diskgroup Name: ACFS

         Volume Name: ACFS_VOL2
         Volume Device: /dev/asm/acfs_vol2-319
         State: ENABLED
         Size (MB): 2048
         Resize Unit (MB): 32
         Redundancy: MIRROR
         Stripe Columns: 4
         Stripe Width (K): 128
         Usage: ACFS
         Mountpath: /acfs2 


[root@jyrac1 bin]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              35G   25G  8.4G  75% /
tmpfs                 3.9G  170M  3.8G   5% /dev/shm
/dev/asm/acfs_vol1-319
                      2.0G   43M  2.0G   3% /acfs1
/dev/asm/acfs_vol2-319
                      2.0G   43M  2.0G   3% /acfs2

使用kfed工具查看ADVM真实的元数据

[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=53 blkn=0 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           22 ; 0x002: KFBTYP_VOLUMEDIR
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:                       7 ; 0x008: file=7
kfbh.check:                  1546379724 ; 0x00c: 0x5c2be1cc
kfbh.fcn.base:                     7356 ; 0x010: 0x00001cbc
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0
kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number:                 1 ; 0x00c: 0x00000001
kffdnd.overfl.incarn:                 1 ; 0x010: A=1 NUMM=0x0
kffdnd.parent.number:                 0 ; 0x014: 0x00000000
kffdnd.parent.incarn:                 1 ; 0x018: A=1 NUMM=0x0
kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000
kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
kfvvde.entry.incarn:                  1 ; 0x024: A=1 NUMM=0x0
kfvvde.entry.hash:                    0 ; 0x028: 0x00000000
kfvvde.entry.refer.number:   4294967295 ; 0x02c: 0xffffffff
kfvvde.entry.refer.incarn:            0 ; 0x030: A=0 NUMM=0x0
kfvvde.volnm:           ++AVD_DG_NUMBER ; 0x034: length=15
kfvvde.usage:                           ; 0x054: length=0
kfvvde.dgname:                          ; 0x074: length=0
kfvvde.clname:                          ; 0x094: length=0
kfvvde.mountpath:                       ; 0x0b4: length=0
kfvvde.drlinit:                       0 ; 0x4b5: 0x00
kfvvde.pad1:                          0 ; 0x4b6: 0x0000
kfvvde.volfnum.number:                0 ; 0x4b8: 0x00000000
kfvvde.volfnum.incarn:                0 ; 0x4bc: 0x00000000
kfvvde.drlfnum.number:                0 ; 0x4c0: 0x00000000
kfvvde.drlfnum.incarn:                0 ; 0x4c4: 0x00000000
kfvvde.volnum:                        0 ; 0x4c8: 0x0000
kfvvde.avddgnum:                    319 ; 0x4ca: 0x013f
kfvvde.extentsz:                      0 ; 0x4cc: 0x00000000
kfvvde.volstate:                      4 ; 0x4d0: D=0 C=0 R=1
kfvvde.pad[0]:                        0 ; 0x4d1: 0x00
kfvvde.pad[1]:                        0 ; 0x4d2: 0x00
kfvvde.pad[2]:                        0 ; 0x4d3: 0x00
kfvvde.pad[3]:                        0 ; 0x4d4: 0x00
kfvvde.pad[4]:                        0 ; 0x4d5: 0x00

上面的输出信息显示了53号AU的block 0.它只包含了ADVM逻辑卷的标记(++AVD_DG_NUMBER),而真正的逻辑卷的信息其实位于1号块与之后的块中

[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=53 blkn=1 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           22 ; 0x002: KFBTYP_VOLUMEDIR --指数据类型
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       1 ; 0x004: blk=1 --该数据所在的au block号
kfbh.block.obj:                       7 ; 0x008: file=7 --指该元数据的asm file number,advm是file 7,所以这里看到的是7
kfbh.check:                  3589956819 ; 0x00c: 0xd5fa64d3
kfbh.fcn.base:                     7697 ; 0x010: 0x00001e11
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0 --分配信息,包括block的分支号和指向next freelist block的指针
kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number:                 2 ; 0x00c: 0x00000002 --overfl,表示指向同层级的下一个block
kffdnd.overfl.incarn:                 1 ; 0x010: A=1 NUMM=0x0
kffdnd.parent.number:        4294967295 ; 0x014: 0xffffffff
kffdnd.parent.incarn:                 0 ; 0x018: A=0 NUMM=0x0
kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000 --表示指向上一层的block
kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
kfvvde.entry.incarn:                  1 ; 0x024: A=1 NUMM=0x0
kfvvde.entry.hash:                    0 ; 0x028: 0x00000000
kfvvde.entry.refer.number:   4294967295 ; 0x02c: 0xffffffff
kfvvde.entry.refer.incarn:            0 ; 0x030: A=0 NUMM=0x0
kfvvde.volnm:                 ACFS_VOL1 ; 0x034: length=9 --表示asm advm 卷名称
kfvvde.usage:                      ACFS ; 0x054: length=4 --advm的type类型,这里是使用的acfs
kfvvde.dgname:                          ; 0x074: length=0
kfvvde.clname:                          ; 0x094: length=0
kfvvde.mountpath:                /acfs1 ; 0x0b4: length=6 --这里表示acfs mount的路径
kfvvde.drlinit:                       1 ; 0x4b5: 0x01
kfvvde.pad1:                          0 ; 0x4b6: 0x0000
kfvvde.volfnum.number:              257 ; 0x4b8: 0x00000101 --这里表示volume file number.
kfvvde.volfnum.incarn:        931944533 ; 0x4bc: 0x378c5855
kfvvde.drlfnum.number:              256 ; 0x4c0: 0x00000100 --这里表示volume dirty region logging 信息对应的file number
kfvvde.drlfnum.incarn:        931944533 ; 0x4c4: 0x378c5855
kfvvde.volnum:                        1 ; 0x4c8: 0x0001 --这里表示对应的卷组number号,从1开始
kfvvde.avddgnum:                    319 ; 0x4ca: 0x013f
kfvvde.extentsz:                      8 ; 0x4cc: 0x00000008 --这里表示advm的extent大小,有点类似database中的extent概念。这里stripe是4,而其分配unit是32m,所以这里是64.
kfvvde.volstate:                      2 ; 0x4d0: D=0 C=1 R=0 --这里表示advm卷组状态。2应该是表示可用
kfvvde.pad[0]:                        0 ; 0x4d1: 0x00
kfvvde.pad[1]:                        0 ; 0x4d2: 0x00
kfvvde.pad[2]:                        0 ; 0x4d3: 0x00
kfvvde.pad[3]:                        0 ; 0x4d4: 0x00
kfvvde.pad[4]:                        0 ; 0x4d5: 0x00

ASM元信息7号文件block 1包含的是第一个逻辑卷的信息(kfvvde.volnm: ACFS_VOL1),并且有两个文件关联到这个逻辑卷:
.DRL脏数据记录区域文件(kfvvde.drlfnum.number: 256)
.逻辑卷文件(kfvvde.volfnum.number: 257)

[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=53 blkn=2 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                           22 ; 0x002: KFBTYP_VOLUMEDIR --指数据类型
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       2 ; 0x004: blk=2 --该数据所在的au block号
kfbh.block.obj:                       7 ; 0x008: file=7 --指该元数据的asm file number,advm是file 7,所以这里看到的是7
kfbh.check:                   705009710 ; 0x00c: 0x2a05982e
kfbh.fcn.base:                     7699 ; 0x010: 0x00001e13
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kffdnd.bnode.incarn:                  1 ; 0x000: A=1 NUMM=0x0 --分配信息,包括block的分支号和指向next freelist block的指针
kffdnd.bnode.frlist.number:  4294967295 ; 0x004: 0xffffffff
kffdnd.bnode.frlist.incarn:           0 ; 0x008: A=0 NUMM=0x0
kffdnd.overfl.number:        4294967295 ; 0x00c: 0xffffffff --overfl,表示指向同层级的下一个block
kffdnd.overfl.incarn:                 0 ; 0x010: A=0 NUMM=0x0
kffdnd.parent.number:        4294967295 ; 0x014: 0xffffffff
kffdnd.parent.incarn:                 0 ; 0x018: A=0 NUMM=0x0
kffdnd.fstblk.number:                 0 ; 0x01c: 0x00000000 --表示指向上一层的block
kffdnd.fstblk.incarn:                 1 ; 0x020: A=1 NUMM=0x0
kfvvde.entry.incarn:                  1 ; 0x024: A=1 NUMM=0x0
kfvvde.entry.hash:                    0 ; 0x028: 0x00000000
kfvvde.entry.refer.number:   4294967295 ; 0x02c: 0xffffffff
kfvvde.entry.refer.incarn:            0 ; 0x030: A=0 NUMM=0x0
kfvvde.volnm:                 ACFS_VOL2 ; 0x034: length=9 --表示asm advm 卷名称
kfvvde.usage:                      ACFS ; 0x054: length=4 --advm的type类型,这里是使用的acfs
kfvvde.dgname:                          ; 0x074: length=0
kfvvde.clname:                          ; 0x094: length=0
kfvvde.mountpath:                /acfs2 ; 0x0b4: length=6 --这里表示acfs mount的路径
kfvvde.drlinit:                       1 ; 0x4b5: 0x01
kfvvde.pad1:                          0 ; 0x4b6: 0x0000
kfvvde.volfnum.number:              259 ; 0x4b8: 0x00000103 --这里表示volume file number.
kfvvde.volfnum.incarn:        931944539 ; 0x4bc: 0x378c585b
kfvvde.drlfnum.number:              258 ; 0x4c0: 0x00000102 --这里表示volume dirty region logging 信息对应的file number
kfvvde.drlfnum.incarn:        931944539 ; 0x4c4: 0x378c585b
kfvvde.volnum:                        2 ; 0x4c8: 0x0002 --这里表示对应的卷组number号,从1开始
kfvvde.avddgnum:                    319 ; 0x4ca: 0x013f
kfvvde.extentsz:                      8 ; 0x4cc: 0x00000008 --这里表示advm的extent大小,有点类似database中的extent概念。这里stripe是4,而其分配unit是32m,所以这里是64.
kfvvde.volstate:                      2 ; 0x4d0: D=0 C=1 R=0 --这里表示advm卷组状态。2应该是表示可用
kfvvde.pad[0]:                        0 ; 0x4d1: 0x00
kfvvde.pad[1]:                        0 ; 0x4d2: 0x00
kfvvde.pad[2]:                        0 ; 0x4d3: 0x00
kfvvde.pad[3]:                        0 ; 0x4d4: 0x00
kfvvde.pad[4]:                        0 ; 0x4d5: 0x00

ASM元信息7号文件block 2包含的是第二个逻辑卷的信息(kfvvde.volnm: ACFS_VOL2),并且有两个文件关联到这个逻辑卷:
.DRL脏数据记录区域文件(kfvvde.drlfnum.number: 258)
.逻辑卷文件(kfvvde.volfnum.number: 259)

小结:
一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备。ASM集群文件系统通过ADVM接口构建于ASM磁盘组之上。ADVM跟数据库一样,也是ASM的一个客户端。有两种与ADVM逻辑卷相关的文件类型:
.ASMVOL:逻辑卷文件,作为逻辑卷存储设备的容器
.ASMVDRL:包含脏数据记录区域信息的文件,恢复镜像数据时会用到此文件。

发表评论

电子邮件地址不会被公开。