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
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.