如何不使用圖形來建立ACFS檔案系統

2023-06-01 18:00:26

客戶需求,提供在19c環境下,ACFS的命令列操作的具體步驟,便於在圖形介面不可用場景使用。
當然,如果有圖形可操作,還是推薦首選圖形,避免複雜度以及不必要的錯誤。

其實之前有測試過11g環境下的ACFS命令建立,如下:

但考慮到版本可能會有變化,為避免不必要的試錯過程,我們建議依據官方19c最新的方式來建立。

在正式開始之前,首先我們要了解下相關概念,嗯,又要來看官方檔案說明了,主要看「Automatic Storage Management Administrator's Guide」這個檔案。

Oracle ASM Cluster File System (Oracle ACFS) and Oracle ASM Dynamic Volume Manager (Oracle ADVM) provide key components of storage management.

其實儲存管理的功能本身由儲存軟體商來cover,但是Oracle的ASM一出,就搶佔了這個市場。尤其是現在去裝Oracle叢集資料庫,基本不會再用到儲存軟體的儲存管理,都是首選ASM。
但ASM磁碟組只能存放Oracle相關資料,而ACFS就是進一步擴充套件應用場景,在ASM的基礎上,提供了叢集檔案系統,可以用於存放任意資料。官方原話是:

Oracle Automatic Storage Management Cluster File System (Oracle ACFS) is a multi-platform, scalable file system, and storage management technology that extends Oracle Automatic Storage Management (Oracle ASM) functionality to support all customer files.

建立ACFS,參考官方檔案:

  • Creating an Oracle ACFS File System

https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/steps-manage-acfs.html

官方檔案寫的非常清楚,只需要按檔案做一個具體測試驗證,供客戶操作參考:
我這裡用於XTTS測試,就將掛載目錄建立簡單明瞭的/xtts吧。

[root@db01rac1 ~]# mkdir /xtts
[root@db01rac2 ~]# mkdir /xtts

之後步驟按檔案驗證如下:

1.在DATADG磁碟組中建立ADVM volume

ASMCMD> volcreate -G datadg -s 5G volume1

實驗空間有限,就以5G大小為例,如果你的空間需要更大,按實際調整即可,ACFS支援大空間建立,只要你的ASM磁碟組剩餘空間足夠。

2.確認已經成功建立ADVM volume

ASMCMD> volinfo -G datadg volume1
Diskgroup Name: DATADG

	 Volume Name: VOLUME1
	 Volume Device: /dev/asm/volume1-290
	 State: ENABLED
	 Size (MB): 5120
	 Resize Unit (MB): 64
	 Redundancy: UNPROT
	 Stripe Columns: 8
	 Stripe Width (K): 1024
	 Usage:
	 Mountpath:

[grid@db01rac1 ~]$ sqlplus / as sysasm

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jun 1 14:02:48 2023
Version 19.16.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.16.0.0.0

SQL> SELECT volume_name, volume_device FROM V$ASM_VOLUME
     WHERE volume_name ='VOLUME1';  2

VOLUME_NAME
------------------------------
VOLUME_DEVICE
--------------------------------------------------------------------------------
VOLUME1
/dev/asm/volume1-290

3.使用mkfs命令建立acfs檔案系統

[grid@db01rac1 ~]$ ls -l /dev/asm/volume1-290
brwxrwx--- 1 root asmadmin 250, 148481 Jun  1 13:19 /dev/asm/volume1-290

[grid@db01rac1 ~]$ /sbin/mkfs -t acfs /dev/asm/volume1-290
mkfs.acfs: version                   = 19.0.0.0.0
mkfs.acfs: on-disk version           = 46.0
mkfs.acfs: volume                    = /dev/asm/volume1-290
mkfs.acfs: volume size               = 5368709120  (   5.00 GB )
mkfs.acfs: Format complete.

注意:這裡其實並不需要root使用者執行mkfs命令,只要是volume的所有者即可執行此命令,比如這裡就是grid使用者執行成功的。

4.註冊檔案系統

使用 srvctl 命令註冊並自動掛載檔案系統,舉例來說:

[root@db01rac1 ~]# /u01/app/19.3.0/grid/bin/srvctl add filesystem -device /dev/asm/volume1-290 -path /xtts -user grid,oracle

使用acfsutil命令來註冊檔案系統,舉例如下:

[root@db01rac1 ~]# /sbin/acfsutil registry -a /dev/asm/volume1-290 /xtts
acfsutil registry: mount point /xtts successfully added to Oracle Registry

此時已經可以查到兩邊節點正常看到這個acfs的檔案系統正常掛載:

--node1:
[root@db01rac1 xtts]# df -h /xtts
檔案系統              容量  已用  可用 已用% 掛載點
/dev/asm/volume1-290  5.0G  559M  4.5G   11% /xtts
[root@db01rac1 xtts]# ls -ld /xtts
drwxr-xr-x 4 oracle oinstall 32768 6月   1 14:31 /xtts
[root@db01rac1 xtts]# ls -lrth /xtts
總用量 64K
drwx------ 2 root root 64K 6月   1 14:31 lost+found

