FreeBSD를 실행하는 SuperMicro 서버에서 디스크 식별


8

ZPool에 6 개의 디스크가있는 SuperMicro 2U 서버에서 실행 중입니다. FreeBSD의 도구에서 명령을 실행할 때 드라이브 캐리어 LED를 사용하여 각 드라이브 베이를 식별하고 싶습니다. 이 방법이 있습니까?

드라이브가 Raid 카드 위에서 실행되고 있는지 확인했습니다. RAID 카드 유틸리티를 사용하여 각 디스크를 식별 할 수 있지만 제 경우에는 하드웨어 RAID가 없습니다.

FreeBSD 또는 Linux에서이를 수행 할 수있는 도구가 있습니까?

답변:


3

대부분의 ZFS 솔루션의 경우 부분 SAS WWN으로 드라이브를 식별하는 테이블과 레이블 세트가있는 것이 좋습니다 . 이것은 내가 사용하는 LSI 컨트롤러의 기능입니다.

    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

여기에 이미지 설명을 입력하십시오

이 작업을 수행하는 데는 몇 가지 옵션이 있습니다. 하나는 OEM 및 통합 자에게 제공 되는 상용 SanTools SMARTmon 유틸리티 입니다. 외부 JBOD 장치 의 SCSI 엔클로저 서비스 (SES) 기능을 활용 하지만 내부 디스크에도 마법이 있습니다.

사용중인 컨트롤러에 따라 옵션이있을 수도 있습니다. 마더 보드 컨트롤러 또는 특수 목적의 비 RAID SAS HBA를 사용하고 있습니까?


참고 : cXtYdZ 표기법은 Solaris 전용입니다. 대부분의 Linux 배포판에는 WWN 포함 이름에서 /dev/sdX스타일 이름으로의 심볼릭 링크가 포함 된 / dev / disk / by-id / 디렉토리가 있습니다. FreeBSD에 비슷한 것이 있다면 전혀 모른다.
the-wabbit

지금은 SATA 드라이브를 사용하는 동안 마더 보드를 사용하고 있습니다. 가까운 시일 내에 SAS로 마이그레이션 할 수 있습니다. 또한 스티커로 베이에 라벨을 붙이는 것을 제안하는 것을 정확하게 고려하고있었습니다. 전용 비 RAID SAS HBA로 전환하는 것이 장기적으로 진행되는 방법입니다. * nix를위한 CLI API를 가진 하나는 케이크 위에 착빙을 넣을 것입니다;)
Timothy C. Quinn

9

디스크를 식별하는 가난한 사람의 수단은 a를 발행하고 dd if=/dev/daX of=/dev/null어떤 디스크의 활동 LED가 가장 빠르게 깜박이는지 확인하는 것입니다. 물론 시스템의 다른 디스크에 대해서는 활동이 적은 기간이 필요하지만 매우 일반적입니다.

작동하는 (LSI) SAS 컨트롤러가 sas2ircu있는 경우이를 사용하여 "display"명령을 실행하여 사용 가능한 드라이브 및 해당 직렬을 나열한 다음 "LOCATE"명령을 실행하여 인클로저의 표시등을 깜박일 수 있습니다.


"활동 부족"대신 디스크를 마운트 해제하고 순찰 작업을 종료하여 모든 I / O를 중지하는 것이 좋습니다.
로마

1
sas2ircu FTW! 고마워요, 당신은 저를 구했습니다. 덧붙여서, 나는 하나의 미니 -sa를 가진 supermicro 12 베이 백플레인을 가진 IT 플래시 LSI HBA를 가지고 있습니다. supermicro mobo, e3-1230v3, 32gb ecc에서 실행 최신 FreeNAS 9.3을 실행 중입니다. LOCATE 명령이 빨간색으로 깜박임 (오류) LED가 정상 작동 상태로 파란색 활동 LED를 남깁니다. 디스플레이 명령은 LSI 컨트롤러가 # 0이지만 인클로저가 # 2로 나타납니다 (mobo sata 2 및 sata 3 컨트롤러가 # 0 및 # 1 일 가능성이 있지만 추측입니다).
Therealstubot

4

나는 이것이 오래된 질문이라는 것을 알고 있지만, 내가 모은 조각 중 일부를 내게 주었고, 나는 내 상황과 거의 일치하기 때문에 내가 작성한 스크립트를 다시 찍을 것이라고 생각했다. : http://www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zip 및 포트, bash 및 sg3_utils

몇 가지 가정을합니다. 주된 것은 컨트롤러 0에 연결되어 있다고 생각합니다 sas2ircu list. 컨트롤러 번호를 식별하는 데 사용할 수 있습니다.

선택된 풀을 확인합니다 (zpool 상태를 통해). 오류가없는 경우 :

  • 인클로저 슬롯에 장치 이름을 매핑하여 파일을 /root/.sas2ircu/drives에 저장하십시오.
  • 이 스크립트에 의해 이전에 활성화 된 LED를 끕니다 (/root/.sas2ircu/locs에 저장 됨)

오류가있는 경우 :

  • zpool 상태의 전체 출력을 이메일로 보내기
  • 고장난 드라이브의 LED를 활성화합니다 (그리고 활성화 된 위치를 /root/.sas2ircu 위치에 저장하여 나중에 비활성화 할 수 있도록합니다)

어쨌든 여기 스크립트가 있습니다. 나는 매시간 cron 작업으로 실행합니다.

#! /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

3

FreeBSD에 대해서는 모르겠지만 Linux에는 Intel이라는 소프트웨어 모음이 ledmon(8)있으며 사용자 공간 프로그램 ledctl(8)을 사용하여 SuperMicro SC847E26-RJBOD1의 특정 드라이브에서 "위치 찾기"LED를 플래시하여 드라이브를 제어했습니다. LSI SAS3008 HBA (MegaRAID 아님) :

$ sudo ledctl locate=/dev/sdce

그런 다음 위치를 찾으면 "위치"LED를 끕니다.

$ sudo ledctl locate_off=/dev/sdce

sgpio(1) HBA와 백플레인 간의 통신에 필요합니다.


2

나는 이것이 오래된 질문이라는 것을 알고 있지만 FreeBSD> = 10.3 sesutil locate da2 on에서 검색하는 사람들에게는 / dev / sesN 장치를 제공하는 인클로저에있는 경우 da2의 LED를 켜는 데 사용할 수 있습니다 .


1

드라이브 캐리어 LED (활동 LED 아님)를 비추는 표준화 된 추상 소프트웨어 인터페이스가 없습니다. 이는 하드웨어에 따라 크게 다릅니다. 즉, 적절한 명령을 컨트롤러에 보내려면 스토리지 컨트롤러 도구 (사용중인 RAID 카드 유틸리티)가 여전히 필요합니다. 이 소프트웨어를 호출하거나 구현하는 방법은 물론 스토리지 컨트롤러 제조업체 / 공급 업체에 따라 다릅니다.

(백플레인, 캐디 및 드라이브와 통신하는 스토리지 컨트롤러가 여전히 필요하기 때문에 SW를 습격하는 것은 중요하지 않습니다.)

저렴한 O 컨트롤러와 함께 엔터프라이즈 급 드라이브 캐디를 사용하는 경우 운이 좋지 않을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.