답변:
대부분의 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를 사용하고 있습니까?
디스크를 식별하는 가난한 사람의 수단은 a를 발행하고 dd if=/dev/daX of=/dev/null
어떤 디스크의 활동 LED가 가장 빠르게 깜박이는지 확인하는 것입니다. 물론 시스템의 다른 디스크에 대해서는 활동이 적은 기간이 필요하지만 매우 일반적입니다.
작동하는 (LSI) SAS 컨트롤러가 sas2ircu
있는 경우이를 사용하여 "display"명령을 실행하여 사용 가능한 드라이브 및 해당 직렬을 나열한 다음 "LOCATE"명령을 실행하여 인클로저의 표시등을 깜박일 수 있습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만, 내가 모은 조각 중 일부를 내게 주었고, 나는 내 상황과 거의 일치하기 때문에 내가 작성한 스크립트를 다시 찍을 것이라고 생각했다. : 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 상태를 통해). 오류가없는 경우 :
오류가있는 경우 :
어쨌든 여기 스크립트가 있습니다. 나는 매시간 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
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와 백플레인 간의 통신에 필요합니다.
드라이브 캐리어 LED (활동 LED 아님)를 비추는 표준화 된 추상 소프트웨어 인터페이스가 없습니다. 이는 하드웨어에 따라 크게 다릅니다. 즉, 적절한 명령을 컨트롤러에 보내려면 스토리지 컨트롤러 도구 (사용중인 RAID 카드 유틸리티)가 여전히 필요합니다. 이 소프트웨어를 호출하거나 구현하는 방법은 물론 스토리지 컨트롤러 제조업체 / 공급 업체에 따라 다릅니다.
(백플레인, 캐디 및 드라이브와 통신하는 스토리지 컨트롤러가 여전히 필요하기 때문에 SW를 습격하는 것은 중요하지 않습니다.)
저렴한 O 컨트롤러와 함께 엔터프라이즈 급 드라이브 캐디를 사용하는 경우 운이 좋지 않을 수 있습니다.
/dev/sdX
스타일 이름으로의 심볼릭 링크가 포함 된 / dev / disk / by-id / 디렉토리가 있습니다. FreeBSD에 비슷한 것이 있다면 전혀 모른다.