Me ocurre muchas veces que solicito una nueva LUN al equipo de storage para montar un servicio nuevo o ampliar un filesystem ya existente, pero simplemente recibo una notificación indicando que ya me han dado el disco SCSI, sin más detalles. Obviamente, la LUN se añade en caliente tanto en servidores físicos como en virtuales de VMWare, por ejemplo.
Cuando tenemos sistemas con muchos discos y de los mismos tamaños, esto puede ser un problema porque no sabes cuál es el nuevo disco y para averiguarlo tienes que ir mirando uno a uno cuál está en uso o, bien, tener un inventario de discos actualizado con su WWID.
Configuración del multipath (Relacionado con el WWID de los discos)
Script para buscar nuevos dispositivos SCSI en RedHat
Para solucionar esta problemática, me hice un script para RedHat 6, 7 y 8 que saca un listado de discos, lo guarda en un fichero, reescanea discos, vuelve a sacar otro listado y compara ambos. De esta manera, puedo buscar el disco que ha cambiado entre el primer listado y el segundo y saber cuál es el nuevo que me han asignado.
La ejecución del script de escaneo de discos en RedHat es la siguiente:
# /planific/bin/admsys/rescandisks.sh
Scanning disks...
Scan finished
Number of disks before scan: 97
Number of disks after scan: 103
New disks detected:
97a98,103
Disk /dev/sdct: 161.1 GB, 161061273600 bytes
Disk /dev/sdcu: 161.1 GB, 161061273600 bytes
Disk /dev/sdcv: 161.1 GB, 161061273600 bytes
Disk /dev/sdcw: 161.1 GB, 161061273600 bytes
Disk /dev/sdcx: 161.1 GB, 161061273600 bytes
Disk /dev/sdcy: 161.1 GB, 161061273600 bytes
[root]#
El código fuente del script en bash ejecutado anteriormente es:
#!/bin/sh
PATH=/bin:/sbin:/usr/sbin:/usr/bin
# Number of disks before the scan
NUMBEROFDISKSPREV=fdisk -l |grep dev |grep -v mapper |grep Disk |wc -l
echo "Scanning disks..."
fdisk -l |grep dev |grep -v mapper |grep Disk > /tmp/rescandisks_prev.txt
# Scan disks
for HOSTX in $(ls -l /sys/class/scsi_host |awk '{print $9}' |grep -v ^$)
do
echo "- - -" > /sys/class/scsi_host/$HOSTX/scan
done
for DEVICEX in $(ls -l /sys/class/scsi_device |awk '{print $9}' |grep -v ^$)
do
echo 1 > /sys/class/scsi_device/$DEVICEX/device/rescan
done
fdisk -l |grep dev |grep -v mapper |grep Disk > /tmp/rescandisks_after.txt
echo "Scan finished"
# Number of disks after the scan
NUMBEROFDISKSAFTER=fdisk -l |grep dev |grep -v mapper |grep Disk |wc -l
echo "Number of disks before scan: $NUMBEROFDISKSPREV"
echo "Number of disks after scan: $NUMBEROFDISKSAFTER"
# If number of disks before the scan are different after scan, show the differences
if [ $NUMBEROFDISKSPREV != $NUMBEROFDISKSAFTER ]
then
echo "New disks detected: "
diff /tmp/rescandisks_prev.txt /tmp/rescandisks_after.txt
fi
rm /tmp/rescandisks_prev.txt /tmp/rescandisks_after.txt
A partir de RedHat 7, también podemos contar con la utilidad rescan-scsi-bus.sh, que podemos utilizar de la siguiente manera pero no hace comparativas de inventarios como el que he creado anteriormente:
[root@server1 ~]# rescan-scsi-bus.sh -f --forcerescan
Syncing file systems
Scanning SCSI subsystem for new devices, flush failed multipath devices, and remove devices that have disappeared
Scanning host 0 for SCSI target IDs 0 1 2 3 4 5 6 7, all LUNs
Scanning host 1 for SCSI target IDs 0 1 2 3 4 5 6 7, all LUNs
Scanning for device 1 0 0 0 ...
OLD: Host: scsi1 Channel: 00 Id: 00 Lun: 00
Vendor: NECVMWar Model: VMware IDE CDR10 Rev: 1.00
Type: CD-ROM ANSI SCSI revision: 05
Scanning host 2 for SCSI target IDs 0 1 2 3 4 5 6 7, all LUNs
Scanning for device 2 0 0 0 ...
OLD: Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: VMware, Model: VMware Virtual S Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
Scanning for device 2 0 1 0 ...
OLD: Host: scsi2 Channel: 00 Id: 01 Lun: 00
Vendor: VMware, Model: VMware Virtual S Rev: 1.0
Type: Direct-Access ANSI SCSI revision: 02
0 new or changed device(s) found.
0 remapped or resized device(s) found.
0 device(s) removed.
[root@server1 ~]#
Una vez detectado el nuevo disco ya lo podemos utilizar, por ejemplo, en arquitectura LVM.
Con los comandos explicados anteriormente, también detectamos si un disco ha cambiado de tamaño. Es habitual incrementar el tamaño de una LUN para, posteriormente, ampliar un filesystem o crear uno nuevo en el mismo VG.
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,