LogiUpSkill

Oracle ASM Disk Creation and Management Guide

Oracle ASM Disk Creation and Management Guide

Complete Guide to Creating and Managing Disks in ASM

Technical Documentation | Oracle Database Storage Administration

1. ASM Overview

Oracle Automatic Storage Management (ASM) is an integrated, high-performance database file system and disk manager built into Oracle Database. ASM simplifies database storage administration by providing a vertical integration of the file system and volume manager specifically designed for Oracle Database files.

What is ASM?

  • Volume Manager: Manages physical disks and provides logical volumes
  • File System: Provides a cluster-aware file system for Oracle database files
  • Storage Virtualization: Abstracts physical storage into logical disk groups
  • Automatic Rebalancing: Distributes data evenly across available disks
  • Redundancy Options: Supports normal, high, and external redundancy levels

Key Concepts

Component Description Purpose
ASM Disk Physical disk or disk partition managed by ASM Basic storage unit
Disk Group Logical collection of ASM disks Storage pool for database files
Failure Group Set of disks that share a common resource Redundancy and availability
ASM Instance Special Oracle instance for managing ASM storage Storage management and metadata

2. Prerequisites and Planning

System Requirements

  • Oracle Grid Infrastructure installed and configured
  • ASM instance running (+ASM)
  • Raw devices, block devices, or NFS volumes available
  • Appropriate permissions (root for disk preparation, grid for ASM operations)
  • ASMLib or UDEV configured (for Linux environments)

Planning Considerations

  • Disk Size: Plan for current and future storage needs
  • Redundancy Level: Choose between External, Normal, or High redundancy
  • Performance: Consider I/O patterns and throughput requirements
  • Failure Groups: Design for hardware failure isolation
  • Disk Group Strategy: Separate DATA, FRA, and REDO disk groups

Redundancy Levels Explained

Redundancy Mirroring Min Disks Usable Space Use Case
External None (RAID/SAN handles it) 1 100% Hardware RAID arrays
Normal 2-way mirroring 2 50% Standard production (recommended)
High 3-way mirroring 3 33% Mission-critical systems

3. Disk Discovery

Check Available Disks

# List all block devices
lsblk

# List all SCSI devices
lsscsi

# Check disk details
fdisk -l

# View disk partitions
cat /proc/partitions

# Check for existing ASM disks
ls -l /dev/oracleasm/disks/

