Identifica i dischi sul server SuperMicro che esegue FreeBSD


8

Sono in esecuzione su un server SuperMicro 2U con 6 dischi in uno ZPool. Voglio identificare ogni vano unità usando il LED Carrier dell'unità da eseguire un comando da uno strumento in FreeBSD. C'è un modo per fare questo?

So che se le unità erano in esecuzione su una Raid Card, potrei usare l'utility Raid Card per identificare ciascun disco, ma nel mio caso non c'è alcun raid hardware.

Esiste uno strumento per farlo in FreeBSD o Linux?

Risposte:


3

Per la maggior parte delle mie soluzioni ZFS, è meglio scommettere che ho un tavolo e un set di etichette che identificano le unità dal loro WWN SAS parziale . Questa è una funzione dei controller LSI che utilizzo, che recita come:

    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

inserisci qui la descrizione dell'immagine

Ci sono un paio di opzioni per farlo funzionare. Uno è l' utilità SMARTmon SanTools commerciale disponibile per OEM e integratori. Sfrutta le funzionalità SCSI Enclosure Services (SES) nelle unità JBOD esterne, ma ha anche un po 'di magia per i dischi interni.

Potresti anche avere un'opzione a seconda del controller che stai utilizzando. Stai solo usando un controller della scheda madre o un HBA SAS non RAID appositamente costruito?


Nota: la notazione cXtYdZ è solo Solaris. La maggior parte delle distro Linux ha la directory / dev / disk / by-id / che contiene collegamenti simbolici dai nomi contenenti WWN ai nomi di /dev/sdXstile. Non ho idea, se FreeBSD ha qualcosa di simile.
the-wabbit,

Usando la scheda madre come sto usando solo unità SATA per ora. Potrebbe migrare verso SAS nel prossimo futuro. Stavo anche considerando di fare esattamente quello che proponi, che è solo etichettare le baie con adesivi. Sembra che passare a un HBA SAS non RAID dedicato sia la strada da percorrere a lungo termine. Uno con le API CLI per * nix metterebbe la ciliegina sulla torta;)
Timothy C. Quinn,

9

Il mezzo del povero per identificare i dischi sarebbe quello di emettere un dd if=/dev/daX of=/dev/nulle vedere quale LED di attività del disco lampeggia più rapidamente. Questo ovviamente richiede un periodo di bassa attività per gli altri dischi nel sistema, ma è molto generico.

Se si dispone di un controller SAS (LSI) che funzionerebbe, sas2ircuè possibile utilizzarlo per emettere il comando "display" per elencare le unità disponibili e i loro seriali e successivamente eseguire il comando "LOCATE" per far lampeggiare la luce sull'involucro.


Invece di "Attività bassa", è meglio interrompere tutti gli I / O smontando il disco e chiudendo i lavori di pattuglia.
Romano,

1
sas2ircu FTW! Grazie, mi hai salvato. Per inciso, ho un HBA LSI con flashing IT con un backplane supermicro 12 bay con mini mini-sas. In esecuzione su supermicro mobo, e3-1230v3, 32 gb ecc. con FreeNAS 9.3 più recente. Il comando LOCATE ha lampeggiato il LED rosso (errore), lasciando il LED di attività blu con funzione normale. Il comando Display mostra curiosamente che il controller LSI è # 0 ma il contenitore appare come # 2 (Probabilmente i controller mobo sata 2 e sata 3 sono # 0 e # 1, ma si tratta di congetture).
Therealstubot,

4

So che questa è una vecchia domanda, ma mi ha dato alcuni dei pezzi che ho messo insieme, e ho pensato di riprendere la sceneggiatura che mi è venuta in mente, poiché questa è una corrispondenza quasi esatta con la mia situazione: richiede sas2ircu : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip e dalle porte, bash e sg3_utils

Fa alcune ipotesi, penso che il principale sia che è collegato al controller 0. è possibile utilizzare sas2ircu listper identificare il numero del controller.

Controllerà il pool selezionato (tramite lo stato di zpool). Se non ci sono errori, sarà:

  • salva un file (su /root/.sas2ircu/drives) con una mappatura dei nomi dei dispositivi negli slot del contenitore
  • disattiva tutti i led precedentemente attivati ​​da questo script (questo è archiviato in /root/.sas2ircu/locs)

In caso di errori:

  • inviare un'e-mail con l'output completo dello stato di zpool
  • attivare i led di qualsiasi unità guasta (e memorizzare le posizioni si attiva in locs /root/.sas2ircu in modo che possano essere successivamente disattivati)

comunque ecco la sceneggiatura. Lo eseguo come cron job orario.

#! /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

Non conosco FreeBSD, ma in Linux esiste una raccolta di software di Intel chiamata ledmon(8)e ho usato il programma userspace per ledctl(8)far lampeggiare il LED "individuare" su una determinata unità nel mio SuperMicro SC847E26-RJBOD1 che ha unità controllate da un LSI SAS3008 HBA (non MegaRAID):

$ sudo ledctl locate=/dev/sdce

Quindi, una volta individuato, ho spento il LED "Trova":

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) è necessario per la comunicazione tra l'HBA e il backplane.


2

So che questa è una vecchia domanda, ma per i ricercatori che lo colpiscono, su FreeBSD> = 10.3, puoi usare sesutil locate da2 onper accendere il LED di da2 a condizione che sia in un contenitore che fornisce un dispositivo / dev / sesN.


1

Non esiste un'interfaccia software astratta standardizzata per illuminare il LED Carrier (non il LED di attività) - questo dipende fortemente dall'hardware. Ciò significa che hai ancora bisogno degli strumenti del controller di archiviazione (le utility delle carte raid di cui stai parlando) per inviare i comandi appropriati al controller. Il modo in cui questo software viene chiamato o implementato dipende ovviamente dal produttore / fornitore del controller di archiviazione.

(Non importa che tu abbia un raid SW in atto, dato che ovviamente hai ancora bisogno di un controller di archiviazione che parli con il tuo backplane, i caddy e le unità.)

Se stai usando caddies di livello enterprise con un controller economico, allora potresti essere sfortunato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.