In production, building an Oracle RAC meant investing in an expensive Fibre Channel or iSCSI SAN (Storage Area Network) with dedicated physical hardware—costing thousands of dollars. For years, the “poor man’s” RAC was to use VMware with the multi-writer flag, Since VMware vSphere/ESXi is no longer truly free (the free version has limited features now), many people are switching to Proxmox for Oracle RAC labs.

For a real poor man, Proxmox is 100% free with no feature restrictions. Like RAC on other platform, the most important obstacle on Proxmox is to provide shared disks for ASM, The best practice for this is using iSCSI, not direct shared VM disks, this can be achieved by a storage VM which run targetcli to provide shared LUNs for ASM. The following diagram illustrate this solution:

IP Address Allocation Table

HostnamePublic IPiSCSI IPPrivate IPVirtual IP (VIP)SCAN IP
AI261203.0.113.86198.51.100.86192.0.2.86203.0.113.28203.0.113.85
AI262203.0.113.87198.51.100.87192.0.2.87203.0.113.29(Shared)
ASM-DISKS203.0.113.88198.51.100.88

Phase 1: Preparing the Storage VM

  1. configuration of storage sever
    We first create a VM on proxmox to provide shared disk via iSCSI, the hardware for this sever is as below:

import things:
there are three disks used for shared ASM disk , set write back
the net1 is used for iSCSI private network , vmbr1, no physical NIC.

Before storage can be exported, the environment needs a solid network foundation. On the Storage VM, we configure a private network for iSCSI .

2. Private Storage Network Setup:

We skip the process of install Oracle Linux 9 on this sever, as this is nothing special. After the OS installation, we configure ens 19 for iSCSI private network as below:

[yuan@localhost ~]$ sudo nmcli connection add type ethernet con-name iscsi-private ifname ens19 ipv4.addresses 198.51.100.88/24 ipv4.method manual
Connection 'iscsi-private' (35c4bcbe-5dc7-4d34-918b-bd1894d2a3f9) successfully added.
[yuan@localhost ~]$ sudo nmcli connection up iscsi-private
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
[yuan@localhost ~]$ nmcli device status
DEVICE TYPE STATE CONNECTION
ens18 ethernet connected ens18
ens19 ethernet connected iscsi-private
lo loopback connected (externally) lo

Phase 2: Configuring the iSCSI Target

Using targetcli, we create the shared block devices. We use “Demo Mode” to bypass complex ACL management, making the lab “workable” for multiple RAC nodes immediately.

1. Creating the Shared LUNs:
We use device IDs, which can be idenfied by in /dev/disk/by-id directory, to configure iSCSC target, we do not use device name (such as: /dev/sda), which can be changed after rebooting.

root@ASM-DISKS ~]# targetcli
/> cd /backstores/block/
/backstores/block> create name=asm_disk1 dev=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1
Created block storage object asm_disk1 using /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1.
/backstores/block> create name=asm_disk2 dev=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2
Created block storage object asm_disk2 using /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi2.
/backstores/block> create name=asm_disk3 dev=/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi3
Created block storage object asm_disk3 using /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi3.
/> /iscsi create iqn.2026-05.com.oracle:storage.target1
Created target iqn.2026-05.com.oracle:storage.target1.
Created TPG 1.
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1/luns create /backstores/block/asm_disk1
Created LUN 0.
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1/luns create /backstores/block/asm_disk2
Created LUN 1.
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1/luns create /backstores/block/asm_disk3
Created LUN 2.
# Enable permissive access for the lab
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1 set attribute generate_node_acls=1 demo_mode_write_protect=0 cache_dynamic_acls=1
Parameter generate_node_acls is now '1'.
Parameter demo_mode_write_protect is now '0'.
Parameter cache_dynamic_acls is now '1'.
# Bind to the Private Storage IP
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1/portals delete 0.0.0.0 3260
/> /iscsi/iqn.2026-05.com.oracle:storage.target1/tpg1/portals create 198.51.100.88 3260
/> saveconfig
/> exit

2. Finalizing Service and Security:
To ensure the disks are reachable and the settings survive a reboot, we disable the firewall and enable the target service.

[root@ASM-DISKS ~]# sudo systemctl stop firewalld
[root@ASM-DISKS ~]# sudo systemctl disable firewalld
[root@ASM-DISKS ~]# sudo systemctl enable target
Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.

Phase 3: Connecting the RAC Node

On the first RAC node (AI26-1), we connect to the storage via the private network.

1. Network and Connectivity Test:

[root@AI26-1 ~]# nmcli connection add type ethernet con-name iscsi-private ifname ens19 ipv4.addresses 198.51.100.86/24 ipv4.method manual
[root@AI26-1 ~]# nmcli connection up iscsi-private
[root@AI26-1 ~]# ping 198.51.100.88
PING 198.51.100.88 (198.51.100.88) 56(84) bytes of data.
64 bytes from 198.51.100.88: icmp_seq=1 ttl=64 time=1.02 ms

2. Discovery and Login:

[root@AI26-1 ~]# iscsiadm -m discovery -t sendtargets -p 198.51.100.88
198.51.100.88:3260,1 iqn.2026-05.com.oracle:storage.target1
[root@AI26-1 ~]# iscsiadm -m node -L all
Login to [iface: default, target: iqn.2026-05.com.oracle:storage.target1, portal: 198.51.100.88,3260] successful.

3. Verifying the Shared Disks:

[root@AI26-1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 149G 0 part
├─ol-root 252:0 0 70G 0 lvm /
├─ol-swap 252:1 0 7.7G 0 lvm [SWAP]
└─ol-home 252:2 0 71.3G 0 lvm /home
sdb 8:16 0 80G 0 disk
sdc 8:32 0 80G 0 disk
sdd 8:48 0 40G 0 disk
sr0 11:0 1 13.5G 0 rom

We have successfully established a highly available, shared block storage layer using Proxmox and native Linux tools.

The remaining steps are same as https://byte-way.com/2026/02/04/step-by-step-installing-oracle-26ai-rac-database-on-linux-using-vmware/

Leave a comment

I’m Yuan

Welcome to the blog of a performance maven in Oracle & MySQL. Feel free to contact me to share and discuss database knowledge.

My 26 Oracle Certifications

A screenshot from certview.oracle.com

My Book

MySQL 8.0 Operations and Optimization

Let’s connect