Identifizieren Sie Festplatten auf dem SuperMicro-Server, auf dem FreeBSD ausgeführt wird

8

Ich arbeite auf einem SuperMicro 2U-Server mit 6 Festplatten in einem ZPool. Ich möchte jeden Laufwerksschacht anhand der Laufwerksträger-LED identifizieren, indem ein Befehl von einem Tool in FreeBSD ausgeführt wird. Gibt es eine Möglichkeit, dies zu tun?

Ich weiß, wenn die Laufwerke auf einer RAID-Karte ausgeführt wurden, könnte ich das RAID-Karten-Dienstprogramm verwenden, um jede Festplatte zu identifizieren, aber in meinem Fall gibt es keinen Hardware-RAID.

Gibt es ein Tool, um dies in FreeBSD oder Linux zu tun?

Timothy C. Quinn
quelle

Antworten:

3

Bei den meisten meiner ZFS-Lösungen ist es besser, wenn ich eine Tabelle und eine Reihe von Beschriftungen habe, die Laufwerke anhand ihres partiellen SAS-WWN identifizieren . Dies ist eine Funktion der von mir verwendeten LSI-Controller, die wie folgt lauten:

    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

Geben Sie hier die Bildbeschreibung ein

Es gibt verschiedene Möglichkeiten, um dies zum Laufen zu bringen. Eines davon ist das kommerzielle SanTools SMARTmon-Dienstprogramm , das OEMs und Integratoren zur Verfügung steht. Es nutzt die SCSI Enclosure Services (SES) -Funktionen in externen JBOD-Einheiten, hat aber auch etwas Magie für interne Festplatten.

Abhängig vom verwendeten Controller haben Sie möglicherweise auch eine Option. Verwenden Sie nur einen Motherboard-Controller oder einen speziell entwickelten Nicht-RAID-SAS-HBA?

ewwhite
quelle
Hinweis: Die cXtYdZ-Notation lautet nur Solaris. Die meisten Linux-Distributionen haben das Verzeichnis / dev / disk / by-id /, das Symlinks von den WWN-haltigen Namen zu den Stilnamen enthält /dev/sdX. Keine Ahnung, ob FreeBSD etwas ähnliches hat.
The-Wabbit
Verwenden des Motherboards, da ich gerade SATA-Laufwerke verwende. Kann in naher Zukunft auf SAS migrieren. Ich habe auch darüber nachgedacht, genau das zu tun, was Sie vorschlagen, nämlich nur die Buchten mit Aufklebern zu kennzeichnen. Klingt so, als wäre der Wechsel zu einem dedizierten Nicht-RAID-SAS-HBA auf lange Sicht der richtige Weg. Einer mit CLI-APIs für * nix würde das i-Tüpfelchen setzen;)
Timothy C. Quinn
9

Das Mittel des armen Mannes, um Festplatten zu identifizieren, besteht darin, eine auszugeben dd if=/dev/daX of=/dev/nullund zu sehen, welche Aktivitäts-LED der Festplatte am schnellsten blinkt. Dies erfordert natürlich eine Zeit geringer Aktivität für die anderen Festplatten im System, ist jedoch sehr allgemein gehalten.

Wenn Sie einen (LSI) SAS-Controller haben, mit dem sas2ircuSie arbeiten können, können Sie damit den Befehl "display" ausgeben, um verfügbare Laufwerke und deren Serien aufzulisten, und anschließend den Befehl "LOCATE" ausführen, um das Licht auf dem Gehäuse zu blinken.

the-wabbit
quelle
Anstelle von "Geringe Aktivität" sollten Sie alle E / A-Vorgänge stoppen, indem Sie die Festplatte aushängen und Patrouillenjobs beenden.
Roman
1
sas2ircu FTW! Danke, du hast mich gerettet. Übrigens habe ich einen IT-Flash-LSI-HBA mit einer Supermicro-12-Bay-Backplane mit einzelnen Mini-Sas. Laufen auf Supermicro Mobo, e3-1230v3, 32 GB ecc. Ausführen von FreeNAS 9.3 spätestens. Der Befehl LOCATE blinkte rot (Fehler-) LED und ließ die blaue Aktivitäts-LED mit normaler Funktion zurück. Der Anzeigebefehl zeigt merkwürdigerweise, dass der LSI-Controller # 0 ist, das Gehäuse jedoch als # 2 (wahrscheinlich sind die Mobo Sata 2- und Sata 3-Controller # 0 und # 1, aber das ist eine Vermutung).
Therealstubot
4

Ich weiß, dass dies eine alte Frage ist, aber sie gab mir einige der Teile, die ich zusammengestellt habe, und ich dachte, ich würde das Skript, das ich mir ausgedacht habe, zurückschießen, da dies fast genau zu meiner Situation passt: Es erfordert sas2ircu : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip und von den Ports, bash und sg3_utils

Es macht ein paar Annahmen, ich denke, die wichtigste ist, dass es an Controller 0 angeschlossen ist. Sie können verwenden sas2ircu list, um Ihre Controller-Nummer zu identifizieren.

Der ausgewählte Pool wird überprüft (über den Zpool-Status). Wenn es keine Fehler gibt, wird es:

  • Speichern Sie eine Datei (unter /root/.sas2ircu/drives) mit einer Zuordnung von Gerätenamen zu Gehäuseschlitzen
  • Deaktivieren Sie alle zuvor von diesem Skript aktivierten LEDs (diese sind in /root/.sas2ircu/locs gespeichert).

Wenn es Fehler gibt, wird es:

  • Senden Sie eine E-Mail mit der vollständigen Ausgabe des Zpool-Status
  • Aktivieren Sie die LEDs aller ausgefallenen Laufwerke (und speichern Sie die aktivierten Speicherorte in /root/.sas2ircu, damit sie später deaktiviert werden können).

sowieso hier ist das Skript. Ich führe es als stündlichen Cron-Job aus.

#! /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
palesius
quelle
3

Ich weiß nichts über FreeBSD, aber unter Linux gibt es eine Sammlung von Intel-Software, ledmon(8)und ich habe das Userspace-Programm verwendet ledctl(8), um die LED "Lokalisieren" auf einem bestimmten Laufwerk in meinem SuperMicro SC847E26-RJBOD1 zu blinken, dessen Laufwerke von gesteuert werden ein LSI SAS3008 HBA (nicht MegaRAID):

$ sudo ledctl locate=/dev/sdce

Sobald ich es gefunden habe, habe ich die LED "Lokalisieren" ausgeschaltet:

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) wird für die Kommunikation zwischen dem HBA und der Rückwandplatine benötigt.

ja-s
quelle
2

Ich weiß, dass dies eine alte Frage ist, aber für die Suchenden, die dies treffen, können Sie unter FreeBSD> = 10.3 sesutil locate da2 ondie LED von da2 einschalten, vorausgesetzt, sie befindet sich in einem Gehäuse, das ein / dev / sesN-Gerät bereitstellt.

eborisch
quelle
1

Es gibt keine standardisierte abstrahierte Softwareschnittstelle zum Aufleuchten der Drive Carrier-LED (keine Aktivitäts-LED) - dies ist stark hardwareabhängig. Dies bedeutet, dass Sie weiterhin die Speichercontroller-Tools (die RAID-Karten-Dienstprogramme, von denen Sie sprechen) benötigen, um die entsprechenden Befehle an den Controller zu senden. Wie diese Software aufgerufen oder implementiert wird, hängt natürlich vom Hersteller / Hersteller des Speichercontrollers ab.

(Es spielt keine Rolle, dass Sie einen SW-Raid eingerichtet haben, da Sie offensichtlich noch einen Speichercontroller benötigen, der mit Ihrer Rückwandplatine, Ihren Caddies und Laufwerken spricht.)

Wenn Sie Laufwerks-Caddies für Unternehmen mit einem billigen O-Controller verwenden, haben Sie möglicherweise kein Glück.

römisch
quelle