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>