ZPoolに6つのディスクを備えたSuperMicro 2Uサーバーで実行しています。 FreeBSDのツールからコマンドを実行して、ドライブキャリアLEDを使用して各ドライブベイを識別したいと思います。これを行う方法はありますか?
ドライブがRAIDカード上で実行されている場合は、RAIDカードユーティリティを使用して各ディスクを識別できますが、私の場合、ハードウェアRAIDはありません。
FreeBSDまたはLinuxでこれを行うツールはありますか?
ほとんどの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
これを機能させるには、いくつかのオプションがあります。 1つは、OEMおよびインテグレータが利用できる商用の SanTools SMARTmonユーティリティ です。外部JBODユニットの SCSI Enclosure Services(SES) 機能を利用しますが、内部ディスクにも魔法があります。
使用しているコントローラーによっては、オプションがある場合もあります。マザーボードコントローラまたは専用の非RAIDを使用していますかSAS HBA?
貧しい人がディスクを識別する手段は、dd if=/dev/daX of=/dev/null
そして、どのディスクのアクティビティLEDが最も速く点滅しているかを確認します。もちろん、これはシステム内の他のディスクのアクティビティが少ない期間を必要としますが、非常に一般的です。
(LSI)がある場合SASで動作するコントローラ sas2ircu
次に、それを使用して「display」コマンドを発行し、使用可能なドライブとそのシリアルを一覧表示してから、「LOCATE」コマンドを実行してエンクロージャーのライトを点滅させます。
私はこれが古い質問であることを知っていますが、私がまとめたいくつかのピースを与えてくれました。これは私の状況にほぼ正確に一致しているので、思いついたスクリプトを撃ち返すと思いました:sas2ircuが必要です: 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 statusを使用)。エラーがない場合は、次のようになります。
エラーがある場合は、次のようになります。
とにかく、ここにスクリプトがあります。毎時の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)
を使用してLSI SAS3008 HBA(MegaRAIDではない)によって制御されているドライブを持つSuperMicro SC847E26-RJBOD1の特定のドライブの「locate」LEDを点滅させます。
_$ Sudo ledctl locate=/dev/sdce
_
次に、それを見つけたら、「locate」LEDをオフにしました。
_$ Sudo ledctl locate_off=/dev/sdce
_
sgpio(1)
は、HBAとバックプレーン間の通信に必要です。
私はこれが古い質問であることを知っていますが、FreeBSD> = 10.3では、これに当たったサーチャーのために、sesutil locate da2 on
を使用して、/ dev/sesNデバイスを提供するエンクロージャにあるda2のLEDをオンにすることができます。
ドライブキャリアLED(アクティビティLEDではない)を照らすための標準化された抽象化ソフトウェアインターフェイスはありません。これはハードウェアに大きく依存します。これは、適切なコマンドをコントローラーに送信するために、ストレージコントローラーツール(あなたが言っているRAIDカードユーティリティ)が依然として必要であることを意味します。このソフトウェアの呼び出し方法や実装方法は、もちろん、ストレージコントローラーの製造元/ベンダーによって異なります。
(バックプレーン、キャディ、およびドライブと通信するストレージコントローラーが明らかに必要なため、ソフトウェアRAIDが適切に配置されているかどうかは関係ありません。)
安価なコントローラを備えたエンタープライズグレードのドライブキャディを使用している場合、運が悪い場合があります。