How to migrate Oracle ASM UDEV managed disks to Oracle ASMFD (Filter Driver)

I have previously shared how to install the Oracle ADM Filter Driver (ADMFD) using the CLI and also using the Oracle Installer graphical UI.

In the post I will share how to migrate existing Oracle ASM UDEV managed disks to use the newer ASM Filter Driver (ASMFD).

To confirm ASM Filter Driver has already been installed, loaded, supported and current version, use afddriverstate installed | loaded | supported | version, for example.

[root@z-rac1:~]# afddriverstate installed
AFD-9203: AFD device driver installed status: 'true'

[root@z-rac1:~]# afddriverstate loaded
AFD-9205: AFD device driver loaded status: 'true'

[root@z-rac1:~]# afddriverstate supported
AFD-9200: Supported

[root@z-rac1:~]# afddriverstate version
AFD-9325:     Driver OS kernel version = 5.4.17-2011.0.7.el7uek.x86_64.
AFD-9326:     Driver build number = 220322.1.
AFD-9231:     Driver build version = 19.0.0.0.0 (19.15.0.0.0).
AFD-9547:     Driver available build number = 220322.1.
AFD-9232:     Driver available build version = 19.0.0.0.0 (19.15.0.0.0).

To migrate the disks to ASMFS we first need to stop the Oracle High Availability Service using $GRID_HOME/crsctl stop has. (Note: repeat on all nodes within a RAC Cluster)

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/crsctl stop has
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'z-rac1'
CRS-2673: Attempting to stop 'ora.crsd' on 'z-rac1'
CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on server 'z-rac1'
..
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'z-rac2' has completed
CRS-4133: Oracle High Availability Services has been stopped.

Configure ASMFD and enable using $GRID_HOME/ascmcd afd_configure -e (repeat for RAC)

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/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.

Confirm that the ASM Filer Driver Kernel module has loaded successfully using lsmod | grep afd.

[root@z-rac1:~]# lsmod | grep afd
oracleafd             221184  0 

[root@z-rac2 ~]# lsmod | grep afd
oracleafd             233472  0 

Check the status of the ASMFD using $GRID_HOME/asmcmd afd_state.

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'z-rac1.uklab.purestorage.com'

[root@z-rac2 ~]# /u01/app/19.0.0/grid/bin/asmcmd afd_state
ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'ENABLED' on host 'z-rac2.uklab.purestorage.com'

Before label the disks, lets use kfod to check the current labels are blank.

[root@z-rac1:~]# kfod OP=DISKS status=TRUE disks=ASM label=TRUE dscvgroup=TRUE
--------------------------------------------------------------------------------
 Disk          Size Header    Path                                    Disk Group         Site      Failgroup           Disk-Label User     Group   
================================================================================
   1:   10485760 MB MEMBER    /dev/mapper/dg_racpod_acfs01             ACFS                 #              #                    # oracle   dba     
   2:     204800 MB MEMBER    /dev/mapper/dg_racpod_control_redo       CONTROL_REDO         #              #                    # oracle   dba     
   3:      51200 MB MEMBER    /dev/mapper/dg_racpod_crs                OCR                  #              #                    # oracle   dba     
   4:   31457280 MB MEMBER    /dev/mapper/dg_racpod_data01             DATA                 #              #                    # oracle   dba     
   5:   31457280 MB MEMBER    /dev/mapper/dg_racpod_data02             DATA                 #              #                    # oracle   dba     
   6:   31457280 MB MEMBER    /dev/mapper/dg_racpod_data03             DATA                 #              #                    # oracle   dba     
   7:   31457280 MB MEMBER    /dev/mapper/dg_racpod_data04             DATA                 #              #                    # oracle   dba     
   8:    3145728 MB MEMBER    /dev/mapper/dg_racpod_fra                FRA                  #              #                    # oracle   dba     
   9:     102400 MB MEMBER    /dev/mapper/dg_racpod_gimr               MGMT                 #              #                    # oracle   dba     

