{"id":73164,"date":"2015-05-22T13:31:55","date_gmt":"2015-05-22T13:31:55","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/uncategorized\/oracle-automatic-storage-management-filter-driver-oracle-asmfd\/"},"modified":"2026-05-21T16:13:05","modified_gmt":"2026-05-21T16:13:05","slug":"oracle-automatic-storage-management-filter-driver-oracle-asmfd","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/databases\/oracle-databases\/oracle-automatic-storage-management-filter-driver-oracle-asmfd\/","title":{"rendered":"Oracle ASMFD: Migrate from ASMLIB to ASM Filter Driver"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-executive-summary\">Executive Summary<\/h2>\n\n\n\n<p><strong>Oracle ASMFD (ASM Filter Driver) is the replacement for ASMLIB in Oracle 12.1.0.2 and later, providing OS-level protection for ASM disk devices by filtering non-Oracle writes to ASM disks &#8211; preventing accidental or malicious overwrites. This article covers migrating an existing ASMLIB-based ASM environment to ASMFD: verifying the current ASMLIB configuration, creating a test table in an ASM tablespace to verify data integrity, labelling the disks for ASMFD, shutting down the cluster stack, running the migration, starting the stack with ASMFD, and validating that all disk groups are online and data is intact.<\/strong><\/p>\n\n\n\n<p>Prior to Oracle Grid Infrastructure (GI) release 12.1.0.2, ASM Library (ASMLIB) was the only method to access storage devices by means of ASM Disks and Diskgroups. There were serious limitations to this method. The ASM disks were owned by GI home owner and both the owner and any users belonging to an operating system group designated as the OSASM group could read from and write to ASM disks using OS commands like strings, echo, dd etc. This led to compromising the security of data as well as accidental corruption of the data in the ASM disks and ASM disks themselves.<\/p>\n\n\n\n<p>With Oracle Grid Infrastructure release 12.1.0.2, Oracle has introduced a new component called&nbsp;Oracle Automatic Storage Management Filter Driver (Oracle ASMFD) which is installed with an Oracle Grid Infrastructure installation. It is intended to overcome the limitations mentioned earlier and replace traditional ASMLIB. ASMFD is currently available only on the Linux operating system and can be completely managed by the&nbsp;ASMCMD&nbsp;command Line interface.<\/p>\n\n\n\n<p>Oracle ASMFD is a kernel module that resides in the I\/O path of the Oracle ASM disks. ASMFD uses the filter driver to validate write I\/O requests to Oracle ASM disks. Any write I\/O requests that are not issued by Oracle software (e.g. using dd command) are not committed to ASM disks. Thus it helps to prevent users, including those with administrative privileges, from inadvertently overwriting Oracle ASM disks, thereby preventing corruption of the data stored on ASM disk(s) within the disk group(s). In case ASM disks have been configured on disk partitions, the filter protects the area on the disk managed by Oracle ASMFD, assuming the partition table is left untouched by the user.<\/p>\n\n\n\n<p>Besides, Oracle ASMFD eliminates the need to rebind disk devices used with Oracle ASM each time the system is restarted.<\/p>\n\n\n\n<p>If you have an existing Oracle ASM library driver (Oracle ASMLIB) configuration, and you want to employ ASMFD, you would need to configure Oracle ASMFD. This will remove Oracle ASMLIB and Oracle ASM devices will be configured to use Oracle ASMFD. In this article, I will demonstrate configuration of Oracle ASMFD in a standalone environment.<\/p>\n\n\n\n<p>Currently, I have Oracle ASMLIB configured on my standalone system. OS user oracle is the owner of both GI home and Database home.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-overview\">Overview:<\/h2>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li><a href=\"#one\">Verify that currently ASMLIB has been configured and ASMFD is not configured yet<\/a><\/li>\n\n\n\n<li><a href=\"#two\">Create a table in an ASM tablespace<\/a><\/li>\n\n\n\n<li><a href=\"#three\">Migrate ASM disks to use ASMFD<\/a><div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li><a href=\"#threea\">Make sure ASM is using SPFILE<\/a><\/li>\n\n\n\n<li><a href=\"#threeb\">Update the ASM Disk discovery path to enable ASMFD lookup<\/a><\/li>\n\n\n\n<li><a href=\"#threec\">Bring down the Clusterware stack<\/a><\/li>\n<\/ul>\n<\/div><\/li>\n\n\n\n<li><a href=\"#four\">Configure ASMFD<\/a><\/li>\n\n\n\n<li><a href=\"#five\">Start Clusterware stack<\/a><\/li>\n\n\n\n<li><a href=\"#six\">Verify that ASMFD has been successfully configured and ASM disks have been migrated<\/a><\/li>\n\n\n\n<li><a href=\"#seven\">Set ASM_DISKSTRING and AFD_DISKSTRING to \u2018AFD:*\u2019<\/a><\/li>\n\n\n\n<li><a href=\"#eight\">Validate that ASM Disk groups have migrated and are using ASMFD<\/a><\/li>\n\n\n\n<li><a href=\"#nine\">Verify that our data is intact after migration<\/a><\/li>\n\n\n\n<li><a href=\"#ten\">Verify that when filter is enabled it does not allow OS commands to alter the contents of ASM disks<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-implementation\">Implementation:<\/h2>\n\n\n\n<p><a name=\"one\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-that-currently-asmlib-has-been-configured-and-asmfd-is-not-configured-yet\">Verify that currently ASMLIB has been configured and ASMFD is not configured yet<\/h3>\n\n\n\n<p><strong>We can verify that Oracle ASMLIB is configured and driver for oracleasm is currently loaded.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 ~]# lsmod | grep oracle\n\n<span style=\"font-weight: bold; color: red;\">oracleasm<\/span>              48660  1 \n\n[root@host01 ~]# oracleasm scandisks\n\n[root@host01 ~]# oracleasm listdisks\n\nASMDISK01\nASMDISK02\nASMDISK03\nASMDISK04\nASMDISK05\nASMDISK06\nASMDISK07\nASMDISK08\nASMDISK09\nASMDISK10<\/pre>\n\n\n\n<p><strong>Let\u2019s check the permissions and location of ASM Disks.<\/strong><\/p>\n\n\n\n<p>The ASM Disks are block devices in \/dev\/oracleasm\/disks owned by the GI owner \u201coracle\u201d user. OS user oracle and anyone belonging to OS group \u201cdba\u201d (which maps to OSASM privilege) can read from and write to ASM disks. Thus the ASM disks are vulnerable to accidental Disk and or Data corruption.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 disks]# ls -lrt \/dev\/oracleasm\/disks\ntotal 0\nbrw-rw---- 1 oracle dba 8, 6 Apr 20 11:02 ASMDISK01\nbrw-rw---- 1 oracle dba 8, 7 Apr 20 11:02 ASMDISK02\nbrw-rw---- 1 oracle dba 8, 8 Apr 20 11:02 ASMDISK03\nbrw-rw---- 1 oracle dba 8, 9 Apr 20 11:02 ASMDISK04\nbrw-rw---- 1 oracle dba 8, 10 Apr 20 11:02 ASMDISK05\nbrw-rw---- 1 oracle dba 8, 11 Apr 20 11:02 ASMDISK06\nbrw-rw---- 1 oracle dba 8, 12 Apr 20 11:02 ASMDISK07\nbrw-rw---- 1 oracle dba 8, 13 Apr 20 11:02 ASMDISK08\nbrw-rw---- 1 oracle dba 8, 14 Apr 20 11:02 ASMDISK09\nbrw-rw---- 1 oracle dba 8, 15 Apr 20 11:02 ASMDISK10<\/pre>\n\n\n\n<p><strong>We can verify that ASMFD is not configured.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 ~]$ asmcmd afd_lsdsk\n<span style=\"font-weight: bold; color: red;\">Failed to load AFD library.<\/span>\n\n[oracle@host01 disks]$ asmcmd afd_state\n\n<span style=\"font-weight: bold; color: red;\">ASMCMD-9526: The AFD state is 'NOT INSTALLED' and filtering is 'DEFAULT' on host \n'host01.example.com'<\/span>\n\nASM&gt;SELECT SYS_CONTEXT('SYS_ASMFD_PROPERTIES', 'AFD_STATE') FROM DUAL;\n\nSYS_CONTEXT('SYS_ASMFD_PROPERTIES','AFD_STATE')\n--------------------------------------------------------------------------------\n<span style=\"font-weight: bold; color: red;\">NOT AVAILABLE<\/span>\n<\/pre>\n\n\n\n<p><a name=\"two\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-create-a-table-in-an-asm-tablespace\">Create a table in an ASM tablespace<\/h3>\n\n\n\n<p><strong>Let\u2019s find out candidate disks which are not part of any disk group yet.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 ~]$ asmcmd lsdsk --candidate\nPath\nORCL:ASMDISK05\nORCL:ASMDISK06\nORCL:ASMDISK07\nORCL:ASMDISK08\nORCL:ASMDISK09\nORCL:ASMDISK10\n\n\nASM&gt;  create diskgroup test external redundancy disk 'ORCL:ASMDISK10';\n\nORCL&gt;create tablespace ASMTBS datafile '+TEST';\n\nORCL&gt;create table hr.asm_tab tablespace ASMTBS as select * from hr.employees;\n\n             select count(*) from hr.asm_tab where last_name = 'King';\n\n  COUNT(*)\n----------\n         2\n<\/pre>\n\n\n\n<p><a name=\"three\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-migrate-asm-disks-to-use-asmfd\">Migrate ASM disks to use ASMFD<\/h3>\n\n\n\n<p>Let\u2019s find out disks in DATA and TEST disk groups<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 disks]$ asmcmd lsdsk -G DATA\nPath\nORCL:ASMDISK01\nORCL:ASMDISK02\nORCL:ASMDISK03\nORCL:ASMDISK04\n\n[oracle@host01 disks]$ asmcmd lsdsk -G TEST\n\nPath\nORCL:ASMDISK10<\/pre>\n\n\n\n<p>Let\u2019s make a note of current disk discovery path. It currently points to ASMLIB disks.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 disks]$ asmcmd dsget\nparameter:<span style=\"font-weight: bold; color: red;\">ORCL:*<\/span>\nprofile:ORCL:*<\/pre>\n\n\n\n<p><a name=\"threea\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-make-sure-asm-is-using-spfile\">Make sure ASM is using SPFILE<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 disks]$ srvctl config asm\n\nASM home: \nPassword file: +DATA\/orapwasm\nASM listener: LISTENER\n<span style=\"font-weight: bold; color: red;\">Spfile: +DATA\/ASM\/ASMPARAMETERFILE\/registry.253.872686839<\/span>\nASM diskgroup discovery string: ORCL:*\n<\/pre>\n\n\n\n<p>Now, let\u2019s start with the migration.<br><a name=\"threeb\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-update-the-asm-disk-discovery-path-to-enable-asmfd-lookup\">Update the ASM Disk discovery path to enable ASMFD lookup<\/h4>\n\n\n\n<p>Once we label the disk, it will show up as AFD: and that name will be used for disk discovery.<\/p>\n\n\n\n<p>AS GI owner , set the ASM discovery string to include AFD.* as well:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 root]$ asmcmd dsset 'ORCL:*','AFD:*'\n\n[oracle@host01 disks]$ asmcmd dsget\n\nparameter:ORCL:*, AFD:*\nprofile:ORCL:*,AFD:*<\/pre>\n\n\n\n<p>We have updated ASM disk discovery string. Now, when we configure ASMFD it would be able to discover and migrate the existing disks.<\/p>\n\n\n\n<p><a name=\"threec\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-bring-down-the-clusterware-stack\">Bring down the Clusterware stack<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">ORCL&gt;shu immediate;\n\n[root@host01 dev]# srvctl stop asm -f\n [root@host01 dev]# crsctl stop has\nCRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'host01'\nCRS-2673: Attempting to stop 'ora.evmd' on 'host01'\nCRS-2673: Attempting to stop 'ora.LISTENER.lsnr' on 'host01'\nCRS-2677: Stop of 'ora.LISTENER.lsnr' on 'host01' succeeded\nCRS-2677: Stop of 'ora.evmd' on 'host01' succeeded\nCRS-2673: Attempting to stop 'ora.cssd' on 'host01'\nCRS-2677: Stop of 'ora.cssd' on 'host01' succeeded\nCRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'host01' has completed\nCRS-4133: Oracle High Availability Services has been stopped.\n<\/pre>\n\n\n\n<p>Now, we are ready for the migration process.<br><a name=\"four\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configure-asmfd\">Configure ASMFD<\/h3>\n\n\n\n<p>This step will deconfigure ASMLIB, configure ASMFD and migrate the disks from ASMLIB to ASMFD.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 ~]# asmcmd afd_configure\n\nConnected to an idle instance.\nAFD-627: AFD distribution files found.\nAFD-636: Installing requested AFD software.\nAFD-637: Loading installed AFD drivers.\nAFD-9321: Creating udev for AFD.\nAFD-9323: Creating module dependencies - this may take some time.\nAFD-9154: Loading 'oracleafd.ko' driver.\nAFD-649: Verifying AFD devices.\nAFD-9156: Detecting control device '\/dev\/oracleafd\/admin'.\nAFD-638: AFD installation correctness verified.\nModifying resource dependencies - this may take some time.\nASMCMD-9524: AFD configuration failed 'ERROR: OHASD start failed'\nModifying resource dependencies - this may take some time.\nASMCMD-9524: AFD configuration failed 'ERROR: OHASD start failed'<\/pre>\n\n\n\n<p>We can ignore the last error for now but we do have a working ASMFD now.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 ~]# asmcmd afd_state\n\nConnected to an idle instance.\n\n<span style=\"font-weight: bold; color: red;\">ASMCMD-9526: The AFD state is 'LOADED' and filtering is 'DEFAULT' on host 'host01.example.com'<\/span><\/pre>\n\n\n\n<p>Note that the folder for oracleasm has been emptied and ASMFD has created a folder \/dev\/oracleafd where all the ASM disks are visible such that root is the owner of disks and only root can read from or write to ASM disks.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[[root@host01 dev]# cd \/dev\n                                 ls -l |grep oraclea\n\ndrwxrwx--- 3 oracle dba           80 Apr 20 17:22 <span style=\"font-weight: bold; color: red;\">oracleafd<\/span>\ndrwxr-xr-x 2 root   root          40 Apr 20 17:15 oracleasm\n\n[root@host01 oracleasm]# ls -l \/dev\/oracleasm\/*\n\n<span style=\"font-weight: bold; color: red;\">ls: \/dev\/oracleasm\/*: No such file or directory<\/span>\n\n\n[root@host01 dev]# ls -l \/dev\/oracleafd\/disks\ntotal 40\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 10 Apr 20 17:22 ASMDISK01\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 10 Apr 20 17:22 ASMDISK02\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 10 Apr 20 17:22 ASMDISK03\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 10 Apr 20 17:22 ASMDISK04\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK05\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK06\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK07\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK08\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK09\n<span style=\"font-weight: bold; color: red;\">-rw-r--r-- 1 root root<\/span> 11 Apr 20 17:22 ASMDISK10<\/pre>\n\n\n\n<p>The disks can now be viewed from ASM Filter Driver Module.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 oracleasm]# asmcmd afd_lsdsk\nConnected to an idle instance.\n--------------------------------------------------------------------------------\nLabel                     Filtering   Path\n================================================================================\nASMDISK01                   ENABLED   \/dev\/sda6\nASMDISK02                   ENABLED   \/dev\/sda7\nASMDISK03                   ENABLED   \/dev\/sda8\nASMDISK04                   ENABLED   \/dev\/sda9\nASMDISK05                   ENABLED   \/dev\/sda10\nASMDISK06                   ENABLED   \/dev\/sda11\nASMDISK07                   ENABLED   \/dev\/sda12\nASMDISK08                   ENABLED   \/dev\/sda13\nASMDISK09                   ENABLED   \/dev\/sda14\nASMDISK10                   ENABLED   \/dev\/sda15\n<\/pre>\n\n\n\n<p>We can verify that the configuration process has stopped the ASMLIB kernel module<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 dev]# service oracleasm status\n\nChecking if ASM is loaded: <span style=\"font-weight: bold; color: red;\">no<\/span>\nChecking if \/dev\/oracleasm is mounted: <span style=\"font-weight: bold; color: red;\">no<\/span><\/pre>\n\n\n\n<p>We are almost done with the migration as ASMFD is loaded and the existing disks are already mapped. Once we start the Clusterware stack, we will update few configuration settings to make ASMFD persistent.<br><a name=\"five\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-start-clusterware-stack\">Start Clusterware stack<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 disks]# crsctl start has\nCRS-4123: Oracle High Availability Services has been started.<\/pre>\n\n\n\n<p>We can verify that driver for ASMFD has been loaded.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">root@host01 oracleasm]# lsmod | grep oracle\n\n<span style=\"font-weight: bold; color: red;\">oracleafd<\/span>             221120  1\n\nroot@host01 dev]# srvctl start asm\n<\/pre>\n\n\n\n<p><a name=\"six\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-that-asmfd-has-been-successfully-configured-and-asm-disks-have-been-migrated\">Verify that ASMFD has been successfully configured and ASM disks have been migrated<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">ASM&gt; SELECT SYS_CONTEXT('SYS_ASMFD_PROPERTIES', 'AFD_STATE') FROM DUAL;\n\nSYS_CONTEXT('SYS_ASMFD_PROPERTIES','AFD_STATE')\n----------------------------------------------------------------------------------------------------------- \n <span style=\"font-weight: bold; color: red;\">CONFIGURED<\/span>\n\n\nASM&gt;  select name, path, total_mb, free_mb from v$asm_disk;\n \n\nNAME                  PATH                     TOTAL_MB   FREE_MB\n---------------         --------------------                ----------       ----------\n                            AFD:ASMDISK09                    0            0\n                            AFD:ASMDISK08                    0            0\n                            AFD:ASMDISK05                    0            0\n                            AFD:ASMDISK07                    0            0\n                            AFD:ASMDISK06                    0            0\nASMDISK01       AFD:ASMDISK01              3914       3865\nASMDISK02       AFD:ASMDISK02              3914       3862\nASMDISK03       AFD:ASMDISK03              3914       3867\nASMDISK04       AFD:ASMDISK04              3914       3871\nASMDISK10       AFD:ASMDISK10              3914       3761\n<\/pre>\n\n\n\n<p><a name=\"seven\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-set-asm-diskstring-and-afd-diskstring-to-afd\">Set ASM_DISKSTRING and AFD_DISKSTRING to \u2018AFD:*\u2019<\/h3>\n\n\n\n<p>Currently, parameter ASM_DISKSTRING points to both ASMLIB and ASMFD disks. Since ASMLIB has been deconfigured, we can remove ORCL:* from the parameter so that the parameter points to ASMFD disks only.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ASMFD disks only. \nASM&gt;sho parameter diskstring\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nasm_diskstring                       string      <span style=\"font-weight: bold; color: red;\">ORCL:*, AFD:*<\/span>\n\n[oracle@host01 ~]$ asmcmd dsget\n\n<span style=\"font-weight: bold; color: red;\">parameter:ORCL:*, AFD:*<\/span>\nprofile:ORCL:*,AFD:*\n\nASM&gt;ALTER SYSTEM set asm_diskstring = 'AFD:*';\n\n[oracle@host01 ~]$ asmcmd dsget\n\n<span style=\"font-weight: bold; color: red;\">parameter:AFD:*<\/span>\nprofile:AFD:*\n<\/pre>\n\n\n\n<p>We can also set discovery string for ASMFD disks to \u2018AFD:*\u2019<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ASM&gt;ALTER SYSTEM AFD_DISKSTRING SET 'AFD:*';\n\n[oracle@host01 ~]$ asmcmd afd_dsget\n\nAFD discovery string: <span style=\"font-weight: bold; color: red;\">'AFD:*'<\/span>\n\nASM&gt;SELECT SYS_CONTEXT('SYS_ASMFD_PROPERTIES', 'AFD_DISKSTRING') FROM DUAL;\n\nSYS_CONTEXT('SYS_ASMFD_PROPERTIES','AFD_DISKSTRING')\n----------------------------------------------------------------------------------------------------------- \n\n<span style=\"font-weight: bold; color: red;\">'AFD:*'<\/span>\n\n[oracle@host01 ~]$  srvctl config asm\n\nASM home: \nPassword file: +DATA\/orapwasm\nASM listener: LISTENER\nSpfile: +DATA\/ASM\/ASMPARAMETERFILE\/registry.253.872686839\n<span style=\"font-weight: bold; color: red;\">ASM diskgroup discovery string: AFD:*<\/span>\n<\/pre>\n\n\n\n<p><a name=\"eight\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-validate-that-asm-diskgroups-have-migrated-and-are-using-asmfd\">Validate that ASM Diskgroups have migrated and are using ASMFD<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 ~]$ srvctl status diskgroup -diskgroup DATA\n<span style=\"font-weight: bold; color: red;\">Disk Group DATA is running on host01<\/span>\n\n[oracle@host01 ~]$ srvctl status diskgroup -diskgroup TEST\n<span style=\"font-weight: bold; color: red;\">Disk Group TEST is running on host01<\/span>\n<\/pre>\n\n\n\n<p>Validate if the diskgroups are migrated and using ASMFD<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 ~]$ asmcmd lsdsk -G DATA\n\nPath\nAFD:ASMDISK01\nAFD:ASMDISK02\nAFD:ASMDISK03\nAFD:ASMDISK04\n\n[oracle@host01 ~]$ asmcmd lsdsk -G TEST\n\nPath\nAFD:ASMDISK10\n\nroot@host01 disks]#  crsctl stat res -t\n\n--------------------------------------------------------------------------------\nName           Target  State        Server                   State details       \n--------------------------------------------------------------------------------\nLocal Resources\n--------------------------------------------------------------------------------\n<span style=\"font-weight: bold; color: red;\">ora.DATA.dg<\/span>\n               <span style=\"font-weight: bold; color: red;\">ONLINE  ONLINE<\/span>       <span style=\"font-weight: bold; color: red;\">host01<\/span>                   <span style=\"font-weight: bold; color: red;\">STABLE<\/span>\nora.LISTENER.lsnr\n               ONLINE  ONLINE       host01                   STABLE\n<span style=\"font-weight: bold; color: red;\">ora.TEST.dg<\/span>\n               <span style=\"font-weight: bold; color: red;\">OFFLINE OFFLINE<\/span>      <span style=\"font-weight: bold; color: red;\">host01<\/span>                   <span style=\"font-weight: bold; color: red;\">STABLE<\/span>\nora.asm\n               ONLINE  ONLINE       host01                   Started,STABLE\nora.ons\n               OFFLINE OFFLINE      host01                   STABLE\n--------------------------------------------------------------------------------\nCluster Resources\n--------------------------------------------------------------------------------\nora.cssd\n      1        ONLINE  ONLINE       host01                   STABLE\nora.diskmon\n      1        OFFLINE OFFLINE                               STABLE\nora.evmd\n      1        ONLINE  ONLINE       host01                   STABLE\n-------------------------------------------------------------------------------\n\n\n\n[oracle@host01 ~]$ asmcmd afd_scan\n[oracle@host01 ~]$ asmcmd afd_lsdsk\n--------------------------------------------------------------------------------\nLabel                     Filtering   Path\n================================================================================\nASMDISK01                   ENABLED   \/dev\/sda6\nASMDISK02                   ENABLED   \/dev\/sda7\nASMDISK03                   ENABLED   \/dev\/sda8\nASMDISK04                   ENABLED   \/dev\/sda9\nASMDISK05                   ENABLED   \/dev\/sda10\nASMDISK06                   ENABLED   \/dev\/sda11\nASMDISK07                   ENABLED   \/dev\/sda12\nASMDISK08                   ENABLED   \/dev\/sda13\nASMDISK09                   ENABLED   \/dev\/sda14\nASMDISK10                   ENABLED   \/dev\/sda15\n<\/pre>\n\n\n\n<p><a name=\"nine\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-that-our-data-is-intact-after-migration\">Verify that our data is intact after migration<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">ORCL&gt;   select tablespace_name, file_name from dba_data_files where tablespace_name = 'ASMTBS' ;\n\nTABLESPACE_NAME                FILE_NAME\n------------------------------ ------------------------------\nASMTBS                         +TEST\/ORCL\/DATAFILE\/asmtbs.256.877540769\n\nORCL&gt;  select count(*) from hr.asm_tab where last_name = 'King';\n\n  COUNT(*)\n----------\n         2\n<\/pre>\n\n\n\n<p>Let\u2019s explore the disks located under \/dev\/oracleafd\/disks\/ .<\/p>\n\n\n\n<p>These are actually just the text files owned by root pointing to the actual disks on which the ASM disks are configured as opposed to ASMLIB disks which were block devices owned by GI owner.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[root@host01 disks]# file \/dev\/oracleafd\/disks\/ASM*\n\n\/dev\/oracleafd\/disks\/ASMDISK01: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK02: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK03: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK04: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK05: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK06: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK07: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK08: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\/dev\/oracleafd\/disks\/ASMDISK09: <span style=\"font-weight: bold; color: red;\">ASCII text<\/span>\n\n[root@host01 disks]# ls -l \/dev\/oracleafd\/disks\/ASM*\ntotal 40\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 10 Apr 20 17:22 ASMDISK01\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 10 Apr 20 17:22 ASMDISK02\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 10 Apr 20 17:22 ASMDISK03\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 10 Apr 20 17:22 ASMDISK04\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK05\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK06\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK07\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK08\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK09\n-rw-r--r-- 1 <span style=\"font-weight: bold; color: red;\">root root<\/span> 11 Apr 20 17:22 ASMDISK10\n\n[root@host01 disks]# cat \/dev\/oracleafd\/disks\/ASM*\n\n\/dev\/sda6\n\/dev\/sda7\n\/dev\/sda8\n\/dev\/sda9\n\/dev\/sda10\n\/dev\/sda11\n\/dev\/sda12\n\/dev\/sda13\n\/dev\/sda14\n\/dev\/sda15\n\n\n[root@host01 log]# ls -l \/dev\/sda*\n\nbrw-r----- 1 root disk 8,  0 Apr 20 17:14 \/dev\/sda\nbrw-r----- 1 root disk 8,  1 Apr 20 17:14 \/dev\/sda1\nbrw-r----- 1 root disk 8, 10 Apr 20 17:14 \/dev\/sda10\nbrw-r----- 1 root disk 8, 11 Apr 20 17:14 \/dev\/sda11\nbrw-r----- 1 root disk 8, 12 Apr 20 17:14 \/dev\/sda12\nbrw-r----- 1 root disk 8, 13 Apr 20 17:14 \/dev\/sda13\nbrw-r----- 1 root disk 8, 14 Apr 20 17:14 \/dev\/sda14\nbrw-r----- 1 root disk 8, 15 Apr 27 11:23 \/dev\/sda15\nbrw-r----- 1 root disk 8,  2 Apr 20 17:14 \/dev\/sda2\nbrw-r----- 1 root disk 8,  3 Apr 20 17:14 \/dev\/sda3\nbrw-r----- 1 root disk 8,  4 Apr 20 17:14 \/dev\/sda4\nbrw-r----- 1 root disk 8,  5 Apr 20 17:14 \/dev\/sda5\nbrw-r----- 1 root disk 8,  6 Apr 27 10:52 \/dev\/sda6\nbrw-r----- 1 root disk 8,  7 Apr 20 17:14 \/dev\/sda7\nbrw-r----- 1 root disk 8,  8 Apr 20 17:14 \/dev\/sda8\nbrw-r----- 1 root disk 8,  9 Apr 20 17:14 \/dev\/sda9\n<\/pre>\n\n\n\n<p><a name=\"ten\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verify-that-when-filter-is-enabled-it-does-not-allow-os-commands-to-alter-the-contents-of-asm-disks\">Verify that when filter is enabled it does not allow OS commands to alter the contents of ASM disks<\/h3>\n\n\n\n<p>We can check that filtering is enabled on AFD disks.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 ~]$ asmcmd afd_scan\n[oracle@host01 ~]$ asmcmd afd_lsdsk\n--------------------------------------------------------------------------------\nLabel                     Filtering   Path\n================================================================================\nASMDISK01                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda6\nASMDISK02                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda7\nASMDISK03                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda8\nASMDISK04                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda9\nASMDISK05                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda10\nASMDISK06                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda11\nASMDISK07                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda12\nASMDISK08                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda13\nASMDISK09                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda14\nASMDISK10                   <span style=\"font-weight: bold; color: red;\">ENABLED<\/span>   \/dev\/sda15\n<\/pre>\n\n\n\n<p>Now non-root users have no way to read directly from ASM disks using OS command \u201cstrings\u201d. Root user can still read the content of ASM disks cirectly.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[<span style=\"font-weight: bold; color: red;\">oracle<\/span>@host01 disks]$ strings \/dev\/sda15  | grep King\n\n<span style=\"font-weight: bold; color: red;\">strings: \/dev\/sda15: Permission denied<\/span>\n\n[<span style=\"font-weight: bold; color: red;\">root<\/span>@host01 log]# strings \/dev\/sda15  | grep King\n\n<span style=\"font-weight: bold; color: red;\">King<\/span>\n<span style=\"font-weight: bold; color: red;\">King<\/span>\n<\/pre>\n\n\n\n<p>For ASM disk writes, we get a layer of protection for both root and non-root users. I will demonstrate it for both \u201c<strong>echo<\/strong>\u201d and \u201c<strong>dd<\/strong>\u201d commands.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[<span style=\"font-weight: bold; color: red;\">oracle<\/span>@host01 disks]$ echo 'corrupt' &gt; \/dev\/sda15\n\n<span style=\"font-weight: bold; color: red;\">bash: \/dev\/sda15: Permission denied<\/span><\/pre>\n\n\n\n<p>When we try to write to underlying disk using \u201c<strong>echo<\/strong>\u201d as a root user, although the echo command is successful, the I\/O were rejected by ASMFD which can be confirmed by looking into \/var\/log\/messages.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[<span style=\"font-weight: bold; color: red;\">root<\/span>@host01 log]# echo 'corrupt' &gt; \/dev\/sda15\n\n[root@host01 log]# more \/var\/log\/messages\n\n....\n\nquest_fn: <span style=\"font-weight: bold; color: red;\">write IO on ASM managed device (major=8\/minor=15)  not supported i<\/span>=10 \nstart=186868143 seccnt=4   \n\npstart=186868143  pend=194884515\nApr 27 11:28:51 host01 kernel: Buffer I\/O error on device sda15, logical block 0\n\nApr 27 11:28:51 host01 kernel: <span style=\"font-weight: bold; color: red;\">lost page write due to I\/O error on sda15<\/span>\n....\n<\/pre>\n\n\n\n<p>Similarly when we try to modify contents of ASM disk using \u2018<strong>dd<\/strong>\u2018 command, GI owner is denied permission where command succeeds for root without any effect though as can again be verified from \/var\/log\/messages.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[<span style=\"font-weight: bold; color: red;\">oracle<\/span>@host01 disks]$ dd if=\/dev\/zero of=\/dev\/sda6 count=100 bs=2M\n <span style=\"font-weight: bold; color: red;\">dd: opening `\/dev\/sda6': Permission denied<\/span>\n[<span style=\"font-weight: bold; color: red;\">root<\/span>@host01 log]# dd if=\/dev\/zero of=\/dev\/sda15 count=10 bs=2M\n10+0 records in\n10+0 records out\n<span style=\"font-weight: bold; color: red;\">20971520 bytes (21 MB) copied, 0.013702 seconds, 1.5 GB\/s<\/span>\n[root@host01 log]# more \/var\/log\/messages\n...\nApr 27 11:34:06 host01 kernel: F 4306319.693\/150427060406 pdflush[363]  afd_mkrequest_fn: <span style=\"font-weight: bold; color: red;\">write IO on ASM managed device (major=8\/minor=15)  not supported<\/span> i=10 start=186868143 seccnt=4  pstart=186868143   pend=194884515<\/pre>\n\n\n\n<p>Let us disable filter for all disks<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[oracle@host01 root]$ asmcmd afd_filter -d\n[oracle@host01 root]$ asmcmd afd_lsdsk\n--------------------------------------------------------------------------------\nLabel                     Filtering   Path\n================================================================================\nASMDISK01                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda6\nASMDISK02                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda7\nASMDISK03                 <span style=\"font-weight: bold; color: red;\"> DISABLED<\/span>   \/dev\/sda8\nASMDISK04                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda9\nASMDISK05                 <span style=\"font-weight: bold; color: red;\"> DISABLED<\/span>   \/dev\/sda10\nASMDISK06                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda11\nASMDISK07                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda12\nASMDISK08                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda13\nASMDISK09                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda14\nASMDISK10                  <span style=\"font-weight: bold; color: red;\">DISABLED<\/span>   \/dev\/sda15\n<\/pre>\n\n\n\n<p>Now that filter is disabled, let us try to perform write I\/O on ASMDISK10.<\/p>\n\n\n\n<p>It can be seen although non-root user can still not write to ASM disk but root user can alter the contents of ASM Disks leading to corruption of Data in the ASM Disks and ASM disks themselves.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[<span style=\"font-weight: bold; color: red;\">oracle<\/span>@host01 disks]$ echo 'corrupt' &gt; \/dev\/sda15\n\n<span style=\"font-weight: bold; color: red;\">bash: \/dev\/sda15: Permission denied<\/span>\n\n[<span style=\"font-weight: bold; color: red;\">root<\/span>@host01 log]# echo 'corrupt' &gt; \/dev\/sda15\n\n[root@host01 ~]# strings \/dev\/sda15  | grep corrupt\n\n<span style=\"font-weight: bold; color: red;\">corrupt<\/span>\n\n[<span style=\"font-weight: bold; color: red;\">oracle<\/span>@host01 disks]$ dd if=\/dev\/zero of=\/dev\/sda15 count=100 bs=2M\n\n <span style=\"font-weight: bold; color: red;\">dd: opening `\/dev\/sda6': Permission denied<\/span>\n \n[<span style=\"font-weight: bold; color: red;\">root<\/span>@host01 ~]# dd if=\/dev\/zero of=\/dev\/sda15 count=1000 bs=2M\n1000+0 records in\n1000+0 records out\n<span style=\"font-weight: bold; color: red;\">2097152000 bytes (2.1 GB) copied, 4.38152 seconds, 479 MB\/s<\/span>\n\nORCL&gt;alter system flush buffer_cache;\n\nSystem altered.\n\nORCL&gt;select count(*) from hr.asm_tab where last_name = 'King';\n\nselect count(*) from hr.asm_tab where last_name = 'King'\n       *\nERROR at line 1:\n<span style=\"font-weight: bold; color: red;\">ORA-01578: ORACLE data block corrupted (file # 2, block # 130)<\/span>\n<span style=\"font-weight: bold; color: red;\">ORA-01110: data file 2: '+TEST\/ORCL\/DATAFILE\/asmtbs.256.877540769'<\/span>\nASM&gt;select name, STATE from v$asm_diskgroup;\n\nNAME                           STATE\n------------------------------ -----------\nDATA                           MOUNTED\n\nASM&gt;alter diskgroup test mount;\nalter diskgroup test mount\n*\nERROR at line 1:\nORA-15032: not all alterations performed\n<span style=\"font-weight: bold; color: red;\">ORA-15017: diskgroup \"TEST\" cannot be mounted<\/span>\nORA-15040: diskgroup is incomplete\n\nASM&gt; select name, path, total_mb, free_mb from v$asm_disk; \n\nNAME            PATH                   TOTAL_MB    FREE_MB\n--------------- -------------------- ---------- ----------\n                <span style=\"font-weight: bold; color: red;\">AFD:ASMDISK10                 0          0<\/span>\n                AFD:ASMDISK09                 0          0\n                AFD:ASMDISK08                 0          0\n                AFD:ASMDISK05                 0          0\n                AFD:ASMDISK07                 0          0\n                AFD:ASMDISK06                 0          0\nASMDISK01       AFD:ASMDISK01              3914       3865\nASMDISK02       AFD:ASMDISK02              3914       3862\nASMDISK03       AFD:ASMDISK03              3914       3867\nASMDISK04       AFD:ASMDISK04              3914       3871\n\n10 rows selected.\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion:<\/h2>\n\n\n\n<p>Oracle Automatic Storage Management Filter Driver (Oracle ASMFD) can overcome the limitations of and replace traditional ASMLIB. When filter is enabled,<\/p>\n\n\n\n<p>\u2013 Contents of ASMFD disks can only be read using OS commands by root user<\/p>\n\n\n\n<p>\u2013 Contents of ASMFD disks cannot be altered using OS commands by any user<\/p>\n\n\n\n<p>Thus, any write I\/O performed to ASM disks by will be validated by the filter and corruption of data on ASM disks by non-oracle software will be eliminated.<br><\/p>\n\n\n\n<div id=\"callout-block_4ba40aa357cdf7c82fd63ee566817ed0\" class=\"callout alignnone\">\n    <div class=\"child-last:mb-0 child-first:mt-0 bg-gray-50 dark:bg-gray-950 p-4xl my-3xl\">\n\n<p><strong>You may also be interested in:<\/strong><br><a href=\"https:\/\/www.red-gate.com\/simple-talk\/databases\/oracle-databases\/convert-single-instance-to-rac-part-1-duplicate-db-using-rman\/\">Converting Oracle single instance to RAC where ASM storage configuration is required<\/a><\/p>\n\n<\/div>\n<\/div> \n\n\n<p><strong>References:<\/strong><\/p>\n\n\n<div class=\"block-core-list\">\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.oracle.com\/database\/121\/LADBI\/oraclerestart.htm#LADBI8076\">https:\/\/docs.oracle.com\/database\/121\/LADBI\/oraclerestart.htm#LADBI8076<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/docs.oracle.com\/cd\/E55747_01\/doc.41\/e58244\/GUID-3CFAEE85-7F6A-4B0A-91C8-E6A2CA221663.htm#DMRIG149\">http:\/\/docs.oracle.com\/cd\/E55747_01\/doc.41\/e58244\/GUID-3CFAEE85-7F6A-4B0A-91C8-E6A2CA221663.htm#DMRIG149<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/flashdba.com\/2014\/07\/25\/oracle-12-1-0-2-asm-filter-driver-first-impressions\/\">http:\/\/flashdba.com\/2014\/07\/25\/oracle-12-1-0-2-asm-filter-driver-first-impressions\/<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.oraclebuffer.com\/general-discussions\/an-encounter-with-asm-filter-driver-asmfd-oracle-gi-12c-new-feature\/\">http:\/\/www.oraclebuffer.com\/general-discussions\/an-encounter-with-asm-filter-driver-asmfd-oracle-gi-12c-new-feature\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/rmchandran.wordpress.com\/2014\/12\/30\/first-look-at-asm-filter-driver-asmfd\/\">https:\/\/rmchandran.wordpress.com\/2014\/12\/30\/first-look-at-asm-filter-driver-asmfd\/<\/a><\/li>\n<\/ul>\n<\/div>\n\n\n<section id=\"faq\" class=\"faq-block my-5xl\">\n    <h2>FAQs: Oracle Automatic Storage Management Filter Driver (Oracle ASMFD)<\/h2>\n\n                        <h3 class=\"mt-4xl\">1. What is Oracle ASMFD and how is it different from ASMLIB?<\/h3>\n            <div class=\"faq-answer\">\n                <p>Oracle ASMFD (ASM Filter Driver) is a kernel module that sits between Oracle ASM and the operating system&#8217;s storage drivers, filtering out non-Oracle writes to ASM disk devices. ASMLIB (ASM Library) was the previous library-based approach for the same purpose &#8211; providing ASM disk discovery and protection. ASMFD replaces ASMLIB from Oracle Grid Infrastructure 12.1.0.2 onwards. Key differences: ASMFD is integrated with Oracle Grid Infrastructure (no separate ASMLIB RPM required), provides kernel-level filtering that ASMLIB does not, and supports AFD disk naming (AFD:diskname) for disk discovery.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">2. Is migration from ASMLIB to ASMFD required in Oracle 12.1.0.2+?<\/h3>\n            <div class=\"faq-answer\">\n                <p>ASMLIB continues to work in Oracle 12.1.0.2+ &#8211; migration to ASMFD is not mandatory but is recommended for new installations. Oracle recommends ASMFD for new deployments, and some Oracle Engineered Systems require it. Migration is advisable when upgrading Grid Infrastructure versions as ASMLIB support may be deprecated in future releases. The migration requires a cluster stack downtime but is non-destructive to the ASM disk data.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">3. What does the AFD disk naming convention mean in Oracle ASMFD?<\/h3>\n            <div class=\"faq-answer\">\n                <p>When ASMFD is configured, Oracle ASM disk devices are named with the AFD: prefix &#8211; for example, AFD:DATA_0001. This replaces the ORCL: prefix used by ASMLIB. The ASM_DISKSTRING parameter must be updated to &#8216;AFD:*&#8217; to discover ASMFD disks, and AFD_DISKSTRING must also be set. The AFD: names appear in v$asm_disk and v$asm_diskgroup views after successful migration. Old ORCL: names in ASM_DISKSTRING should be removed after confirming all disks have migrated.<\/p>\n            <\/div>\n                    <h3 class=\"mt-4xl\">4. Can I roll back from ASMFD to ASMLIB?<\/h3>\n            <div class=\"faq-answer\">\n                <p>Rolling back from ASMFD to ASMLIB is possible but complex &#8211; it requires bringing down the cluster stack, deconfiguring ASMFD, reconfiguring ASMLIB, updating the disk discovery parameters back to ORCL:*, and restarting the cluster. The ASM disk data itself is not modified during either migration direction, so the data is safe. However, a rollback should only be considered in a test environment or as an emergency measure &#8211; plan the migration thoroughly and test it in a non-production environment before applying to production.<\/p>\n            <\/div>\n            <\/section>\n","protected":false},"excerpt":{"rendered":"<p>Migrate Oracle ASM storage from ASMLIB to Oracle ASMFD (ASM Filter Driver) in Oracle 12.1.0.2+. Complete step-by-step: verify ASMLIB, label disks, deconfigure ASMLIB, configure ASMFD, and validate the migrated disk groups.&hellip;<\/p>\n","protected":false},"author":316217,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143533],"tags":[],"coauthors":[48555],"class_list":["post-73164","post","type-post","status-publish","format-standard","hentry","category-oracle-databases"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/73164","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/316217"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=73164"}],"version-history":[{"count":8,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/73164\/revisions"}],"predecessor-version":[{"id":110869,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/73164\/revisions\/110869"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=73164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=73164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=73164"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=73164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}