Como administrador de Linux RedHat, suelo recibir peticiones de los administradores de Oracle para configurar discos con un path y una nomenclatura concreta para su uso en Oracle RAC.
Como sabemos, la ruta por defecto de los discos configurados en multipath es /dev/mapper/Nombre_del_disco:
[root]# ll /dev/mapper |head
total 0
lrwxrwxrwx 1 root root 8 Feb 17 01:32 backup -> ../dm-12
crw-rw---- 1 root root 10, 58 Feb 8 11:14 control
lrwxrwxrwx 1 root root 7 Feb 24 01:30 DG_DWHE_DADES_01 -> ../dm-9
lrwxrwxrwx 1 root root 35 Feb 24 07:57 DG_DWHE_DADES_01p1 -> ../oracleasm/disks/DG_DWHE_DADES_01
lrwxrwxrwx 1 root root 7 Feb 24 01:30 DG_DWHE_DADES_02 -> ../dm-7
lrwxrwxrwx 1 root root 35 Feb 24 07:57 DG_DWHE_DADES_02p1 -> ../oracleasm/disks/DG_DWHE_DADES_02
lrwxrwxrwx 1 root root 7 Feb 24 01:30 DG_DWHE_DADES_03 -> ../dm-8
lrwxrwxrwx 1 root root 35 Feb 24 07:57 DG_DWHE_DADES_03p1 -> ../oracleasm/disks/DG_DWHE_DADES_03
lrwxrwxrwx 1 root root 7 Feb 24 01:30 DG_DWHE_DADES_04 -> ../dm-5
[root]#
Pero el equipo de Oracle RAC siempre nos pide que el acceso a los discos esté en /dev/oracleasm/disks:
[[email protected] disks]# pwd
/dev/oracleasm/disks
[[email protected] disks]# ll |head
total 0
brw-rw---- 1 oracle root 253, 33 Feb 24 08:18 DG_DWHE_DADES_01
brw-rw---- 1 oracle root 253, 32 Feb 24 08:16 DG_DWHE_DADES_02
brw-rw---- 1 oracle root 253, 34 Feb 24 08:15 DG_DWHE_DADES_03
brw-rw---- 1 oracle root 253, 29 Feb 24 08:18 DG_DWHE_DADES_04
brw-rw---- 1 oracle root 253, 40 Feb 24 08:18 DG_DWHE_FRA_01
brw-rw---- 1 oracle root 253, 38 Feb 24 08:16 DG_DWHE_FRA_02
brw-rw---- 1 oracle root 253, 39 Feb 24 08:16 DG_DWHE_FRA_03
brw-rw---- 1 oracle root 253, 31 Feb 24 08:18 DG_E13BDE_DADES_01
brw-rw---- 1 oracle root 253, 30 Feb 24 08:15 DG_E13BDE_DADES_02
[[email protected] disks]#
Para hacer esto, utilizo un script que, básicamente, crea una partición al disco y un enlace simbólico al nuevo nombre. Mejor os dejo el código fuente:
[root]# cat asm.sh
DISK=DG_EXPORT_03
#Particionamos el disco:
(echo o; echo n; echo p; echo 1; echo ; echo; echo w) | fdisk /dev/mapper/$DISK
kpartx -a -v /dev/mapper/$DISK
#Lanzamos lo siguiente
FILTER=DSK
OWNER=oracle
GROUP=asmadmin
DEST="oracleasm/disks"
multipath -ll | grep ${FILTER} | sort > /tmp/udev_asm.txt
cat /tmp/udev_asm.txt | while read disco
do
DISCO=`echo $disco | awk {'print $1'}`
DM=`ls -ln /dev/mapper/${DISCO}p1 | awk {'print "/dev/mapper/"$1'"p1"} | awk -F "/" '{ print $5 }'`
WWID=$(echo $disco | awk -F "(" ' { print $2 } '| awk -F ")" ' { print $1 } ')
echo "KERNEL==\"dm-*\", ENV{DM_UUID}==\"part1-mpath-${WWID}\", NAME+=\"${DEST}/${DISCO}\", OWNER=\"${OWNER}\", GROUP=\"${GROUP}\", MODE=\"0660\""
done
[root]#
Seguidamente, editamos el fichero de reglas de udev para acceder al nuevo disco. Ejemplo:
RedHat 7:
[root]# head -1 /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="dm-*", ENV{DM_UUID}=="part1-mpath-360002ac000000000000000cf0000fa54", NAME+="oracleasm/disks/DG_OCRVOTE_01", OWNER="oracle", GROUP="asmadmin", MODE="0660"
[root]#
RedHat 8:
Cambia la directiva «NAME» por «SYMLINK».
[root]# head -1 /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="dm-*", ENV{DM_UUID}=="part1-mpath-360002ac000000000000000cf0000fa54", SYMLINK+="oracleasm/disks/DG_OCRVOTE_01", OWNER="oracle", GROUP="asmadmin", MODE="0660"
[root]#
Y las aplicamos con los siguientes comandos:
udevadm control --reload-rules
multipath -F
multipath