AFD (ASM Filter Driver) 是 Oracle 12c 開始引入的新功能,不僅能保護 ASM Disk ,設定上也相對簡單方便,不過未來在 UEK8 (Oracle Linux 9、Kernel 6.12) 及所有 kernel > 5.15 的 Linux 作業系統上, AFD 已被列為不支援;此外,自 Oracle Database 26ai 起亦不再支援 AFD 。這意味著 AFD 將無法於未來環境中使用,若升級過程中未留意此變更,可能導致 AFD driver 無法正常啟動 :
CRS-2758: Resource 'ora.driver.afd' is in an unknown state. CRS-2807: Resource 'ora.driver.afd' failed to start automatically. |
在 RAC 環境中,若是 afd driver 無法啟動,那麼所有由 AFD Disk 組成的 Disk Group 便無法使用, GI 也會因為無法存取放在 Disk Group 裡面的 Voting 與 OCR 而無法啟動,因此當前建議先將 AFD 的設定移除, ASM Disk 回歸由 udev rule 進行設定。
必須所有的 Disk Group 都沒有使用 AFD Disk 的情況下才能夠移除 AFD 設定,若 Disk Group 只有一個 AFD Disk ,則必須新增 Disk 然後替換掉 AFD Disk :
add new disk 🡪 drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back
若 Disk Group 有兩顆以上的 AFD Disk ,在空間足夠的情況下可以逐個進行替換 :
drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back 🡪 drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back 🡪 …
如此循環直到替換掉所有 AFD Disk 。
舉例來說,目前的 DATA dg 只有一個 AFD Disk :
這時候就必須要新增一個 disk 來進行替換,首先編輯 /etc/udev/rules.d/99-oracle-asmdevices.rules :
KERNEL=="sd[b-c]", OWNER="oracle", GROUP="oinstall", MODE="0660" |
reload udev rule 進行生效 :
# udevadm control --reload-rules && udevadm trigger |
以上RAC 所有節點都要做。
Data dg 加入新的 disk :
SQL> alter diskgroup data add disk '/dev/sdc'; |
等到 rebalance 結束後 drop AFD Disk :
SQL> alter diskgroup data drop disk data1; |
進入 asmcmd 將 AFD Disk 進行 unlabel :
ASMCMD> afd_unlabel DATA1 |
將 unlabel 過後的 disk 重新加回 Data dg :
SQL> alter diskgroup data add disk '/dev/sdb'; |
最後確認已經沒有存在任何 AFD Disk 之後就可以移除 AFD 設定 :移除 AFD 設定必須停下 RAC 所有節點的 crs ,不能 rolling 更改設定 :
所有節點都要操作 : # cd /u01/app/oracle/19.21/grid/bin # ./crsctl stop crs # ./acfsload stop # export ORACLE_BASE=/u01/app/oracle # ./asmcmd afd_deconfigure AFD-632: Existing AFD installation detected. AFD-634: Removing previous AFD installation. AFD-635: Previous AFD components successfully removed. ASMCMD-9375: error occurred when executing /bin/rpm -q sles-release package sles-release is not installed Modifying resource dependencies - this may take some time. # ./acfsload start # ./crsctl start crs |
結束後可以執行 afddriverstate 再次確認 AFD 是否有安裝 :
狀態為 false 表示已經移除 AFD 。