web-dev-qa-db-ja.com

smartctl&megaraid:アダプターに適したデバイスノードを見つける方法#

以下を使用して、すべてのメガRAIDアダプター上の物理ドライブをリストできます。

megacli -PDList -aALL 

これにより、各アダプターのアダプター番号が表示され、それらに接続されている物理ドライブがリストされます。

PDList出力の個々のデバイスには、smartctlコマンドに使用されるデバイスIDもあります。デバイスID 3の場合:

smartctl -a -d sat+megaraid,3 /dev/sda

どちらのコマンドも同じデバイスIDを使用するため、問題はありません。しかし、アダプターをデバイスノードに適切にマッピングするにはどうすればよいですか?

CentOS 6でsmartmontools-5.43-1.el6を実行しています。ソースコードを見ると、ioctlから取得したバス番号/ Host_noが必要なようですSG_GET_SCSI_IDまたはSCSI_IOCTL_GET_BUS_NUMBER指定されたデバイスノード。これは、MegaCLIの出力で「アダプター#」として使用されている番号と同じですか?

実際には私の場合、おそらく/ dev/sdaへのハードコーディングを回避できますが、もっと良い方法があるかどうか知りたいのですが。

4
lmz

これは私が以前にやった方法です。もっと良い方法があるかもしれません。

MegaCLIからアダプターのPCIバスIDを取得します。

/opt/MegaRAID/MegaCli/MegaCli64 -adpgetpciinfo -a0 | grep Bus
Bus Number      : 2

この場合、BUS = 2です。次に、そのBUS上のデバイスのPCIテーブルを調べ、「hostX」エントリを探します。

ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/ | grep Host
host0

したがって、Host = host0です。
今、そのホストディレクトリでターゲットを探します

ls /sys/bus/pci/devices/0000\:0${BUS}\:00.0/${Host}/ | grep target
target0:2:0

SCSIターゲットIDは0:2:0(ホスト0:チャネル2:ターゲット0)です。

SCSIターゲットをlsscsiの出力と一致させます

# lsscsi 
[0:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sda 
[1:2:0:0]    disk    LSI      MR9271-8i        3.24  /dev/sdb 
[2:0:0:0]    disk    ATA      INTEL SSDSC2BA80 5DV1  /dev/sdc

MegaCLIアダプターa0は/ dev/sdaに対応します(この場合、0:2:0は〜= 0:2:0:0です。最後の0はLUN IDです)

アダプターa1に同じ方法を使用すると、バス番号3、Host1、およびターゲット値1:2:0が取得されます。これは/ dev/sdbにマップされます。

4
Daniel Lawson

smartctl --scanを実行して、デバイスIDとRAIDタイプを含む、接続されているすべてのデバイスを印刷します。

# smartctl  --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/bus/0 -d megaraid,0 # /dev/bus/0 [megaraid_disk_00], SCSI device
/dev/bus/0 -d megaraid,1 # /dev/bus/0 [megaraid_disk_01], SCSI device
/dev/bus/0 -d megaraid,2 # /dev/bus/0 [megaraid_disk_02], SCSI device

別の出力:

# smartctl  --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/bus/0 -d megaraid,5 # /dev/bus/0 [megaraid_disk_05], SCSI device
/dev/bus/0 -d megaraid,7 # /dev/bus/0 [megaraid_disk_07], SCSI device

ここで、megaraidはRAIDタイプであり、5,7はデバイスIDです

4
Seff