Saltar al contenido

Identificar discos en el servidor SuperMicro que ejecuta FreeBSD

Este dilema se puede resolver de diversas formas, por lo tanto te compartimos la resolución más completa en nuestra opinión.

Solución:

El medio del pobre para identificar los discos sería emitir un dd if=/dev/daX of=/dev/null y vea qué LED de actividad del disco parpadea más rápidamente. Esto, por supuesto, necesita un período de baja actividad para los otros discos del sistema, pero es muy genérico.

Si tiene un controlador SAS (LSI) que funcionaría con sas2ircu luego puede usarlo para emitir el comando “display” para enumerar las unidades disponibles y sus números de serie y, posteriormente, ejecutar el comando “LOCATE” para hacer parpadear la luz en el gabinete.

Sé que esta es una pregunta antigua, pero me dio algunas de las piezas que armé, y pensé en disparar el guión que se me ocurrió, ya que es una coincidencia casi exacta con mi situación: requiere sas2ircu : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip y desde los puertos, bash y sg3_utils

Hace algunas suposiciones, creo que la principal es que está adjunta al controlador 0. puedes usar sas2ircu list para identificar su número de controlador.

Verificará el grupo seleccionado (a través del estado de zpool). Si no hay errores, hará lo siguiente:

  • guardar un archivo (en /root/.sas2ircu/drives) con una asignación de los nombres de los dispositivos a las ranuras del gabinete
  • apague los leds previamente activados por este script (esto se almacena en /root/.sas2ircu/locs)

Si hay errores:

  • enviar un correo electrónico con la salida completa del estado de zpool
  • activar los leds de las unidades fallidas (y almacenar las ubicaciones activadas en las locomotoras /root/.sas2ircu para que luego se puedan desactivar)

de todos modos aquí está el guión. Lo ejecuto como un trabajo cron por hora.

#! /usr/local/bin/bash
if [ ! "$1" ]; then
  echo "Usage: zpscan.sh pool [email]"
  echo "Scan a pool, send email notification and activate leds of failed drives"
  exit
fi
if [ ! -d /root/.sas2ircu ]; then
  mkdir /root/.sas2ircu
  touch /root/.sas2ircu/drives
  touch /root/.sas2ircu/locs
fi
if [ "$2" ]; then
  email="$2"
else
  email="root"
fi
condition=$(/sbin/zpool status $1 | egrep -i '(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED|corrupt|cannot|unrecover)')
if [ "$condition" ]; then
  emailSubject="`hostname` - ZFS pool - HEALTH fault"
  mailbody=$(zpool status $1)
  echo "Sending email notification of degraded zpool $1"
  echo "$mailbody" | mail -s "Degraded Zpool $1 on hostname" $email
  drivelist=$(zpool status $1 | grep -E "(DEGRADED|FAULTED|OFFLINE|UNAVAIL|REMOVED|FAIL|DESTROYED)" | grep -vE "^W+($1|NAME|mirror|logs|spares)" | sed -E $'s/.*was /dev/([0-9a-z]+)/\1/;s/^[t  ]+([0-9a-z]+)[t ]+.*$/\1/')
  echo "Locating failed drives."
  for drive in $drivelist;
  do
  record=$(grep -E "^$drive" /root/.sas2ircu/drives)
  location=$(echo $record | cut -f 3 -d " ")
  echo Locating: $record
  sas2ircu 0 locate $location ON
  if [ ! "$(egrep $location /root/.sas2ircu/locs)" ]; then
  echo $location >> /root/.sas2ircu/locs
  fi
  done
else
  echo "Saving drive list."
  drivelist=$(zpool status $1 | grep -E $'^t  ' | grep -vE "^W+($1|NAME|mirror|logs|spares)" | sed -E $'s/^[t ]+//;s/([a-z0-9]+).*/\1/')
  saslist=$(sas2ircu 0 display)
  printf "" > /root/.sas2ircu/drives
  for drive in $drivelist;
  do
  sasaddr=$(sg_vpd -i -q $drive 2>/dev/null | sed -E '2!d;s/,.*//;s/  0x//;s/([0-9a-f]7)([0-9a-f])([0-9a-f]4)([0-9a-f]4)/1-2-3-4/')
  encaddr=$(echo "$saslist" | grep $sasaddr -B 2 | sed -E 'N;s/^.*: ([0-9]+)n.*: ([0-9]+)/1:2/')
  echo $drive $sasaddr $encaddr >> /root/.sas2ircu/drives
  done

  for loc in $(cat /root/.sas2ircu/locs);
  do
  sas2ircu 0 locate $loc OFF
  done
  printf "" > /root/.sas2ircu/locs
fi

  for loc in $(cat /root/.sas2ircu/locs);
  do
  sas2ircu 0 locate $loc OFF
  done
  printf "" > /root/.sas2ircu/locs
fi

Para la mayoría de mis soluciones ZFS, es mejor que apueste a que tengo una tabla y un conjunto de etiquetas que identifican las unidades por su WWN SAS parcial. Esta es una función de los controladores LSI que uso, que se leen así:

    NAME                        STATE     READ WRITE CKSUM
    vol1                        ONLINE       0     0     0
      mirror-0                  ONLINE       0     0     0
        c10t50000393482B340Cd0  ONLINE       0     0     0
        c10t50000393482B4CF0d0  ONLINE       0     0     0
      mirror-1                  ONLINE       0     0     0
        c10t50000393482B4DB4d0  ONLINE       0     0     0
        c10t50000393482BAB48d0  ONLINE       0     0     0
      mirror-2                  ONLINE       0     0     0
        c10t50000393482BDA68d0  ONLINE       0     0     0
        c10t500003935803910Cd0  ONLINE       0     0     0

ingrese la descripción de la imagen aquí

Hay un par de opciones para que esto funcione. Una es la utilidad comercial SMARTmon de SanTools que está disponible para integradores y OEM. Aprovecha las funciones de SCSI Enclosure Services (SES) en las unidades JBOD externas, pero también tiene algo de magia para los discos internos.

También puede tener una opción dependiendo del controlador que esté usando. ¿Está utilizando un controlador de placa base o un HBA SAS no RAID especialmente diseñado?

valoraciones y comentarios

Te invitamos a añadir valor a nuestra información dando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *