Identificar discos en el servidor SuperMicro que ejecuta FreeBSD


8

Estoy corriendo en un servidor SuperMicro 2U con 6 discos en un ZPool. Quiero identificar cada unidad de disco usando el LED Drive Carrier para ejecutar un comando desde una herramienta en FreeBSD. ¿Hay alguna forma de hacer esto?

Sé que si las unidades se ejecutaban encima de una tarjeta RAID, podría usar la utilidad de la tarjeta RAID para identificar cada disco, pero en mi caso, no hay ataque de hardware.

¿Hay alguna herramienta para hacer esto en FreeBSD o Linux?

Respuestas:


3

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

    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 SanTools SMARTmon que está disponible para OEM e integradores. Aprovecha las funciones de SCSI Enclosure Services (SES) en 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?


Nota: la notación cXtYdZ es solo Solaris. La mayoría de las distribuciones de Linux tienen el directorio / dev / disk / by-id / que contiene enlaces simbólicos desde los nombres que contienen WWN hasta los nombres de /dev/sdXestilo. No tengo idea, si FreeBSD tiene algo similar.
the-wabbit

Usando la placa base ya que solo estoy usando unidades SATA por ahora. Puede migrar a SAS en el futuro cercano. También estaba considerando hacer exactamente lo que propones, que es simplemente etiquetar las bahías con pegatinas. Parece que cambiar a un HBA SAS no RAID dedicado es el camino a largo plazo. Uno con API CLI para * nix pondría la guinda del pastel;)
Timothy C. Quinn

9

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

Si tiene un controlador SAS (LSI) con el que funcionaría sas2ircu, puede usarlo para emitir el comando "mostrar" para enumerar las unidades disponibles y sus publicaciones seriadas y luego ejecutar el comando "LOCALIZAR" para parpadear la luz en el gabinete.


En lugar de "Baja actividad", es mejor detener todas las E / S desmontando el disco y cerrando los trabajos de patrulla.
Roman

1
sas2ircu FTW! Gracias me salvaste. Por cierto, tengo un HBA LSI con flasheo de TI con una placa posterior supermicro de 12 bahías con mini-sas individuales. Se ejecuta en supermicro mobo, e3-1230v3, 32 gb ecc. ejecutando FreeNAS 9.3 más reciente. El comando LOCATE parpadeó en el LED rojo (error), dejando el LED azul de actividad con una función normal. El comando de pantalla muestra curiosamente que el controlador LSI es # 0 pero el gabinete aparece como # 2 (Probablemente los controladores mobo sata 2 y sata 3 sean # 0 y # 1, pero eso es una conjetura).
Therealstubot

4

Sé que esta es una vieja pregunta, pero me dio algunas de las piezas que armé, y pensé en devolver el guión que se me ocurrió, ya que esta es una coincidencia casi exacta para 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

Realiza algunas suposiciones, creo que la principal es que está conectada al controlador 0. que puede usar sas2ircu listpara identificar su número de controlador.

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

  • guardar un archivo (en /root/.sas2ircu/drives) con una asignación de nombres de dispositivos a ranuras de 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
  • active los leds de cualquier unidad defectuosa (y almacene las ubicaciones activadas en /root/.sas2ircu locs para que luego puedan desactivarse)

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

3

No sé sobre FreeBSD, pero en Linux, hay una colección de software de Intel llamada ledmon(8)y he utilizado el programa de espacio de usuario ledctl(8)para flashear el LED "localizar" en una unidad particular en mi SuperMicro SC847E26-RJBOD1 que tiene unidades controladas por un LSI SAS3008 HBA (no MegaRAID):

$ sudo ledctl locate=/dev/sdce

Luego, una vez que lo localicé, apagué el LED "localizar":

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) es necesario para la comunicación entre el HBA y el plano posterior.


2

Sé que esta es una vieja pregunta, pero para los buscadores que la tocan, en FreeBSD> = 10.3, puede usar sesutil locate da2 onpara encender el LED de da2 siempre que esté en un gabinete que proporcione un dispositivo / dev / sesN.


1

No hay una interfaz de software abstraída estandarizada para iluminar el LED del portaunidades (no el LED de actividad); esto depende en gran medida del hardware. Esto significa que aún necesita las herramientas del controlador de almacenamiento (las utilidades de la tarjeta RAID de las que está hablando) para enviar los comandos apropiados al controlador. La forma en que se llama o implementa este software depende, por supuesto, del fabricante / vendedor del controlador de almacenamiento.

(No importa que tenga una incursión de SW en su lugar, ya que obviamente todavía necesita un controlador de almacenamiento que se comunique con su backplane, caddies y unidades).

Si está utilizando unidades de disco de nivel empresarial con un controlador económico, entonces puede que no tenga suerte.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.