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:包含脏数据记录区域信息的文件,恢复镜像数据时会用到此文件。