Objetivo:
Definir discos en un Linux (probado y funcionado en RHEL 5) para Oracle ASM usando Mapper Multipath disks.
#######################RECONOCIMIENTO DE LAS NUEVAS LUNs####################
0- Scanear el nuevo disco:
# echo "- - -" > /sys/class/scsi_host/host3/scan
####################### FDISK - CREAR PARTICIONES ############################
1- FDISK
# for i in $(seq 5 40); do echo fdisk /dev/mapper/mpath$i <fd.in; done;
2- Actualizar la tabla de particiones con kpartx apuntando al disco físico:
# for i in $(seq 5 40); do echo kpartx -av /dev/mapper/mpath$i; done;
3- Recargar la tabla de particiones /proc/partitions
# /sbin/partprobe
####################### ASM CREATE DISK - DATOS & RECO #######################
1 - Listar los discos antes de la asignación:
# oracleasm listdisks
2 - Asignar los discos de forma "progresiva":
2.1 - Los primeros 5 destinados al grupo de datos del ASM:
# for i in $(seq 5 9); do echo oracleasm createdisk ASM_DATOS_00$i /dev/mapper/mpath$i\p1 ; done;
2.2 - Los siguientes 15 destinados al grupo de datos del ASM:
# for i in $(seq 10 25); do echo oracleasm createdisk ASM_DATOS_0$i /dev/mapper/mpath$i\p1 ; done;
2.2 - Los siguientes 9 destinados al grupo de datos del ASM:
# for i in $(seq 31 40); do echo oracleasm createdisk ASM_DATOS_0$i /dev/mapper/mpath$i\p1 ; done;
2.2 - Asignar los discos 26-30 al grupo de reco del ASM:
# for i in $(seq 26 30); do echo oracleasm createdisk ASM_RECO_0$i /dev/mapper/mpath$i\p1 ; done;
3 - Scan de los discos disponibles para ASM:
# oracleasm scandisks
3.1 - Listar los discos nuevamente para asegurarnos de que están bien:
# oracleasm listdisks
ASM_DATOS_001
ASM_DATOS_002
.............
.............
ASM_DATOS_040
ASM_RECO_026
ASM_RECO_027
ASM_RECO_028
ASM_RECO_029
ASM_RECO_030
Nota1: Los nombres "ASM_DATOS_002" son elegidos por el administrador en conjunto con los DBAs. Mejora/ayuda la tarea de administración a medida que pasa el tiempo y nos olvidamos de las configuraciones que realizamos.
Nota2: Los comandos son de la API ASMLib y no de GNU/Linux, mas info: ASMLib Installation
####################### RESUMEN (UN SOLO DISCO)############################
# echo "- - -" > /sys/class/scsi_host/host3/scan
# fdisk /dev/mapper/mpathXX
# kpartx -av /dev/mapper/mpathXX
# /sbin/partprobe
-----------------------------------------------------------
# oracleasm listdisks
# oracleasm createdisk ASM_DATOS_0XX /dev/mapper/mpathXXp1
# oracleasm scandisks
# oracleasm listdisks
Dónde:
mpathXX : es el nuevo disco reconocido
mpathXXp1 : partición creada en paso --> # fdisk /dev/mapper/mpathXX
ASM_DATOS_0XX : es el nombre del disco para ASM
####################### OBSERVACIONES ##################################
Donde:
fd.in es un archivo que contiene los comandos del fdisk:
# cat fd.in
n
p
1
w
n = nueva particion
p = tipo
1 = opción 1
w = escribir los cambios
Luego del 1 (numero de partición) hasta la w (write) hay dos lineas en blanco que corresponden a dos Enter en el uso interactivo de fdisk,para aceptar la opciones por defecto.
En el caso de seleccionar el camino de los comandos:
Ejemplo con mpath42:
# fdisk /dev/mapper/mpath42
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
The number of cylinders for this disk is set to 6527.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-6527, default 6527):
Using default value 6527
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
Donde:
kpartx es una utilidad: "kpartx - Create device maps from partition tables "
Fuente: http://linux.die.net/man/8/kpartx
Donde:
partprobe sirve para efectivizar los cambios: "inform the OS of partition table changes"
Fuente: http://linux.die.net/man/8/partprobe
Notas:
La idea era agregar discos en masa (unos 40 GB procedente de una SAN) entonces se personalizó un bucle for para
hacer mas fácil la configuración de los discos. Se adjunta una nota con las recomendaciones de Oracle para ejecutar la tarea.