Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

VMware ESX ホストにある RHEL ゲスト内のディスクの WWID を取得する方法

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux (RHEL) 5、6、7、8
    • VMware ESX 4.1

Issue

  • scsi_id コマンドを VMware 仮想ディスクに対して実行すると、ディスク WWID を返さないのはなぜですか?[ANS]
  • VMware 仮想ディスクで scsi_id コマンドを実行すると、出力が返されません。[ANS]
  • udev ルール用の VMware ゲストディスクの WWID が必要ですが、どのように検索すればいいですか?[ANS]
  • ハイパーバイザーから割り当てられたディスクリソース情報がある場合、RHEL ゲストでディスクの sdX 名を見つけるにはどうすればいいですか?[ANS]
  • RHEL ゲスト内の sdX 名がわかっている場合、VMware ハイパーバイザー内で割り当てられたリソースを特定するにはどうすればいいですか?[ANS]
  • VMware ゲストから WWID を取得するにはどうすればいいですか?[ANS]
  • sd デバイスの WWID を見つけて、VMware エクスポートディスクの UDEV ルールを作成するにはどうすればいいですか?[ANS]
  • ESX ホスト上の RHEL ゲストでディスクの WWID を見つけるにはどうすればいいですか?[ANS]
  • WWID を使用して VMware ホスト側で sd デバイスを vmdk に一致させるにはどうすればいいですか?[ANS]
  • これは、VMware から RHEL ゲストにエクスポートされた vmdk ベースの仮想ディスクで機能しますか?[ANS]
  • VMware の SCSI ID から Linux の SCSI ID へのマッピングを見つける際に問題が発生します。ANS

  • マルチパスは VMware ゲスト上で "cannot get the the wwid for sdX" のエラーでマルチパスデバイスの作成に失敗し、multipath -v4 で次のエラーが表示されます。

    multipath -v4
    
    -----snip----
    
    /lib/udev/scsi_id exitted with 1
    cannot get the the wwid for sda
    

Resolution

 


ゲストへのディスク ID エクスポートを有効化するための VMware ハイパーバイザーの手順

免責条項: Red Hat により提供される以下の情報は、公開されているサービスレベルアグリーメントおよびサポートプログラムの対象ではありません。情報はそのままの状態で提供され、本アーティクルの情報から作成された構成設定またはアプリケーションのインストールにより、オペレーティングシステムが Red Hat Global Support Services のサポートを受けられなくなる場合があります。本アーティクルの目的は、システムのニーズを満たす情報を提供することです。本アーティクルの情報は、ユーザー自身の責任において使用してください。

注意!

  • これらの手順が 期待どおりに機能しない 場合、または追加のガイダンスが必要な場合は、VMware テクニカルサポートにお問い合わせください。
  • これ以降のバージョン (このバージョンを含む) のハイパーバイザーで VMware 設定を変更する方法について、詳しくは VMware テクニカルサポートにお問い合わせください。
  • VMware が vmdk ベースの WWID をエクスポートするために使用する機能と方法、および RHEL ゲストにエクスポートされるその他の仮想デバイスタイプは、VMware によって変更される場合があります。 以下に示す 手順 を適用しても、検証方法 で期待された値が表示されない場合は、VMware に連絡してサポートを受けてください。
  • RHEL7 リリース以降、scsi_id の場所が変更され、標準の PATH 検索では特定できなくなりました。 RHEL7 以降の場所は /usr/lib/udev/scsi_id です。 このドキュメントでは、一般的な説明の中でコマンドを参照する場合、このパスを参照します。 他のリリースでは、バージョンに適した `scsi_id` 構文を使用する必要があります。
  • 以下の手順は、VMware ESX 4.1 バージョンに適用されます。

    • 方法 #1:
      • 仮想マシンをシャットダウンします。
      • 左側のパネルで VM のエントリーを右クリックし、Edit Settings を選択します。
      • Options タブをクリックします。
      • 左側の Advanced -> General 項目を選択し、右側に表示される Configuration Parameters... ボタンをクリックします。
      • Add Row ボタンをクリックします。
      • 新しい行の名前として disk.EnableUUID を追加し、その値として TRUE を追加します (これらのエントリーには引用符を使用しないでください)。
      • OK をクリックして、新しく追加したパラメーターを ‘stick’ にします。
    • 方法 #2: ゲスト vmx ファイルを編集する

      • VMware ハイパーバイザー内のゲスト vmx ファイルを編集し、次の行を追加しても、同じ結果を得ることができます。
      disk.EnableUUID = "TRUE"
      
    • 変更を適用するには、VMware ゲストの電源を入れるか再起動します。

