Identifier les disques sur le serveur SuperMicro exécutant FreeBSD
8
Je cours sur un serveur SuperMicro 2U avec 6 disques dans un ZPool. Je veux identifier chaque baie de lecteur à l'aide du voyant Drive Carrier pour exécuter une commande à partir d'un outil dans FreeBSD. Y a-t-il un moyen de faire cela?
Je sais que si les disques fonctionnaient sur une carte Raid, je pourrais utiliser l'utilitaire de carte Raid pour identifier chaque disque mais dans mon cas, il n'y a pas de raid matériel.
Existe-t-il un outil pour le faire sous FreeBSD ou Linux?
Pour la plupart de mes solutions ZFS, vous feriez mieux de parier que j'ai un tableau et un ensemble d'étiquettes identifiant les disques par leur WWN SAS partiel . Ceci est une fonction des contrôleurs LSI que j'utilise, qui se lisent comme:
Il existe quelques options pour que cela fonctionne. L'un est l'utilitaire commercial SanTools SMARTmon qui est disponible pour les OEM et les intégrateurs. Il exploite les fonctionnalités SCSI Enclosure Services (SES) dans les unités JBOD externes, mais a aussi de la magie pour les disques internes.
Vous pouvez également avoir une option en fonction du contrôleur que vous utilisez. Utilisez-vous simplement un contrôleur de carte mère ou un HBA SAS non RAID spécialement conçu?
Remarque: la notation cXtYdZ est uniquement Solaris. La plupart des distributions Linux ont le répertoire / dev / disk / by-id / contenant des liens symboliques des noms contenant le WWN vers les noms de /dev/sdXstyle. Aucune idée, si FreeBSD a quelque chose de similaire.
the-wabbit
Utilisation de la carte mère car je n'utilise que des disques SATA pour l'instant. Peut migrer vers SAS dans un avenir proche. J'envisageais également de faire exactement ce que vous proposez, qui consiste simplement à étiqueter les baies avec des autocollants. Cela ressemble à la transition vers un HBA SAS non RAID dédié est la voie à suivre à long terme. Un avec des API CLI pour * nix mettrait la cerise sur le gâteau;)
Timothy C. Quinn
9
Le pauvre homme pourrait identifier les disques en émettant un dd if=/dev/daX of=/dev/nullet voir quel voyant d'activité du disque clignote le plus rapidement. Cela nécessite bien sûr une période de faible activité pour les autres disques du système, mais est très générique.
Si vous disposez d'un contrôleur SAS (LSI) qui fonctionnerait, sas2ircuvous pouvez l'utiliser pour émettre la commande "display" pour répertorier les lecteurs disponibles et leurs publications en série et exécuter ensuite la commande "LOCATE" pour faire clignoter la lumière sur le boîtier.
Au lieu de «faible activité», mieux vaut arrêter toutes les E / S en démontant le disque et en arrêtant les tâches de patrouille.
Roman
1
sas2ircu FTW! Merci, tu m'as sauvé. Soit dit en passant, j'ai un adaptateur HBA LSI flashé avec un fond de panier supermicro 12 baies avec un mini-sas unique. Fonctionnant sur supermicro mobo, e3-1230v3, 32 Go ecc. exécutant FreeNAS 9.3 le plus récent. La commande LOCATE a clignoté en rouge (erreur), laissant la LED d'activité bleue avec une fonction normale. La commande d'affichage montre curieusement que le contrôleur LSI est # 0 mais le boîtier apparaît comme # 2 (les contrôleurs mobo sata 2 et sata 3 sont probablement # 0 et # 1, mais c'est une conjecture).
Il fait quelques hypothèses, je pense que la principale est qu'il est attaché au contrôleur 0. vous pouvez utiliser sas2ircu listpour identifier votre numéro de contrôleur.
Il vérifiera le pool sélectionné (via le statut zpool). S'il n'y a pas d'erreurs, cela:
enregistrer un fichier (à /root/.sas2ircu/drives) avec un mappage des noms de périphériques aux emplacements de boîtier
éteignez toutes les leds précédemment activées par ce script (elles sont stockées dans /root/.sas2ircu/locs)
S'il y a des erreurs, cela:
envoyer un e-mail avec la sortie complète du statut zpool
activer les voyants des disques défectueux (et stocker les emplacements s'active dans /root/.sas2ircu locs afin qu'ils puissent être désactivés plus tard)
de toute façon voici le script. Je l'exécute comme un travail cron horaire.
#! /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
Je ne connais pas FreeBSD, mais sous Linux, il existe une collection de logiciels d'Intel appelée ledmon(8)et j'ai utilisé le programme ledctl(8)de l'espace utilisateur pour flasher la LED "Locate" sur un disque particulier de mon SuperMicro SC847E26-RJBOD1 qui ont des disques contrôlés par un HBA LSI SAS3008 (pas MegaRAID):
$ sudo ledctl locate=/dev/sdce
Puis une fois que je l'ai localisé, j'ai éteint la LED "Locate":
$ sudo ledctl locate_off=/dev/sdce
sgpio(1) est requis pour la communication entre le HBA et le fond de panier.
Je sais que c'est une vieille question, mais pour les chercheurs qui le rencontrent, sur FreeBSD> = 10.3, vous pouvez utiliser sesutil locate da2 onpour allumer la LED de da2 à condition qu'elle soit dans un boîtier qui fournit un périphérique / dev / sesN.
Il n'y a pas d'interface logicielle abstraite normalisée pour allumer le voyant du lecteur de lecteur (pas le voyant d'activité) - cela dépend fortement du matériel. Cela signifie que vous avez toujours besoin des outils du contrôleur de stockage (les utilitaires de carte de raid dont vous parlez) pour envoyer les commandes appropriées au contrôleur. La façon dont ce logiciel est appelé ou implémenté dépend bien sûr du fabricant / fournisseur du contrôleur de stockage.
(Peu importe que vous ayez un raid SW en place, car vous avez évidemment besoin d'un contrôleur de stockage qui parle à votre fond de panier, caddies et lecteurs.)
Si vous utilisez des caddies d'entraînement de qualité professionnelle avec un contrôleur bon marché, vous n'avez peut-être pas de chance.
/dev/sdX
style. Aucune idée, si FreeBSD a quelque chose de similaire.Le pauvre homme pourrait identifier les disques en émettant un
dd if=/dev/daX of=/dev/null
et voir quel voyant d'activité du disque clignote le plus rapidement. Cela nécessite bien sûr une période de faible activité pour les autres disques du système, mais est très générique.Si vous disposez d'un contrôleur SAS (LSI) qui fonctionnerait,
sas2ircu
vous pouvez l'utiliser pour émettre la commande "display" pour répertorier les lecteurs disponibles et leurs publications en série et exécuter ensuite la commande "LOCATE" pour faire clignoter la lumière sur le boîtier.la source
Je sais que c'est une vieille question, mais cela m'a donné quelques-unes des pièces que j'ai rassemblées, et j'ai pensé que je tirerais le script que j'ai trouvé, car cela correspond presque exactement à ma situation: cela nécessite sas2ircu : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip et depuis les ports, bash et sg3_utils
Il fait quelques hypothèses, je pense que la principale est qu'il est attaché au contrôleur 0. vous pouvez utiliser
sas2ircu list
pour identifier votre numéro de contrôleur.Il vérifiera le pool sélectionné (via le statut zpool). S'il n'y a pas d'erreurs, cela:
S'il y a des erreurs, cela:
de toute façon voici le script. Je l'exécute comme un travail cron horaire.
la source
Je ne connais pas FreeBSD, mais sous Linux, il existe une collection de logiciels d'Intel appelée
ledmon(8)
et j'ai utilisé le programmeledctl(8)
de l'espace utilisateur pour flasher la LED "Locate" sur un disque particulier de mon SuperMicro SC847E26-RJBOD1 qui ont des disques contrôlés par un HBA LSI SAS3008 (pas MegaRAID):Puis une fois que je l'ai localisé, j'ai éteint la LED "Locate":
sgpio(1)
est requis pour la communication entre le HBA et le fond de panier.la source
Je sais que c'est une vieille question, mais pour les chercheurs qui le rencontrent, sur FreeBSD> = 10.3, vous pouvez utiliser
sesutil locate da2 on
pour allumer la LED de da2 à condition qu'elle soit dans un boîtier qui fournit un périphérique / dev / sesN.la source
Il n'y a pas d'interface logicielle abstraite normalisée pour allumer le voyant du lecteur de lecteur (pas le voyant d'activité) - cela dépend fortement du matériel. Cela signifie que vous avez toujours besoin des outils du contrôleur de stockage (les utilitaires de carte de raid dont vous parlez) pour envoyer les commandes appropriées au contrôleur. La façon dont ce logiciel est appelé ou implémenté dépend bien sûr du fabricant / fournisseur du contrôleur de stockage.
(Peu importe que vous ayez un raid SW en place, car vous avez évidemment besoin d'un contrôleur de stockage qui parle à votre fond de panier, caddies et lecteurs.)
Si vous utilisez des caddies d'entraînement de qualité professionnelle avec un contrôleur bon marché, vous n'avez peut-être pas de chance.
la source