ASM元信息7號文件,是ASM的邏輯卷目錄,用于跟蹤與ADVM有關的文件。
ASM動態邏輯卷設備是由ASM動態邏輯卷構建的。一個磁盤組中可以配置一個或多個ASM動態邏輯卷設備。ASM集群文件系統通過ADVM接口構建在ASM磁盤組之上。ADVM像數據庫一樣,也是ASM的一個客戶端。當一個邏輯卷被訪問時,相應的ASM文件會被打開并且ASM extent的信息會被發送到ADVM驅動。
有兩種與ADVM邏輯卷相關的文件類型:
為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
這時,可以在邏輯卷設備上創建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
確實如此。
一個磁盤組中可以配置一個或多個ASM動態邏輯卷設備。ASM集群文件系統通過ADVM接口構建于ASM磁盤組之上。ADVM跟數據庫一樣,也是ASM的一個客戶端。
有兩種與ADVM邏輯卷相關的文件類型:
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。