検証

  • ESX 内で disk.UUID 属性を有効にする 手順 が適用されている
  • ESX 内で disk.UUID を有効化した後に、仮想マシンゲストの電源をオンにした、または再起動した
  • scsi_id コマンドを使用して、WWID (disk.UUID) が VMware ハイパーバイザーから RHEL ゲストに提供されていることを確認する。たとえば /dev/sda の WWID を取得するには、次のコマンドを実行します。scsi_id で出力が生成されない場合は、VMware に連絡して追加の ESXi 設定サポートを受けてください。

    • RHEL7 および RHEL8 の場合

          # /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda
          36000c2931a129f3c880b8d06ccea1b01
      
    • RHEL6 の場合

          # scsi_id --whitelisted --replace-whitespace --device=/dev/sda
          36000c2931a129f3c880b8d06ccea1b01
      
    • RHEL5 の場合

          #scsi_id -g -u -s /block/sdb
          36000c2931a129f3c880b8d06ccea1b01
      

udev ルール内で WWID を使用する方法

  • WWID を udev ルール内で使用することは、アクションを適用するディスクを識別する場合に推奨される方法です。 カーネルが割り当てた 'sda' などの名前は、起動後も永続するものではありません。 udev ルールの一般的なアクションは、システム内で使用する永続的なユーザー指定のディスク名をセットアップすることです。 たとえば、以下は指定したデバイスへの /dev/mydeviceX リンクをセットアップします (X はパーティション番号)。

    • RHEL8 udev ルールの構文

          KERNEL=="sd*", ENV{ID_SERIAL}=="36000c2931a129f3c880b8d06ccea1b01",  SYMLINK+="mydevice%n"
      
    • RHEL7 udev ルールの構文

          KERNEL=="sd*", BUS=="scsi", PROGRAM=="/lib/udev/scsi_id --whitelisted --replace-whitespace --device=%N",    \ 
              RESULT=="36000c2931a129f3c880b8d06ccea1b01",         SYMLINK+="mydevice%n"
      
    • RHEL6 udev ルールの構文

          KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=%N",    \ 
              RESULT=="36000c2931a129f3c880b8d06ccea1b01",         SYMLINK+="mydevice%n"
      
    • RHEL5 udev ルールの構文

          KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p",  RESULT=="36000c2931a129f3c880b8d06ccea1b01",  \
              SYMLINK+="mydevice%n"
      

ハイパーバイザーおよびゲストの同一ディスクを識別する方法

一意で共通の永続的なディスク識別子で以下を可能にする必要がある、一般的な問題が発生する可能性があります。

  • VMware ハイパーバイザー内のゲスト sdX ディスクから同じ識別子を使用して、ゲスト側でメディアエラーを発生させている vmdk リソースを特定します。
  • sdX 名は起動間での一貫性が保証されないため、ゲスト sdX ディスクからの同じ識別子を udev ルールに使用します。
  • VMware ハイパーバイザー内の vmdk から同じ識別子を使用して、ゲスト側で新しく追加された sdX ディスク名を見つけます。
    • ゲストのディスクを追加または削除すると、カーネルに割り当てられた sdX 名が変更される可能性があります。 さらに、scsi アドレスも変更される可能性があります。

これは、以下のように説明できます。

新しい SAN ディスクがゲストに追加または削除されると、SCSI コントローラー ID シーケンスに差異が発生します。 /dev/sdn の scsi ID は、VMwark 側が SCSI[0:11] で、ゲスト側は [21:0:0:0] ですが [22:0:0:0] に変更され、SAN ディスクの追加/削除に伴い元に戻されていました。 この方法の場合、サーバー上で正確な SCSI ID を見つけ、それを vmware ディスクと一致させるにはどうすればいいですか?

解決策は、起動間で 永続しない カーネル割り当て識別子 (scsi アドレスや sdX 名など) を使用する代わりに、再起動後も 永続する ディスク自体から提供される自己識別子を使用することです。 このように、検出時におけるディスクの物理的または仮想的な順序や移動の有無、あるいはディスクが追加または削除されたかにかかわらず、常に同じ識別子を使用してデバイスを確実に識別することができます。 これにより、udev ルール、デバイスのマウント、およびその他のシステム管理タスクで、現在の管理アクションのターゲットであるディスクを常に正しく指定できます。

