部屋を掃除したら漫画が沢山出てきたので書く日記

漫画とか合唱とかUNIXとかLinuxとかについて書く日記です。

LinuxでSCSIデバイス(sdデバイスとsgデバイス)の対応を調べる

LinuxSCSIバイスを示す、sdデバイス(/dev/sdX)とsgデバイス(/dev/sgX)の対応を調べる必要があったので手順をメモします。

お前は何を言っているんだ

www.ibm.com

に、

Linux での SCSIバイスには多くの場合、ユーザーがそのデバイスを認識しやすいような名前が付けられます。例えば最初の SCSI CD-ROMは /dev/scd0 です。SCSI ディスクには /dev/sda、/dev/sdb、/dev/sdc のようなラベルが付けられます。デバイスの初期化が終わると、LinuxSCSI ディスク・ドライバー・インターフェース (sd) が SCSI READ と SCSI WRITE コマンドのみを送信します。

これらの SCSIバイスは汎用的な名前すなわちインターフェース (/dev/sg0、/dev/sg1、/dev/sga、/dev/sgb など) を持っている場合があります。これらの汎用ドライバー・インターフェースを利用すると、SCSIバイスに直接 SCSI コマンドを送信することができ、通常 SCSI ディスク上に作成されてディレクトリー配下にマウントされるファイルシステムを使う必要がなくなります。

と記されている、

  • 「/dev/sda、/dev/sdb、/dev/sdc」のような表記のものをsdデバイス
  • 「/dev/sg0、/dev/sg1」のような表記のものをsgデバイス

と仮に呼ぶ事にします。

で、以下のような事情があります。

  • sdデバイスは一対一でsgデバイスに対応している。(例:/dev/sdbは/dev/sg3と対応)
  • SCSIリザーブなどのオペレーションをする時にはsgデバイスを指定する必要がある
  • sdデバイスの一覧と、sgデバイスの一覧は探しやすい(/dev以下をlsとかすればOK)
  • しかしどのsdデバイスがsgデバイスと対応しているかはわかりにくい

という事で、sdデバイスとsgデバイスの対応を調べる必要がありました。

前提条件

Ubuntu 19.10
CentOS 6

で確認しました。

方法1.sg_mapコマンドで確認する

$ sudo sg_map -i

以下のように表示される。

/dev/sg0  /dev/sda  ATA       TOSHIBA DT01ACA3  ABB0
/dev/sg1  /dev/sdb  ATA       TOSHIBA DT01ACA3  ABB0
/dev/sg2  /dev/sdc  ATA       WDC WD15EARS-00Z  0A80
/dev/sg3  /dev/sdd  ATA       WDC WD15EARS-00Z  0A80

これによって

sg0がsda
sg1がsdb
:

と対応していることがわかります。

この手順を使う条件

sg3-utilsがインストールされている事と、スーパユーザ権限で実行する必要あります。

Ubuntuの場合は

sudo apt install sg3-utils

CentOSの場合は

sudo yum install sg3_utils.x86_64

でインストールできます。

方法2./proc以下のファイルで確認

$ cat /proc/scsi/sg/device_strs

以下のように表示されます。

ATA             TOSHIBA DT01ACA3        ABB0
ATA             TOSHIBA DT01ACA3        ABB0
ATA             WDC WD15EARS-00Z        0A80
ATA             WDC WD15EARS-00Z        0A80

上から順に、1行目がsg0、2行目がsg1・・・となる。
あとはデバイス情報から何となくsdデバイスが何かを推測する。

この手順を使う条件

/proc以下のファイルの読み取り権限のあるユーザで実行する必要があります。

何らかの都合(お客様システムのサーバである、など)でsg3-utilsがインストールできない場合はこちらの方法でがんばって調べましょう。


では。