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?
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:
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?
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.
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).
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
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.
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.
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.
/dev/sdX
. Keine Ahnung, ob FreeBSD etwas ähnliches hat.Das Mittel des armen Mannes, um Festplatten zu identifizieren, besteht darin, eine auszugeben
dd if=/dev/daX of=/dev/null
und 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
sas2ircu
Sie 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.quelle
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:
Wenn es Fehler gibt, wird es:
sowieso hier ist das Skript. Ich führe es als stündlichen Cron-Job aus.
quelle
Ich weiß nichts über FreeBSD, aber unter Linux gibt es eine Sammlung von Intel-Software,
ledmon(8)
und ich habe das Userspace-Programm verwendetledctl(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):Sobald ich es gefunden habe, habe ich die LED "Lokalisieren" ausgeschaltet:
sgpio(1)
wird für die Kommunikation zwischen dem HBA und der Rückwandplatine benötigt.quelle
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 on
die LED von da2 einschalten, vorausgesetzt, sie befindet sich in einem Gehäuse, das ein / dev / sesN-Gerät bereitstellt.quelle
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.
quelle