要約:

  • 非永続的: sdX および [21:0:0:0] scsi アドレスはカーネルの検出順序に関連付けられており、その検出順序に基づいてカーネルに割り当てられます。
    • 並列検出順序、割り当てられた sdX 名、scsi アドレスなどは、再起動後も一貫性があるとは限りません
    • ゲストに割り当てられた LUN の追加または削除により、検出順序と、結果的に sdX 命名割り当てが変更される可能性があります
    • RHEL カーネルに割り当てられた scsi アドレスから sdX 名までの指定は、ゲスト上のデバイス専用であり、ハイパーバイザーに表示される値と同じではありません
  • 永続的: ディスク (vmdk ディスクを含む) に関連付けられている識別子。カーネルに割り当てられた sdX 名または scsi アドレスにかかわらず、ディスクの同じ永続的識別子が返されます。
    • デバイスの永続的な識別子は、ハイパーバイザーまたはゲスト内におけるデバイスの永続的識別子は同一であるため、両方でその識別子を検索キーで使用して同じデバイスを特定できます
    • デバイスの永続的な識別子は起動後も同じであるため、udev ルールやその他のコマンドでこの永続的な識別子を使用して、毎回同じデバイスにアクションを適用できます

ディスクの WWID を使用して、ESX またはゲストで同じデバイスを見つけることができます。

デバイスの WWID (World Wide IDentifier) は、上記の問題に対する技術的な解決策です。 WWID は永続的です。VMware ハイパーバイザー内では、ゲストが WWID を使用できるかどうかは disk.UUID 機能によって制御されます。 上記の手順 に従い、ハイパーバイザー内で disk.UUID を有効にします。

カーネルのドキュメント内の非永続的および永続的なデバイス名に関する追加情報を参照してください。

よくある質問

  • scsi_id コマンドを VMware 仮想ディスクに対して実行すると、ディスク WWID を返さないのはなぜですか?
  • VMware 仮想ディスクで scsi_id コマンドを実行すると、出力が返されません。

ハイパーバイザー内で disk.UUID VMware 機能を有効にする必要があります。 上記の手順 に従います。 これは、vmdk でプロビジョニングされたデバイスや、VMware がゲストに提供するその他の仮想デバイスで有効です。

disk.UUID VMware 機能が有効になっていない場合、scsi_id は出力を生成しません。

# /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda
#

カーネルは、WWID やその他の一意の識別子を提供するために、デバイスから返された情報に依存します。 仮想ディスクの場合、この情報は VMware ハイパーバイザーによって提供される必要があります。

この情報を取得するために scsi_id コマンド内で使用される一般的な方法は、scsi INQUIRY コマンドからの出力を使用して、ページ 83 (デバイス ID) から、それが利用できない場合は ページ 80 (ユニットのシリアル番号) から、VPD (重要な製品データ) 情報を取得する方法です。 RHEL ゲストに提供される vmdk ベースの仮想ディスクの場合、ハイパーバイザー内で `disk.UUID` 機能が有効になるまで、これらのページは使用できません。 したがって、仮想ディスクの `scsi_id` から空白の出力が生成される場合、その根本的な原因は、ハイパーバイザーから提供される適切な VPD 情報が不足していることです。 これを修正するには、上記の手順に従って、VMware ハイパーバイザー内で disk.UUID 機能を有効にします。

`sg3_utils` パッケージの次のコマンドを使用して、ハイパーバイザーが WWID を提供しているかどうかを確認できます。

  • disk.UUID が無効な場合
    # sg_inq -p 0x83 /dev/sda
        VPD INQUIRY: Device Identification page
            inquiry: field in cdb illegal (page not supported)
  • disk.UUID が有効な場合
    # sg_inq -p 0x83 /dev/sda
        VPD INQUIRY: Device Identification page
          Designation descriptor number 1, descriptor length: 20
            designator_type: NAA,  code_set: Binary
            associated with the Addressed logical unit
              NAA 6, IEEE Company_id: 0x0c29
             Vendor Specific Identifier: 0x31a129f3c
              Vendor Specific Identifier Extension: 0x880b8d06ccea1b01
              [0x600.0c293.1a129f3c880b8d06ccea1b01]

 


  • これは、VMware から RHEL ゲストにエクスポートされた vmdk ベースの仮想ディスクで機能しますか?

