I recently had a client express some interest in migrating from UDEV managed devices in Oracle ASM to the ASM Filter Driver (AFD). There is a Metalink document describing the migration from ASMLIB to AFD that is quite informative: ASMFD: How to Migrate ASM Diskgroups from ASMLIB to ASMFD (ASM Filter Driver). However, I did not see one for UDEV to AFD. Some of the steps are quite similar, I thought I'd give a step-by-step on how to perform this conversion so that your storage is fully managed by Oracle while your data is protected by filtering.
Scenario
I had an Oracle Linux 7.9 VM, with 19c Grid stand alone and 19c DB installed, two devices presented for DATA and FRA diskgroups, and links setup with UDEV rules as shown below:
KERNEL=="sd?", SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name",RESULT=="1ATA_Oracle_Linux_7-5_SSD_NF1T2476PMR4S7J305 1Q",SYMLINK+="oracleasm/disk1",OWNER="oracle", GROUP="dba", MODE="0660" KERNEL=="sd?", SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name",RESULT=="1ATA_Oracle_Linux_7-4_SSD_48TVB1ZANCFM3A02JS 2T",SYMLINK+="oracleasm/disk2",OWNER="oracle", GROUP="dba", MODE="0660"
Then, I have 2 diskgroups setup (disk1 = DATA, disk2 = FRA):
SQL> select name, state from v$asm_diskgroup; DISKGROUP STATE --------------------- ----------- DATA MOUNTED FRA MOUNTED SQL> select path from v$asm_disk; PATH ---------------------------------- /dev/oracleasm/disk2 /dev/oracleasm/disk1
This is validation that the Oracle ASM Filter Driver is *not* setup:
[oracle@oracle-linux-7 ~]$ asmcmd afd_state ASMCMD-9530: The AFD state is 'NOT INSTALLED'
I have a database named TEST with datafiles on the DATA diskgroup:
SQL> select name from v$datafile; NAME ------------------------------------------------- +DATA/TEST/DATAFILE/system.257.1094991617 +DATA/TEST/DATAFILE/sysaux.258.1094991619 +DATA/TEST/DATAFILE/undotbs.259.1094991621 +DATA/TEST/DATAFILE/users.261.1094991627
Now we can start the conversion from UDEV to ASM Filter Driver. First, shutdown the database. Next, shutdown GRID:
[root@oracle-linux-7 init.d]# ./ohasd stop Stopping Oracle Clusterware stack CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'oracle-linux-7' has completed CRS-4133: Oracle High Availability Services has been stopped.
Next – let's configure and enable the ASM Filter Driver:
[root@oracle-linux-7 init.d]# asmcmd afd_configure -e AFD-627: AFD distribution files found. AFD-634: Removing previous AFD installation. AFD-635: Previous AFD components successfully removed. AFD-9294: updating file /etc/sysconfig/oracledrivers.conf AFD-636: Installing requested AFD software. AFD-637: Loading installed AFD drivers. AFD-9321: Creating udev for AFD. AFD-9323: Creating module dependencies - this may take some time. AFD-9154: Loading 'oracleafd.ko' driver. AFD-649: Verifying AFD devices. AFD-9156: Detecting control device '/dev/oracleafd/admin'. AFD-638: AFD installation correctness verified. Modifying resource dependencies - this may take some time.
You can now see the loaded AFD Kernel Module, a loaded AFD state, and the AFD configuration file. (NOTE: it didn't add a diskstring by default – you may need to do that – e.g. '/dev/sd*')
[root@oracle-linux-7 init.d]# lsmod | grep afd oracleafd 214072 0 [root@oracle-linux-7 init.d]# asmcmd afd_state ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'oracle-linux-7.shared' [root@oracle-linux-7 init.d]# cat /etc/oracleafd.conf afd_diskstring='' afd_filtering=enable
As of now, we have no AFD labeled disks:
[root@oracle-linux-7 init.d]# asmcmd afd_lsdsk
There are no labelled devices.
Let's take the UDEV managed devices and re-stamp the header as an ASM Filter Driver disk. Note that we need the "migrate" parameter for this header stamp command:
[root@oracle-linux-7 init.d]# asmcmd afd_label DATA1 /dev/sdc --migrate [root@oracle-linux-7 init.d]# asmcmd afd_label FRA1 /dev/sdd –-migrate
You can now see the active AFD managed disks and their location:
root@oracle-linux-7 init.d]# asmcmd afd_lsdsk --------------------------------------------------- Label Filtering Path =================================================== DATA1 ENABLED /dev/sdc FRA1 ENABLED /dev/sdd [root@oracle-linux-7 init.d]# ls -altr /dev/oracleafd/disks -rw-rw-r-- 1 oracle dba 9 Jan 26 12:49 DATA1 -rw-rw-r-- 1 oracle dba 9 Jan 26 12:49 FRA1
Now, it's time to disable the UDEV management:
[root@oracle-linux-7 init.d]# cd /etc/udev/rules.d [root@oracle-linux-7 rules.d]# mv 99-oracleasm.rules ~ [root@oracle-linux-7 rules.d]# /sbin/udevadm control --reload-rules [root@oracle-linux-7 rules.d]# /sbin/udevadm trigger
The devices in /dev/oracleasm should now be gone, along with the directory. Now GRID can be started, and I'll check the status of the diskgroups:
SQL> select name, state from v$asm_diskgroup; NAME STATE ------------------------------ ----------- DATA MOUNTED FRA MOUNTED SQL> select path from v$asm_disk; PATH -------------------------------------------------------------------------------- AFD:DATA1 AFD:FRA1
If your disks don't show up and the diskgroups don't mount, make sure your search string has the AFD:* format in it.
SQL> show parameter string NAME TYPE VALUE ---------------------- ----------- ------------------------- asm_diskstring. string. /dev/oracleasm/*, AFD:*
These steps are what led to a successful conversion from UDEV managed devices to ASM Filter Driver managed devices.