--node2:
[root@db01rac2 xtts]# df -h /xtts
檔案系統              容量  已用  可用 已用% 掛載點
/dev/asm/volume1-290  5.0G  559M  4.5G   11% /xtts
[root@db01rac2 xtts]# df -h /xtts
檔案系統              容量  已用  可用 已用% 掛載點
/dev/asm/volume1-290  5.0G  559M  4.5G   11% /xtts
[root@db01rac2 xtts]# ls -ld /xtts
drwxr-xr-x 4 oracle oinstall 32768 6月   1 14:31 /xtts
[root@db01rac2 xtts]# ls -lrth /xtts
總用量 64K
drwx------ 2 root root 64K 6月   1 14:31 lost+found

5.掛載並啟動檔案系統

之前已經註冊了檔案系統,直接使用SRVCTL命令啟動檔案系統,舉例如下:

[grid@db01rac1 ~]$ srvctl start filesystem -device /dev/asm/volume1-290
PRCR-1120 : Resources are already running.
CRS-5702: Resource 'ora.datadg.volume1.acfs' is already running on 'db01rac1'

實際發現這一步不需要執行了,因為資源都已經正常啟動啦:

[grid@db01rac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATADG.VOLUME1.advm
               ONLINE  ONLINE       db01rac1                 STABLE
               ONLINE  ONLINE       db01rac2                 STABLE
...
ora.datadg.volume1.acfs
               ONLINE  ONLINE       db01rac1                 mounted on /xtts,STA
                                                             BLE
               ONLINE  ONLINE       db01rac2                 mounted on /xtts,STA
                                                             BLE
...

你根據實際情況判斷即可,如果要啟動,是這個命令沒錯。

如果你之前沒有註冊檔案系統,那麼使用oracle acfs的mount命令掛載檔案系統,舉例如下(這裡上面已完成註冊、啟動並掛載,未做這種情況的驗證):

# /bin/mount -t acfs /dev/asm/volume1-290 /xtts

這一步也不需要執行。

6.方法二:使用asmca靜默模式來建立ACFS

下面看下另外一種封裝的方法,其實就是直接使用asmca,只不過用它的靜默模式,來建立ACFS:
對應檔案:
https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/manage-acfs-advm-asmca.html

首先建立ADVM,然後建立ACFS,兩步都可以使用asmca靜默模式來建立:

這裡另外建立一個測試掛載點 /ggs,使用另外一個ASM磁碟組:ARCHDG。

1. 建立一個Oracle ADVM volume:

$ asmca -silent \
-createVolume \
-volumeName volume1 \
-volumeDiskGroup archdg \
-volumeSizeGB 1 

--實際執行效果:
[grid@db01rac1 ~]$ asmca -silent \
> -createVolume \
> -volumeName volume1 \
> -volumeDiskGroup archdg \
> -volumeSizeGB 1

[INFO] [DBT-30079] Volume volume1 created successfully.

此時對應資源正確顯示:

--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ARCHDG.VOLUME1.advm
               ONLINE  ONLINE       db01rac1                 STABLE
               ONLINE  ONLINE       db01rac2                 STABLE

2. 建立一個Oracle ACFS檔案系統:

先查詢下volume的名字:

ASMCMD> volinfo --all
Diskgroup Name: ARCHDG

	 Volume Name: VOLUME1
	 Volume Device: /dev/asm/volume1-346
	 State: ENABLED
	 Size (MB): 1024
	 Resize Unit (MB): 64
	 Redundancy: UNPROT
	 Stripe Columns: 8
	 Stripe Width (K): 1024
	 Usage:
	 Mountpath:

Diskgroup Name: DATADG

	 Volume Name: VOLUME1
	 Volume Device: /dev/asm/volume1-290
	 State: ENABLED
	 Size (MB): 5120
	 Resize Unit (MB): 64
	 Redundancy: UNPROT
	 Stripe Columns: 8
	 Stripe Width (K): 1024
	 Usage: ACFS
	 Mountpath: /xtts

然後確認是/dev/asm/volume1-346後,執行:

$ asmca -silent \
        -createACFS \
           -acfsVolumeDevice /dev/asm/volume1-346 \
           -acfsMountPoint /ggs

--實際執行效果:
[grid@db01rac1 ~]$ asmca -silent \
>         -createACFS \
>            -acfsVolumeDevice /dev/asm/volume1-346 \
>            -acfsMountPoint /ggs

[INFO] [DBT-30092] ASM Cluster File System created on /dev/asm/volume1-346 successfully.
[INFO] Run the generated ACFS registration script /u01/app/grid/cfgtoollogs/asmca/scripts/acfs_script.sh as privileged user to register the ACFS with Grid Infrastructure and to mount the ACFS. The ACFS registration script needs to be run only on this node: db01rac1.

使用root使用者執行提示的這個指令碼,
注意只需在節點1執行一次即可:

[root@db01rac1 xtts]# sh /u01/app/grid/cfgtoollogs/asmca/scripts/acfs_script.sh
已在節點 db01rac1,db01rac2 上裝載 ACFS 檔案系統/ggs

最後有個小細節稍微提下,這裡掛載的/ggs目錄預設許可權是root使用者哈,而上面方法一,因為有指定使用者許可權,掛載的目錄/xtts是oracle使用者。