はい、機能します。 vmdk デバイスで disk.UUID を有効にすると、ゲストが sdX 仮想ディスクの WWID を取得できるようになります。

 


  • udev ルール用の VMware ゲストディスクの WWID が必要ですが、RHEL ゲスト上でどのように検索すればいいですか?
  • VMware ゲスト (RHEL sdX ディスク) から WWID を取得する方法を教えてください。

scsi_id コマンドを使用して、sdX デバイスの WWID を取得します。

# /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda
36000c2931a129f3c880b8d06ccea1b01

空白の場合は、VMware ハイパーバイザー内で disk.UUID が 有効化されているか検証 します。 問題が解決しない場合は、VMware にお問い合わせください。

 


  • ハイパーバイザーから割り当てられたディスクリソース情報があることがわかっている場合、RHEL ゲストでディスクの sdX 名を見つけるにはどうすればいいですか?
  • sd デバイスの WWID を見つけて、VMware エクスポートディスクの UDEV ルールを作成するにはどうすればいいですか?
  • ESX ホスト上の RHEL ゲストでディスクの WWID を見つけるにはどうすればいいですか?

VMware ハイパーバイザーの disk.UUID を使用して、各 RHEL ゲスト sdX で一致するものを検索します。以下に例を示します。

# ls -1cv /dev/sd* | grep -v [0-9] | while read disk; do  \
echo -n "$disk " ; /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=$disk ; done | grep 36000c2931a129f3c880b8d06ccea1b01
/dev/sda 36000c2931a129f3c880b8d06ccea1b01

scsi_id の出力が空白の場合は、VMware ハイパーバイザー内の disk.UUID 機能が有効化されていることを検証 します。 問題が解決しない場合は、VMware にお問い合わせください。

 


  • RHEL ゲスト内の sdX 名がわかっている場合、VMware ハイパーバイザー内で割り当てられたリソースを特定するにはどうすればいいですか?
  • WWID を使用して VMware ホスト側で sd デバイスを vmdk に一致させる方法

問題の sdX の RHEL ゲスト側から WWID を取得します。

# /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda
    36000c2931a129f3c880b8d06ccea1b01

VMWare ハイパーバイザー側で一致する WWID を見つけます。

  • ESX(i) コンソールから
    # vmkfstools -J getuuid /vmfs/volumes/datastore/rhel/rhel.vmdk
                60 00 c2 93 1a 12 9f 3c 88 0b 8d 06 cc ea 1b 01

Root Cause

  • デフォルトでは、VMware は仮想ディスクの WWID (エクスポート UUID) を Linux ゲストに報告しません。
    • パススルーデバイス (非 vmdk デバイス) のデフォルトは異なり、その情報を提供しない実際のストレージハードウェアがさらに制限されていない限り、WWID を Linux に報告する必要があります。

Diagnostic Steps

disk.EnableUUIDTRUE に設定せずに以下を実行します。

# /sbin/scsi_id -g -u -s /block/sdb
#

何も返されない場合、ディスクの WWID は特定できません。

VMWare ハイパーバイザー内からの UUID のエクスポートを 有効化した後 の出力例:

# cat /sys/block/sda/device/model 
VMware Virtual S

# scsi_id --whitelisted /dev/sda
36000c2937ec2f4b3e090f5b8f4b2bef2

# ls -l /dev/disk/by-id | grep sda
lrwxrwxrwx. 1 root root 10 Jul 30 17:23 wwn-0x6000c2937ec2f4b3e090f5b8f4b2bef2 -> ../../sda
あるデバイスは SCSI ID を返すが、別のデバイスは返さない例

設定には、sda と sdb の 2 つのディスクがあります。 デバイス sdb はパススルーデバイスとして表示されます。

# echo " " ; echo "#scsi_addr   Type    Vendor   Model            Rev    sdN" ; \
  echo "#----------- ------- ------- ----------------- ------ ------------- " ; \
  lsscsi

#scsi_addr   Type    Vendor   Model            Rev    sdN           
#----------- ------- ------- ----------------- ------ ------------- 
[0:0:0:0]    disk    VMware   Virtual disk     1.0    /dev/sda                                     
[2:0:2:0]    disk    DGC      VRAID            0532   /dev/sdb 

次のコマンドは、設定内のすべての/dev/sd* の scsi 識別子をすべて一覧表示する必要があります。

# ls -v -1c /dev/sd*[!0-9] | xargs -I {}  sh -c 'echo -n "{} : " ; /lib/udev/scsi_id --whitelisted --device={}'
sda : sdb : 360060160dfc02c00ce7fabaf69999999

