ASM 翻译系列第二十弹:ASM Internal ASM file number 7

更新时间:2016-08-26 10:40:12 点击次数:2054次

ASM元信息7号文件,是ASM的逻辑卷目录,用于跟踪与ADVM有关的文件。

ASM动态逻辑卷设备是由ASM动态逻辑卷构建的。一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备。ASM集群文件系统通过ADVM接口构建在ASM磁盘组之上。ADVM像数据库一样,也是ASM的一个客户端。当一个逻辑卷被访问时,相应的ASM文件会被打开并且ASM extent的信息会被发送到ADVM驱动。

有两种与ADVM逻辑卷相关的文件类型:

Turn up the ADVM volume

为ADVM创建一个单独的磁盘组并不是必须的,但这样做确实是有意义的,通过这种方式,可以把数据库文件与ACFS文件隔离开。看几个例子。

SQL> create diskgroup ACFS
disk 'ORCL:ASMDISK5', 'ORCL:ASMDISK6' attribute 'COMPATIBLE.ASM' = '11.2', 'COMPATIBLE.ADVM' = '11.2';
Diskgroup created.

要创建逻辑卷,首先需要有一个磁盘组,上面创建了一个名称为acfs的磁盘组。为了能在磁盘组中创建逻辑卷,磁盘组的COMPATIBLE.ASM与COMPATIBLE.ADVM必须设置为11.2或以上,同时ADVM/ACFS驱动要被加载(在集群环境中,已经默认加载,而在单实例环境中,需要手动加载)。

做到以上要求后,就可以在磁盘组中创建逻辑卷了。

$ asmcmd volcreate -G ACFS -s 2G ACFS_VOL1

$ asmcmd volcreate -G ACFS -s 2G ACFS_VOL2

$ asmcmd volinfo -a Diskgroup Name: ACFS

 Volume Name: ACFS_VOL1
 Volume Device: /dev/asm/acfs_vol1-159 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-159 State: ENABLED
 Size (MB): 2048 Resize Unit (MB): 32 Redundancy: MIRROR
 Stripe Columns: 4 Stripe Width (K): 128 Usage:
 Mountpath:

$

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

SQL> SELECT x.xnum_kffxp "Extent", x.au_kffxp "AU", x.disk_kffxp "Disk #",
 d.name "Disk name" FROM x$kffxp x, v$asm_disk_stat d
WHERE x.group_kffxp=d.group_number and x.disk_kffxp=d.disk_number and x.group_kffxp=2 and x.number_kffxp=7 ORDER BY 1, 2; Extent         AU     Disk # Disk name ---------- ---------- ---------- ------------------------------ 0 53 1 ASMDISK6 0 53 0 ASMDISK5

接下来,使用kfed工具查看真实的元信息。

$ kfed read /dev/oracleasm/disks/ASMDISK5 aun=53 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 22 ; 0x002: KFBTYP_VOLUMEDIR
... 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: 159 ; 0x4ca: 0x009f kfvvde.extentsz: 0 ; 0x4cc: 0x00000000 kfvvde.volstate: 4 ; 0x4d0: D=0 C=0 R=1 ...

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

$ kfed read /dev/oracleasm/disks/ASMDISK5 aun=53 blkn=1 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 22 ; 0x002: KFBTYP_VOLUMEDIR
... 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 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: 257 ; 0x4b8: 0x00000101 kfvvde.volfnum.incarn: 771971291 ; 0x4bc: 0x2e0358db kfvvde.drlfnum.number: 256 ; 0x4c0: 0x00000100 kfvvde.drlfnum.incarn: 771971289 ; 0x4c4: 0x2e0358d9 kfvvde.volnum: 1 ; 0x4c8: 0x0001 kfvvde.avddgnum: 159 ; 0x4ca: 0x009f kfvvde.extentsz: 8 ; 0x4cc: 0x00000008 kfvvde.volstate: 2 ; 0x4d0: D=0 C=1 R=0 ...

$ kfed read /dev/oracleasm/disks/ASMDISK5 aun=53 blkn=2 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 22 ; 0x002: KFBTYP_VOLUMEDIR
... 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 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: 259 ; 0x4b8: 0x00000103 kfvvde.volfnum.incarn: 771971303 ; 0x4bc: 0x2e0358e7 kfvvde.drlfnum.number: 258 ; 0x4c0: 0x00000102 kfvvde.drlfnum.incarn: 771971301 ; 0x4c4: 0x2e0358e5 kfvvde.volnum: 2 ; 0x4c8: 0x0002 kfvvde.avddgnum: 159 ; 0x4ca: 0x009f kfvvde.extentsz: 8 ; 0x4cc: 0x00000008 kfvvde.volstate: 2 ; 0x4d0: D=0 C=1 R=0 ...

ASM元信息7号文件block 1包含的是个逻辑卷的信息(kfvvde.volnm: ACFS_VOL1),并且有两个文件关联到这个逻辑卷。

block 2包含第二个逻辑卷的信息(kfvvde.volnm: ACFS_VOL2),并且有两个文件关联到这个逻辑卷。

这些都是特殊文件,所以不会显示在asmcmd ls命令的输出和v$asm_alias视图中。但是,你可以到v$asm_file中找到他们。

SQL> SELECT file_number "File #", bytes/1024/1024 "Size (MB)", type FROM v$asm_file
WHERE group_number=2; File #  Size (MB) TYPE ---------- ---------- ---------- 256 17 ASMVDRL 257 2048 ASMVOL 258 17 ASMVDRL 259 2048 ASMVOL

Create ASM cluster file system

这时,可以在逻辑卷设备上创建ASM集群文件系统(ACFS)。

# /sbin/mkfs -t acfs /dev/asm/acfs_vol1-159 mkfs.acfs: version                   = 11.2.0.3.0 mkfs.acfs: on-disk version           = 39.0 mkfs.acfs: volume                    = /dev/asm/acfs_vol1-159 mkfs.acfs: volume size               = 2147483648 mkfs.acfs: Format complete. # mkdir /acfs1 # mount -t acfs /dev/asm/acfs_vol1-159 /acfs1 # mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) ... oracleasmfs on /dev/oracleasm type oracleasmfs (rw)
/dev/asm/acfs_vol1-159 on /acfs1 type acfs (rw)

$ asmcmd volinfo -G ACFS ACFS_VOL1
Diskgroup Name: ACFS

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

$

这时候再看看逻辑卷目录中是否包含挂载目录:

$ kfed read /dev/oracleasm/disks/ASMDISK6 aun=53 blkn=1 | grep mountpath
kfvvde.mountpath:                /acfs1 ; 0x0b4: length=6

确实如此。

Conclusion

一个磁盘组中可以配置一个或多个ASM动态逻辑卷设备。ASM集群文件系统通过ADVM接口构建于ASM磁盘组之上。ADVM跟数据库一样,也是ASM的一个客户端。

有两种与ADVM逻辑卷相关的文件类型:

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!