Reescanear los discos de sistema en Linux RedHat

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.

COMPÁRTEME

Deja un comentario