scsi_id はデバイス sda の情報を返しませんでした。 追加のデバッグ情報を収集するために、strace を使用して 2 つの scsi_id コマンドを繰り返します。 scsi_id がデバイス ID を出力する正常なデバイスの場合は、以下のようになります。

# strace /lib/udev/scsi_id --whitelisted --device=/dev/sdb
:
123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.
  open("/dev/sdb", O_RDONLY|O_NONBLOCK)   = 3
  fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 32), ...}) = 0
  ioctl(3, SG_IO, {'Q', 0 /* SG_DXFER_??? */, cmd[0]=[], mx_sb_len=0,
     iovec_count=0, dxfer_len=6, timeout=0, flags=0x20}) = -1 EINVAL (Invalid argument)
A ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 00, 00, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,  
     data[254]=["\0j\0042\2748\20\2DGC     VRAID           "...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
  close(3)                                = 0
  open("/etc/scsi_id.config", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
  open("/dev/sdb", O_RDONLY|O_NONBLOCK)   = 3
B ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 00, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,
     data[254]=["\0\0\0\10\0\200\203\205\260\261\262\300    VRAID           "...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
C ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 80, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,
     data[254]=["\0\200\0\16APM00131904965AID           "...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
D ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 83, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,
     data[254]=["\0\203\0008\1\3\0\20`\6\1`\337\300,\0\316\177\253\257c5\345\21\1\0\0\20\0\2\0\0"...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
  close(3)                                = 0
  fstat(1, {st_mode=S_IFREG|0644, st_size=4576, ...}) = 0
  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff6e97d4000
E write(1, "360060160dfc02c00ce7fabaf69999999"..., 34360060160dfc02c00ce7fabaf699999991
    ) = 34
  exit_group(0)                           = ?

scsi_id コードは、標準の INQUIRY (A) コマンドを実行します。 その後、00 ページの INQUIRY (B) を実行すると、このデバイスでサポートされているすべての利用可能なページが返されます。 返されたページのリストには、シリアル番号が記載されているページ 80 と、WWID が記載されているページ 83 が含まれます。 次にページ 80 の INQUIRY (C) を実行し、最後にページ 83 の INQUIRY(D) を実行します。 これらすべてが正常に完了し、デバイスから取得された WWID が表示され (E)、scsi_id はステータス 0 で終了します。 WWID 自体は "60060160dfc02c00ce7fabaf69999999" です。"3" は、出力される scsi 識別子のソースとタイプを識別するために scsi_id によって文字列が追加されたことを示しています。 接頭辞と SCSI ID がどのように作成されるか、詳しくは How are SCSI ID generated? を参照してください。

識別子を返さなかったデバイス sda の場合は、以下のようになります。

# strace /lib/udev/scsi_id --whitelisted --device=/dev/sda
:
  open("/dev/sda", O_RDONLY|O_NONBLOCK)   = 3
  fstat(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
  ioctl(3, SG_IO, {'Q', 0 /* SG_DXFER_??? */, cmd[0]=[], mx_sb_len=0, iovec_count=0, dxfer_len=6, timeout=0, flags=0x20}) = -1 EINVAL (Invalid argument)
A ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 00, 00, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,
     data[254]=["\0\0\2\2\37\0\0sVMware  Virtual disk    "...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=0, info=0}) = 0
  close(3)                                = 0
  open("/etc/scsi_id.config", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
  open("/dev/sda", O_RDONLY|O_NONBLOCK)   = 3
B ioctl(3, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 00, 00, fe, 00],
     mx_sb_len=32, iovec_count=0, dxfer_len=254, timeout=5000, flags=0,
     data[254]=["\0\0\2\2\37\0\0sVMware  Virtual disk    "...], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=0, duration=1, info=0}) = 0
  close(3)                                = 0
  exit_group(1)                           = ?

ここで、data254= に表示される 00 ページの INQUIRY (B) に対する応答は、デバイス sdb で発生したページのリストではなく、(A) の出力で表示されるのと同じ標準の照会データです。 これは、このデバイスが照会ページをまったくサポートせず、その結果として scsi_id がデバイスからシリアル番号または WWID を取得できないことを意味します。scsi_id が必要とする照会ページは、これらのデバイスのハイパーバイザーでサポートされていません。 識別子は出力されず、ステータス 1 の scsi_id が存在します。 ハイパーバイザー内のこの vm ゲストのストレージ設定を変更し、ページ 00、80、および 83 を取得するためにデバイスに INQUIRY IO を送信すると、予期された必要なデータで正常に完了するように、この動作を修正する必要があります。

ゲストに sg3_utils パッケージがインストールされている場合は、同じ 3 つのコマンドを手動で実行できます。

# sg_inq /dev/sda
# sg_inq -p 0x00 /dev/sda   ; needs to return list of pages and must include at least page 80
# sg_inq -p 0x80 /dev/sda  
# sg_inq -p 0x83 /dev/sda

例 1: ページリストがサポートされていない場合

# sg_inq /dev/sda
standard INQUIRY:
  PQual=0  Device_type=0  RMB=0  version=0x02  [SCSI-2]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=1  Sync=1  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: disk
 Vendor identification: VMware,
 Product identification: VMware Virtual S
 Product revision level: 1.0 

# sg_inq -p 0x00 /dev/sda
standard INQUIRY:
  PQual=0  Device_type=0  RMB=0  version=0x02  [SCSI-2]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=1  Sync=1  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: disk
 Vendor identification: VMware,
 Product identification: VMware Virtual S
 Product revision level: 1.0 

# sg_inq -p 0x80 /dev/sda
VPD INQUIRY: Unit serial number page
    inquiry: field in cdb illegal (page not supported)

# sg_inq -p 0x83 /dev/sda
VPD INQUIRY: Device Identification page
    inquiry: field in cdb illegal (page not supported)

ページ 00 要求に対して同じ標準の照会データが返される場合、ストレージは照会ページをサポートしていません。

例 2: ページリストはサポートされているが、ページ 80 または 83 が存在しない場合

# sg_inq /dev/sda
standard INQUIRY:
  PQual=0  Device_type=0  RMB=0  version=0x02  [SCSI-2]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=1  Sync=1  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: disk
 Vendor identification: VMware,
 Product identification: VMware Virtual S
 Product revision level: 1.0 

# sg_inq -p 0x00 /dev/sda
VPD INQUIRY, page code=0x00:
   [PQual=0  Peripheral device type: disk]
   Supported VPD pages:
     0x0    Supported VPD pages
     0xb1   Block device characteristics (sbc3)

# sg_inq -p 0x80 /dev/sda
VPD INQUIRY: Unit serial number page
    inquiry: field in cdb illegal (page not supported)

# sg_inq -p 0x83 /dev/sda
VPD INQUIRY: Device Identification page
    inquiry: field in cdb illegal (page not supported)

この場合、照会ページはサポートされていますが、ページ 80 または 83 が存在するため、scsi_id はストレージデバイスから識別子を取得できず、scsi_id コマンドでは何も出力されません。

例 3: ページリストがサポートされ、ページ 80 と 83 の両方が存在する場合

# sg_inq /dev/sda
standard INQUIRY:
  PQual=0  Device_type=0  RMB=0  version=0x02  [SCSI-2]
  [AERC=0]  [TrmTsk=0]  NormACA=0  HiSUP=0  Resp_data_format=2
  SCCS=0  ACC=0  TPGS=0  3PC=0  Protect=0  BQue=0
  EncServ=0  MultiP=0  [MChngr=0]  [ACKREQQ=0]  Addr16=0
  [RelAdr=0]  WBus16=1  Sync=1  Linked=0  [TranDis=0]  CmdQue=1
    length=36 (0x24)   Peripheral device type: disk
 Vendor identification: VMware,
 Product identification: VMware Virtual S
 Product revision level: 1.0 

# sg_inq -p 0x00 /dev/sda
VPD INQUIRY, page code=0x00:
   [PQual=0  Peripheral device type: disk]
   Supported VPD pages:
     0x0    Supported VPD pages
     0x80   Unit serial number
     0x83   Device identification
     0xb1   Block device characteristics (sbc3)

# sg_inq -p 0x80 /dev/sda
VPD INQUIRY: Unit serial number page
  Unit serial number: 9999999999999999

# sg_inq -p 0x83 /dev/sda
VPD INQUIRY: Device Identification page
  Designation descriptor number 1, descriptor length: 20
    designator_type: NAA,  code_set: Binary
    associated with the addressed logical unit
      NAA 6, IEEE Company_id: 0x569
      Vendor Specific Identifier: 0x1001c678d
      Vendor Specific Identifier Extension: 0xf7382d030c57d0d2
      [0x60005691001c678df7382d030c57d0d2]

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments