asm元信息7号文件,是asm的逻辑卷目录,用于跟踪与advm有关的文件。
asm动态逻辑卷设备是由asm动态逻辑卷构建的。一个磁盘组中可以配置一个或多个asm动态逻辑卷设备。asm集群文件系统通过advm接口构建在asm磁盘组之上。advm像数据库一样,也是asm的一个客户端。当一个逻辑卷被访问时,相应的asm文件会被打开并且asm extent的信息会被发送到advm驱动。
有两种与advm逻辑卷相关的文件类型:
· asmvol:逻辑卷文件,作为逻辑卷存储的容器
· asmvdrl:包含脏数据记录区域信息的文件。重新同步镜像数据时会用到此文件。
为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
$
到现在,还没有相应的挂载目录与逻辑卷相关联,所以还不能使用它们。这时,我们可以先看看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
kfvvde.volnm: acfs_vol1 ; 0x034: length=9
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.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
kfvvde.volnm: acfs_vol2 ; 0x034: length=9
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
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
这时,可以在逻辑卷设备上创建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
usage: acfs
mountpath: /acfs1
这时候再看看逻辑卷目录中是否包含挂载目录:
$ kfed read /dev/oracleasm/disks/asmdisk6 aun=53 blkn=1 | grep mountpath
kfvvde.mountpath: /acfs1 ; 0x0b4: length=6
确实如此。
一个磁盘组中可以配置一个或多个asm动态逻辑卷设备。asm集群文件系统通过advm接口构建于asm磁盘组之上。advm跟数据库一样,也是asm的一个客户端。
· asmvol:逻辑卷文件,作为逻辑卷存储设备的容器
· asmvdrl:包含脏数据记录区域信息的文件。恢复镜像数据时会用到此文件。
<b>本文来自云栖社区合作伙伴“dbgeek”</b>