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?

Timothy C. Quinn
la source

Réponses:

3

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:

    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

entrez la description de l'image ici

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?

ewwhite
la source
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.

le-wabbit
la source
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).
Therealstubot
4

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 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
palesius
la source
3

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.

ja-s
la source
2

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.

eborisch
la source
1

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.

romain
la source