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

原作者:Bane Radulovic

译者: 郭旭瑞

审核: 魏兴华

DBGeeK社群联合出品

ASM file number 7

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

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

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

● ASMVOL:逻辑卷文件,作为逻辑卷存储的容器。

● ASMVDRL:包含脏数据记录区域信息的文件;重新同步镜像数据时会用到此文件。

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),并且有两个文件关联到这个逻辑卷:

● DRL脏数据记录区域文件(kfvvde.drlfnum.number: 256)

● 逻辑卷文件(kfvvde.volfnum.number: 257)

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

● DRL脏数据记录区域文件(kfvvde.drlfnum.number: 258)

● 逻辑卷文件(kfvvde.volfnum.number: 259)

这些都是特殊文件,所以不会显示在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逻辑卷相关的文件类型:

● ASMVOL:逻辑卷文件,作为逻辑卷存储设备的容器

● ASMVDRL:包含脏数据记录区域信息的文件。恢复镜像数据时会用到此文件。

关于译者

郭旭瑞,沃趣科技产品交付部经理,负责QData Cloud高性能数据库云平台、QBackup数据库秒级备份恢复云平台等产品的整体交付管理与技术支持、维保服务工作。个人网站:www.dbalex.com

本文分享自微信公众号 - 沃趣科技(woqutech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏西安-晁州

小程序开发知识点总结

我承认,最近比较懒了,博客也很久没更新了,太对不住自己了,做了一段时间小程序开发,总结了一些知识点,直接上菜。

29210
来自专栏Seebug漏洞平台

Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052(CVE-2017-9805)

漏 洞 概 述 1. 漏洞信息: 2017年9月5日,Apache Struts 发布最新安全公告。Apache Struts2 的 REST 插件存在远程...

32960
来自专栏北京马哥教育

DNS从入门到管理(一)

DNS概述 DNS(Domain Name System,域名系统),域名和IP地址相互映射的一个分布式数据库,通过主机名,最终得到该主机名对应的IP地址的过程...

72660
来自专栏前端萌媛的成长之路

一波webpack

21740
来自专栏bboysoul

部署包安装zabbix

昨天给树莓派安装上了一个温度传感器,今天想使用zabbix去统计监控树莓派上温度传感器的数据,所以我就开始在我的一台不怎么用的阿里云服务器上安装zabbix了 ...

21420
来自专栏Java架构沉思录

Linux常用Shell脚本知多少

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

21110
来自专栏james大数据架构

分布式监控系统Zabbix3.2给异常添加邮件报警

  在前一篇 分布式监控系统Zabbix3.2跳坑指南 中已安装好服务端和客户端,此处客户端是被监控的服务器,可能有上百台服务器。监控的目的一个是可以查看历史状...

31090
来自专栏FreeBuf

一款轻量级Web漏洞教学演示系统(DSVW)

Damn Small Vulnerable Web (DSVW) 是使用 Python 语言开发的 Web应用漏洞 的演练系统。其系统只有一个 python 的...

320100
来自专栏乐沙弥的世界

Linux 6 下yum方式安装配置LAMP平台

1、apache httpd与php之间的衔接是通过模块化的方式来实现。 2、对于perfork模式使用libphp5模块,worker和event模式则使...

19920
来自专栏跟着阿笨一起玩NET

Log4Net日志记录两种方式

     log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库...

62820

扫码关注云+社区

领取腾讯云代金券