# Check disk usage
df -h

            
Sample Output:
[root@server ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   49G  0 part /
sdb      8:16   0  100G  0 disk
sdc      8:32   0  100G  0 disk
sdd      8:48   0  100G  0 disk
           

Verify Disk Availability

# Check if disks are already in use
pvdisplay /dev/sdb
pvdisplay /dev/sdc
pvdisplay /dev/sdd

# Expected output for unused disks: "Failed to find physical volume"

# Check for existing partitions
parted /dev/sdb print
parted /dev/sdc print
parted /dev/sdd print

4. Disk Preparation

Create Partitions (If Needed)

Warning: Partitioning will destroy all data on the disk. Ensure backups are complete before proceeding.
# Interactive partitioning with fdisk
fdisk /dev/sdb

# Commands within fdisk:
# n - Create new partition
# p - Primary partition
# 1 - Partition number
# [Enter] - Accept default first sector
# [Enter] - Accept default last sector (use entire disk)
# w - Write changes and exit

# Repeat for other disks
fdisk /dev/sdc
fdisk /dev/sdd

Set Partition Type

# Within fdisk, set partition type for ASM
# t - Change partition type
# 1 - Partition number
# 8e - Linux LVM type (or fd for Linux RAID)

# Verify partition table
fdisk -l /dev/sdb
fdisk -l /dev/sdc
fdisk -l /dev/sdd

Configure Disk Permissions

# Set ownership to grid user (ASM owner)
chown grid:asmadmin /dev/sdb1
chown grid:asmadmin /dev/sdc1
chown grid:asmadmin /dev/sdd1

# Set appropriate permissions
chmod 660 /dev/sdb1
chmod 660 /dev/sdc1
chmod 660 /dev/sdd1

# Verify permissions
ls -l /dev/sd[bcd]1

5. Creating ASM Disks

Method 1: Using ASMLib (Recommended for Linux)

Configure ASMLib

# Initialize ASMLib (run once)
oracleasm configure -i

# Sample configuration:
# Default user to own the driver interface []: grid
# Default group to own the driver interface []: asmadmin
# Start Oracle ASM library driver on boot (y/n) [n]: y
# Scan for Oracle ASM disks on boot (y/n) [y]: y

# Load ASMLib module
oracleasm init

# Check ASMLib status
oracleasm status

Create ASM Disks

# Create ASM disk for DATA diskgroup
oracleasm createdisk DATA01 /dev/sdb1

# Create ASM disk for DATA diskgroup (additional)
oracleasm createdisk DATA02 /dev/sdc1

# Create ASM disk for FRA diskgroup
oracleasm createdisk FRA01 /dev/sdd1

# List all ASM disks
oracleasm listdisks

# Scan for ASM disks
oracleasm scandisks

# Query disk details
oracleasm querydisk -d DATA01
oracleasm querydisk -d DATA02
oracleasm querydisk -d FRA01

Sample Output:
[root@server ~]# oracleasm listdisks
DATA01
DATA02
FRA01

[root@server ~]# oracleasm querydisk -d DATA01
Disk "DATA01" is a valid ASM disk
          

Method 2: Using UDEV Rules

# Create UDEV rules file
vi /etc/udev/rules.d/99-oracle-asmdevices.rules

# Add rules for each disk
KERNEL=="sdb1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sdc1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sdd1", OWNER="grid", GROUP="asmadmin", MODE="0660"

# Reload UDEV rules
udevadm control --reload-rules
udevadm trigger

# Verify permissions persist after reboot
ls -l /dev/sd[bcd]1

Set ASM Disk Discovery Path

# Connect as grid user
su - grid

# Set ASM_DISKSTRING parameter
sqlplus / as sysasm

SQL> ALTER SYSTEM SET ASM_DISKSTRING = '/dev/oracleasm/disks/*' SCOPE=BOTH;
Alternative Discovery Paths:
  • ASMLib: /dev/oracleasm/disks/*
  • Raw devices: /dev/raw/*
  • Block devices: /dev/sd*
  • Multipath: /dev/mapper/*
  • NFS: /nfs_mount_point/*

6. Adding Disks to Diskgroups

Connect to ASM Instance

# Switch to grid user
su - grid

# Set ASM environment
export ORACLE_SID=+ASM
export ORACLE_HOME=/u01/app/19.0.0/grid

# Connect to ASM instance
sqlplus / as sysasm

# Or use asmcmd
asmcmd

Check Existing Diskgroups

SQL> SELECT name, state, type, total_mb, free_mb
FROM v$asm_diskgroup;

NAME        STATE    TYPE      TOTAL_MB    FREE_MB
----------- -------- --------- ----------- ----------
DATA        MOUNTED  NORMAL    204800      150000
FRA         MOUNTED  NORMAL    102400      80000

Create New Diskgroup

-- Create DATA diskgroup with Normal redundancy
CREATE DISKGROUP data NORMAL REDUNDANCY
    FAILGROUP fg1 DISK '/dev/oracleasm/disks/DATA01'
    FAILGROUP fg2 DISK '/dev/oracleasm/disks/DATA02'
    ATTRIBUTE 'compatible.asm' = '19.0',
              'compatible.rdbms' = '19.0',
              'au_size' = '4M';

-- Create FRA diskgroup with External redundancy
CREATE DISKGROUP fra EXTERNAL REDUNDANCY
    DISK '/dev/oracleasm/disks/FRA01'
    ATTRIBUTE 'compatible.asm' = '19.0',
              'compatible.rdbms' = '19.0',
              'au_size' = '4M';

Add Disk to Existing Diskgroup

-- Add disk to DATA diskgroup
ALTER DISKGROUP data ADD DISK '/dev/oracleasm/disks/DATA03';

-- Add disk with specific name
ALTER DISKGROUP data ADD DISK '/dev/oracleasm/disks/DATA04' NAME data_0004;

-- Add disk to specific failure group
ALTER DISKGROUP data ADD FAILGROUP fg3
    DISK '/dev/oracleasm/disks/DATA05';

-- Add multiple disks
ALTER DISKGROUP data ADD DISK
    '/dev/oracleasm/disks/DATA06',
    '/dev/oracleasm/disks/DATA07',
    '/dev/oracleasm/disks/DATA08';

Monitor Rebalance Operation

-- Check rebalance status
SELECT group_number, operation, state, power, actual, sofar, est_work, est_rate, est_minutes
FROM v$asm_operation;

-- View rebalance progress
SELECT name, total_mb, free_mb,
       ROUND((free_mb/total_mb)*100, 2) AS pct_free
FROM v$asm_diskgroup;

-- Monitor using asmcmd
asmcmd rebal

7. Verification Steps

Verify ASM Disks

-- Check all ASM disks
SELECT path, name, mount_status, state, total_mb, free_mb
FROM v$asm_disk
ORDER BY path;

-- Check disk allocation
SELECT
    d.name AS diskgroup_name,
    d.group_number,
    d.path,
    d.name AS disk_name,
    d.mount_status,
    d.state,
    d.total_mb,
    d.free_mb,
    ROUND((d.free_mb/d.total_mb)*100, 2) AS pct_free
FROM v$asm_disk d
ORDER BY diskgroup_name, disk_name;

Sample Output:

DISKGROUP_NAME  PATH                          DISK_NAME  MOUNT_STATUS  STATE   TOTAL_MB  FREE_MB  PCT_FREE
--------------  ----------------------------  ---------  ------------  ------  --------  -------  --------
DATA            /dev/oracleasm/disks/DATA01   DATA_0001  CACHED        NORMAL  102400    75000    73.24
DATA            /dev/oracleasm/disks/DATA02   DATA_0002  CACHED        NORMAL  102400    75000    73.24
FRA             /dev/oracleasm/disks/FRA01    FRA_0001   CACHED        NORMAL  102400    80000    78.13

Verify Diskgroups

-- Check diskgroup details
SELECT
    name,
    state,
    type,
    total_mb,
    free_mb,
    usable_file_mb,
    offline_disks,
    voting_files
FROM v$asm_diskgroup;

-- Check diskgroup attributes
SELECT name, value
FROM v$asm_attribute
WHERE name IN ('compatible.asm', 'compatible.rdbms', 'au_size')
ORDER BY name;

-- Using asmcmd
asmcmd lsdg
asmcmd lsdsk

Check ASM Instance Status

-- Verify ASM instance
SELECT instance_name, status, version
FROM v$instance;

-- Check ASM client connections
SELECT instance_name, db_name, status
FROM v$asm_client;

-- View ASM parameters
SHOW PARAMETER asm_diskstring
SHOW PARAMETER asm_power_limit

Verify from Operating System

# Check ASM process
ps -ef | grep asm_

# Check Oracle processes
ps -ef | grep pmon

# Using asmcmd
asmcmd
ASMCMD> lsdg
ASMCMD> lsdsk -k
ASMCMD> exit

8. Maintenance Operations

Remove Disk from Diskgroup

Warning: Ensure sufficient free space in the diskgroup before removing disks to allow for rebalancing.
-- Drop disk by name
ALTER DISKGROUP data DROP DISK data_0004;

-- Drop disk and wait for completion
ALTER DISKGROUP data DROP DISK data_0004 WAIT;

-- Drop multiple disks
ALTER DISKGROUP data DROP DISK data_0004, data_0005;

Resize Diskgroup

-- Resize disk (if underlying storage expanded)
ALTER DISKGROUP data RESIZE ALL;

-- Resize specific disk
ALTER DISKGROUP data RESIZE DISK data_0001 SIZE 150G;

Mount and Dismount Diskgroups

-- Mount diskgroup
ALTER DISKGROUP data MOUNT;

-- Mount all diskgroups
ALTER DISKGROUP ALL MOUNT;

-- Dismount diskgroup
ALTER DISKGROUP data DISMOUNT;

-- Force dismount
ALTER DISKGROUP data DISMOUNT FORCE;

Check and Repair Diskgroup

-- Check diskgroup for inconsistencies
ALTER DISKGROUP data CHECK ALL;

-- Repair diskgroup
ALTER DISKGROUP data CHECK ALL REPAIR;

Rebalance Diskgroup Manually

-- Rebalance with default power
ALTER DISKGROUP data REBALANCE;

-- Rebalance with specific power (1-11, higher = faster)
ALTER DISKGROUP data REBALANCE POWER 8;

-- Rebalance and wait for completion
ALTER DISKGROUP data REBALANCE WAIT;

9. Best Practices

Planning and Design

  • Separate Diskgroups: Use separate diskgroups for DATA, FRA (Fast Recovery Area), and REDO
  • Uniform Disk Sizes: Use disks of similar size and performance characteristics within a diskgroup
  • Failure Groups: Design failure groups to align with physical failure domains (separate controllers, enclosures)
  • Allocation Unit Size: Use 4MB AU size for most workloads, 1MB for OLTP with small I/Os
  • Capacity Planning: Maintain at least 20% free space for rebalancing operations

Configuration Best Practices

  • ASM_DISKSTRING: Configure specific paths to limit disk discovery scope
  • Compatibility: Set compatible.asm and compatible.rdbms appropriately
  • Redundancy: Use NORMAL redundancy for production databases on non-RAID storage
  • UDEV Rules: Implement persistent device naming for consistent disk access
  • Documentation: Maintain accurate records of disk-to-diskgroup mappings

Operational Guidelines

  • Monitor Space: Set up alerts for diskgroup space usage (threshold: 80%)
  • Rebalance Power: Use lower power during business hours to minimize impact
  • Backup Before Changes: Always backup critical data before disk operations
  • Test in Non-Production: Verify disk addition/removal procedures in test environment first
  • Regular Checks: Perform periodic health checks of ASM disks and diskgroups

Performance Optimization

  • I/O Distribution: Ensure even distribution of I/O across all disks
  • Disk Performance: Use fast disks (SSD/NVMe) for REDO diskgroup
  • Network Latency: Minimize latency for shared storage in RAC environments
  • Multipathing: Configure multipath I/O for redundant storage access paths
  • ASM Power Limit: Adjust asm_power_limit for optimal rebalance performance

Security Considerations

  • File Permissions: Ensure correct ownership (grid:asmadmin) and permissions (660)
  • ASM Password: Set and protect SYSASM password
  • Separation of Duties: Separate ASM administration from database administration
  • Audit Logging: Enable audit trail for ASM administrative operations

Monitoring and Maintenance

Metric Check Frequency Alert Threshold
Diskgroup Space Usage Daily > 80%
Disk Status Hourly Any disk in ERROR state
Rebalance Operations During changes Stuck or slow progress
ASM Instance Status Continuous Instance down
I/O Performance Weekly Degradation > 20%

Common Issues and Solutions

Issue Cause Solution
Disk not discovered Incorrect ASM_DISKSTRING Update ASM_DISKSTRING parameter
Cannot create disk Permission issues Set correct ownership and permissions
Rebalance stuck Insufficient space or I/O issues Add more disks or check disk health
Disk in ERROR state Hardware failure or path issues Check hardware, drop and replace disk
Diskgroup mount failed Insufficient disks or corruption Restore from backup or repair diskgroup

Useful ASM Commands Reference

-- Diskgroup information
SELECT * FROM v$asm_diskgroup;
SELECT * FROM v$asm_disk;
SELECT * FROM v$asm_client;
SELECT * FROM v$asm_operation;

-- Space usage
SELECT name, total_mb, free_mb, usable_file_mb FROM v$asm_diskgroup;

-- Disk details
SELECT path, name, state, total_mb, free_mb FROM v$asm_disk;

-- Rebalance status
SELECT * FROM v$asm_operation WHERE operation = 'REBAL';

-- Using ASMCMD
asmcmd lsdg              # List diskgroups
asmcmd lsdsk             # List disks
asmcmd lsdsk -k          # List disks with discovery path
asmcmd du                # Disk usage
asmcmd rebal             # Monitor rebalance
Quick Reference Checklist:
  • ✓ Identify and verify available disks
  • ✓ Create partitions if needed
  • ✓ Set correct permissions (grid:asmadmin, 660)
  • ✓ Configure ASMLib or UDEV rules
  • ✓ Create ASM disks using oracleasm createdisk
  • ✓ Set ASM_DISKSTRING parameter
  • ✓ Create or add to diskgroup
  • ✓ Monitor rebalance operation
  • ✓ Verify disk and diskgroup status
  • ✓ Document configuration

© 2026 Technical Blog. All rights reserved.

Oracle, ASM, and Grid Infrastructure are trademarks of Oracle Corporation.

Oracle ASM Disk Creation and Management Guide