Identifique os discos no servidor SuperMicro executando o FreeBSD

6

Eu estou executando em um servidor SuperMicro 2U com 6 discos em um ZPool. Eu quero identificar cada baia de drive usando o Drive Carrier LED de executar um comando de uma ferramenta no FreeBSD. Existe uma maneira de fazer isso?

Eu sei que se as unidades estivessem rodando em cima de um Raid Card, eu poderia usar o utilitário raid card para identificar cada disco, mas no meu caso, não há invasão de hardware.

Existe uma ferramenta para fazer isso no FreeBSD ou no Linux?

    
por Timothy C. Quinn 20.02.2013 / 03:46

5 respostas

2

Para a maioria das minhas soluções ZFS, é melhor apostar que eu tenho uma tabela e um conjunto de rótulos identificando unidades pelo seu SAS WWN parcial . Esta é uma função dos controladores LSI que eu uso, que se parecem com:

    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

Existemalgumasopçõesparaqueissofuncione.Uméo utilitário SanTools SMARTmon comercial que está disponível para OEMs e integradores. Ele aproveita os recursos do SCSI Enclosure Services (SES) em unidades JBOD externas, mas também tem alguma mágica para discos internos.

Você também pode ter uma opção dependendo do controlador que está usando. Você está usando apenas um controlador de placa-mãe ou um HBA SAS não-RAID criado especificamente?

    
por 20.02.2013 / 14:39
9

O meio do homem pobre para identificar discos seria emitir um dd if=/dev/daX of=/dev/null e ver qual LED de atividade do disco está piscando mais rapidamente. Isso, obviamente, precisa de um período de baixa atividade para os outros discos no sistema, mas é muito genérico.

Se você tiver um controlador SAS (LSI) que funcione com sas2ircu , em seguida, você pode usá-lo para emitir o comando "display" para listar as unidades disponíveis e suas séries e, em seguida, executar o comando "LOCATE" para piscar a luz no gabinete.

    
por 20.02.2013 / 14:21
3

Eu sei que esta é uma pergunta antiga, mas ela me deu algumas das peças que eu coloquei juntas, e eu pensei em filmar o roteiro que eu criei, já que essa é uma correspondência quase exata da minha situação: requer sas2ircu: link e das portas, bash e sg3_utils

Ele faz algumas suposições, eu acho que o principal é que ele é anexado ao controlador 0. você pode usar sas2ircu list para identificar o seu número de controlador.

Verifica o pool selecionado (via zpool status). Se não houver erros, irá:

  • salva um arquivo (em /root/.sas2ircu/drives) com um mapeamento de dispositivo nomes para slots de gabinete
  • desative todos os leds previamente ativados este script (armazenado em /root/.sas2ircu/locs)

Se houver erros, irá:

  • envia um email com a saída completa do zpool status
  • ativa os leds de quaisquer unidades com falha (e armazenar os locais ativados em /root/.sas2ircu locs para depois serem desativados)

de qualquer forma aqui está o script. Eu corri como um trabalho cron cronico.

#! /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})/---/')
  encaddr=$(echo "$saslist" | grep $sasaddr -B 2 | sed -E 'N;s/^.*: ([0-9]+)\n.*: ([0-9]+)/:/')
  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
    
por 27.07.2015 / 17:15
2

Eu não sei sobre o FreeBSD, mas no Linux, existe uma coleção de softwares chamados ledmon(8) e eu usei o programa de espaço do usuário ledctl(8) para exibir o LED "locate" em uma unidade específica no meu SuperMicro SC847E26-RJBOD1 que possui unidades controladas por um LSI SAS3008 HBA (não pelo MegaRAID):

$ sudo letctl locate=/dev/sdce

Depois que eu o localizei, desliguei o LED "locate":

$ sudo letctl locate_off=/dev/sdce

sgpio(1) é necessário para a comunicação entre o HBA e o backplane.

    
por 10.12.2014 / 20:59
1

Não há uma interface de software resumida padronizada para iluminar o LED do Operador da Unidade (não o LED de atividade) - isso depende muito do hardware. Isso significa que você ainda precisa das ferramentas do controlador de armazenamento (os utilitários de placa de invasão dos quais está falando) para enviar os comandos apropriados para o controlador. Como este software é chamado ou implementado depende, é claro, do fabricante / fornecedor do controlador de armazenamento.

(Não importa se você tem um ataque SW, pois obviamente você ainda precisa de um controlador de armazenamento falando com seu backplane, caddies e drives.)

Se você estiver usando caddies de drive de nível empresarial com um controlador de baixo custo, talvez esteja sem sorte.

    
por 20.02.2013 / 13:41