Label and migrate disks using $GRID_HOME/bin/asmcmd afd_label <label> <physical path> –migrate.

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label ACFS01 /dev/mapper/dg_racpod_acfs01 --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label CONTROL_REDO /dev/mapper/dg_racpod_control_redo --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label CRS /dev/mapper/dg_racpod_crs --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label DATA01 /dev/mapper/dg_racpod_data01 --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label DATA02 /dev/mapper/dg_racpod_data02 --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label DATA03 /dev/mapper/dg_racpod_data03 --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label DATA04 /dev/mapper/dg_racpod_data04 --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label FRA /dev/mapper/dg_racpod_fra --migrate
[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_label GIMR /dev/mapper/dg_racpod_gimr --migrate

Now when we use kfod label=TRUE and asm_diskstring=AFD:* we can see our disks have been re-labeled AFD:<label name>.

[root@z-rac1:~]#  kfod OP=DISKS status=TRUE disks=ASM label=TRUE dscvgroup=TRUE asm_diskstring=AFD:*
--------------------------------------------------------------------------------
 Disk          Size Header    Path                                    Disk Group         Site      Failgroup           Disk-Label User     Group   
================================================================================
   1:   10485760 MB MEMBER    AFD:ACFS01                               ACFS                 #              #               ACFS01                  
   2:     204800 MB MEMBER    AFD:CONTROL_REDO                         CONTROL_REDO         #              #         CONTROL_REDO                  
   3:      51200 MB MEMBER    AFD:CRS                                  OCR                  #              #                  CRS                  
   4:   31457280 MB MEMBER    AFD:DATA01                               DATA                 #              #               DATA01                  
   5:   31457280 MB MEMBER    AFD:DATA02                               DATA                 #              #               DATA02                  
   6:   31457280 MB MEMBER    AFD:DATA03                               DATA                 #              #               DATA03                  
   7:   31457280 MB MEMBER    AFD:DATA04                               DATA                 #              #               DATA04                  
   8:    3145728 MB MEMBER    AFD:FRA                                  FRA                  #              #                  FRA                  
   9:     102400 MB MEMBER    AFD:GIMR                                 MGMT                 #              #                 GIMR                  

Use asmcmd afd_lsdsk to list all ASM Filter driver disks, here we can see the physical paths.

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd afd_lsdsk
--------------------------------------------------------------------------------
Label                     Filtering   Path
================================================================================
ACFS01                      ENABLED   /dev/mapper/dg_racpod_acfs01
CONTROL_REDO                ENABLED   /dev/mapper/dg_racpod_control_redo
CRS                         ENABLED   /dev/mapper/dg_racpod_crs
DATA01                      ENABLED   /dev/mapper/dg_racpod_data01
DATA02                      ENABLED   /dev/mapper/dg_racpod_data02
DATA03                      ENABLED   /dev/mapper/dg_racpod_data03
DATA04                      ENABLED   /dev/mapper/dg_racpod_data04
FRA                         ENABLED   /dev/mapper/dg_racpod_fra
GIMR                        ENABLED   /dev/mapper/dg_racpod_gimr

Using asmcmd lsdsk we can see the ASM disks but this time showing the ASMFD label name.

[root@z-rac1:~]# /u01/app/19.0.0/grid/bin/asmcmd lsdsk
Path
AFD:ACFS01
AFD:CONTROL_REDO
AFD:CRS
AFD:DATA01
AFD:DATA02
AFD:DATA03
AFD:DATA04
AFD:FRA
AFD:GIMR

Using ls -al we can see ASMFD has created some file in /dev/oracleafd/disks

[root@z-rac1:~]# ls -al /dev/oracleafd/disks
total 36
drwxrwx---. 2 oracle dba      220 Apr  5 10:40 .
drwxrwx---. 3 oracle dba       80 Apr  3 15:50 ..
-rw-rw-r--. 1 oracle oinstall  29 Apr  5 10:37 ACFS01
-rw-rw-r--. 1 oracle oinstall  35 Apr  5 10:39 CONTROL_REDO
-rw-rw-r--. 1 oracle oinstall  26 Apr  5 10:39 CRS
-rw-rw-r--. 1 oracle oinstall  29 Apr  3 15:50 DATA01
-rw-rw-r--. 1 oracle oinstall  29 Apr  3 15:50 DATA02
-rw-rw-r--. 1 oracle oinstall  29 Apr  3 15:50 DATA03
-rw-rw-r--. 1 oracle oinstall  29 Apr  3 15:50 DATA04
-rw-rw-r--. 1 oracle oinstall  26 Apr  5 10:40 FRA
-rw-rw-r--. 1 oracle oinstall  27 Apr  5 10:40 GIMR

If we check the contents of the above we can see the file references the physical device.

[root@z-rac1:~]# cat /dev/oracleafd/disks/DATA01 
/dev/mapper/dg_racpod_data01

Now, remove UDEV rules from the /etc/udev/rules.d/ directory and reload UDEV rules.

Re-start the Oracle High Availability Services

[root@z-rac1:~]# crsctl start has
CRS-4123: Oracle High Availability Services has been started.

As the Grid user, updated the Oracle ASM Filter Driver discovery diskstring value, thus:

[oracle@z-rac1 ~]$ asmcmd dsset 'AFD:*'
[oracle@z-rac1 ~]$ asmcmd dsget
parameter:AFD:*
profile:AFD:*

Using sqlplus connect to the ASM database as sysasm, and perform the following:

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

SQL> show parameter string

NAME                TYPE	VALUE
------------------- ----------- ------------
asm_diskstring	    string	AFD:*


SQL> select name, state from v$asm_diskgroup;

NAME			       STATE
------------------------------ -----------
ACFS			       MOUNTED
CONTROL_REDO		       MOUNTED
DATA			       MOUNTED
FRA			       MOUNTED
MGMT			       MOUNTED
OCR			       MOUNTED

6 rows selected.

SQL> select path from v$asm_disk;

PATH
------------------------------------------
AFD:DATA01
AFD:DATA02
AFD:DATA03
AFD:DATA04
AFD:GIMR
AFD:FRA
AFD:CRS
AFD:CONTROL_REDO
AFD:ACFS01

9 rows selected.

To confirm the ASM Filter Driver is being used we can use the following SQL.

set feed off
set pages 100
set lines 200

col group_number heading 'Grp' format 9
col name heading 'Name' format a18
col state heading 'State' format a7
col header_status heading 'Header' format a7
col mount_status heading 'Mount' format a7
col path heading 'Path' format a16
col library heading 'Library' format a44

Prompt ASMFD Configuration

select group_number, name, state, header_status, mount_status, path, library
from v$asm_disk order by group_number, name;

And the output.

SQL> @asmfd
ASMFD Configuration

Grp Name	       State   Header  Mount   Path		Library
--- ------------------ ------- ------- ------- ---------------- --------------------------------------------
  1 ACFS_0000	       NORMAL  MEMBER  CACHED  AFD:ACFS01	AFD Library - Generic , version 3 (KABI_V3)
  2 CONTROL_REDO_0000  NORMAL  MEMBER  CACHED  AFD:CONTROL_REDO AFD Library - Generic , version 3 (KABI_V3)
  3 DATA_0000	       NORMAL  MEMBER  CACHED  AFD:DATA01	AFD Library - Generic , version 3 (KABI_V3)
  3 DATA_0001	       NORMAL  MEMBER  CACHED  AFD:DATA02	AFD Library - Generic , version 3 (KABI_V3)
  3 DATA_0002	       NORMAL  MEMBER  CACHED  AFD:DATA03	AFD Library - Generic , version 3 (KABI_V3)
  3 DATA_0003	       NORMAL  MEMBER  CACHED  AFD:DATA04	AFD Library - Generic , version 3 (KABI_V3)
  4 FRA_0000	       NORMAL  MEMBER  CACHED  AFD:FRA		AFD Library - Generic , version 3 (KABI_V3)
  5 MGMT_0000	       NORMAL  MEMBER  CACHED  AFD:GIMR 	AFD Library - Generic , version 3 (KABI_V3)
  6 OCR_0000	       NORMAL  MEMBER  CACHED  AFD:CRS		AFD Library - Generic , version 3 (KABI_V3)

In the above I have demonstrated how to migrate an Oracle ASM UDEV to the ASM Filter Driver (ASMFD).

Leave a Reply

Create a website or blog at WordPress.com

Up ↑

Discover more from Ron Ekins' - Oracle Technology, DevOps and Kubernetes Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading