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

ここに画像の説明を入力してください

これを機能させるには、いくつかのオプションがあります。1つは、OEMおよびインテグレーターが利用できる商用のSanTools SMARTmonユーティリティです。外部JBODユニットのSCSI Enclosure Services(SES)機能を利用しますが、内部ディスクにも魔法があります。

使用しているコントローラーによっては、オプションが表示される場合もあります。マザーボードコントローラまたは専用の非RAID SAS HBAを使用していますか?


注:cXtYdZ表記はSolarisのみです。ほとんどのLinuxディストリビューションには、WWNを含む名前から/dev/sdXスタイル名へのシンボリックリンクを含む/ dev / disk / by-id /ディレクトリがあります。FreeBSDに似たものがあれば、わかりません。
the-wabbit 2013

今のところSATAドライブを使用しているので、マザーボードを使用しています。近いうちにSASに移行する可能性があります。また、ベイにステッカーを貼るだけで、あなたが提案することを正確に行うことも検討していました。専用の非RAID SAS HBAへの切り替えのように聞こえるのは、長い目で見れば道のりです。* nixのCLI APIを備えたものは、アイシングを簡単に行うことができます;)
Timothy C. Quinn

9

貧しい人がディスクを識別する手段は、を発行してdd if=/dev/daX of=/dev/null、どのディスクのアクティビティLEDが最も速く点滅しているかを確認することです。もちろん、これはシステム内の他のディスクのアクティビティが少ない期間を必要としますが、非常に一般的です。

動作する(LSI)SASコントローラーがあるsas2ircu場合は、それを使用して「display」コマンドを発行し、使用可能なドライブとそのシリアルをリストしてから、「LOCATE」コマンドを実行してエンクロージャーのライトを点滅させることができます。


「アクティビティが少ない」の代わりに、ディスクのマウントを解除してパトロールジョブを停止することにより、すべてのI / Oを停止することをお勧めします。
ローマ

1
sas2ircu FTW!ありがとう、あなたは私を救った。ちなみに、私は、1つのmini-sasを備えた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 2015

4

私はこれが古い質問であることを知っていますが、私がまとめたいくつかのピースを与えてくれました。これは私の状況にほぼ正確に一致しているので、思いついたスクリプトを撃ち返すと思いました:sas2ircuが必要です:http : //www.avagotech.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_6g_p20/SAS2IRCU_P20.zipおよびports、bash、sg3_utilsから

それはいくつかの仮定を行いますが、主なものはそれがコントローラー0に接続されていることですsas2ircu list。コントローラー番号を識別するために使用できます。

選択したプールをチェックします(zpool statusを使用)。エラーがない場合は、次のようになります。

  • エンクロージャースロットへのデバイス名のマッピングを含むファイルを(/root/.sas2ircu/drivesに)保存します
  • このスクリプトによって以前にアクティブ化されたLEDをオフにします(これは/root/.sas2ircu/locsに保存されています)

エラーがある場合は、次のようになります。

  • zpool statusの完全な出力をメールで送信します
  • 障害が発生したドライブのLEDをアクティブにします(アクティブ化する場所を/root/.sas2ircu locsに保存して、後で非アクティブ化できるようにします)。

とにかく、ここにスクリプトがあります。毎時の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の特定のドライブの「locate」LEDを点滅させています。 LSI SAS3008 HBA(MegaRAIDではない):

$ sudo ledctl locate=/dev/sdce

次に、それを見つけたら、「locate」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カードユーティリティ)が必要です。このソフトウェアの呼び出し方法や実装方法は、もちろん、ストレージコントローラーの製造元/ベンダーによって異なります。

(バックプレーン、キャディ、ドライブと通信するストレージコントローラが明らかに必要なため、ソフトウェアRAIDが適切に配置されているかどうかは関係ありません。)

安価なコントローラを備えたエンタープライズクラスのドライブキャディを使用している場合、運が悪い場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.