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?
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:
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).
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
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.
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.
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.
/dev/sdX
estilo. No tengo idea, si FreeBSD tiene algo similar.El medio del pobre hombre para identificar discos sería emitir ay
dd if=/dev/daX of=/dev/null
ver 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.fuente
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 list
para identificar su número de controlador.Verificará el grupo seleccionado (a través del estado de zpool). Si no hay errores, lo hará:
Si hay errores:
de todos modos aquí está el guión. Lo ejecuto como un trabajo cron por hora.
fuente
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 usuarioledctl(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):Luego, una vez que lo localicé, apagué el LED "localizar":
sgpio(1)
es necesario para la comunicación entre el HBA y el plano posterior.fuente
Sé que esta es una vieja pregunta, pero para los buscadores que la tocan, en FreeBSD> = 10.3, puede usar
sesutil locate da2 on
para encender el LED de da2 siempre que esté en un gabinete que proporcione un dispositivo / dev / sesN.fuente
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.
fuente