14.10. 仮想マシンの SCSI パススルーの設定


仮想マシン (VM) が、ストレージエリアネットワーク (SAN) の論理ユニット番号 (LUN) ディスクデバイスなどのホスト SCSI デバイスに直接アクセスできるように、SCSI パススルーを設定できます。

SCSI パススルーを使用すると、ローカルディスクやマルチパスデバイスをパススルーすることができます。

  • ローカルディスクをパススルーする場合、仮想マシンはディスクへの単一のパスを使用します。たとえば、単一の /dev/disk/by-path//dev/sdb などのデバイスです。
  • マルチパスデバイスを使用する場合、ホストは複数のパスを通じて同じ LUN を提示し、それらを 1 つのマッパーデバイス (例: /dev/mapper/mpatha) に集約します。これにより、いずれかのパスに障害が発生した場合も、冗長性とフェイルオーバー機能が確保されます。

前提条件

  • ホストが以下のいずれかの CPU アーキテクチャーを使用している。

    • Intel 64
    • AMD64
    • ARM 64
  • ホストがサポートされている RHEL およびカーネルバージョンを使用している。詳細は、仮想マシンにおける SGIO サポートに必要な RHEL バージョン を参照してください。
  • マルチパス化された仮想ディスク (vDisk) を使用する場合は、ホスト上でマルチパス設定が正しくセットアップされている。詳細は、Device Mapper Multipath の設定 を参照してください。

手順

  1. 仮想マシンの XML 設定を開きます。

    # virsh edit <vm_name>
  2. <devices> セクションに、VirtIO-SCSI コントローラーの行を追加します (まだない場合)。

    <controller type='scsi' model='virtio-scsi' index='0'/>
  3. マルチパスデバイスの場合、ホスト上のマルチパスデバイスマッパーを特定します。

    # multipath -l
    mpatha (36001438005deb1d00000000000000001) dm-0 NETAPP   ,LUN
    size=100G features='0' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=50 status=active
      `- 2:0:0:1 sdb 8:16  active ready running
      `- 3:0:0:1 sdc 8:32  active ready running

    マルチパスデバイス名 (例: mpatha) をメモしておきます。デバイスパスは /dev/mapper/<name> です。たとえば、/dev/mapper/mpatha です。ls /dev/mapper/ コマンドを使用して、マルチパスデバイスのノードをリスト表示することもできます。

  4. ホスト上の SCSI ディスクデバイスを定義する XML ファイルを作成して開きます。以下に例を示します。

    # vim scsi-passthrough-device.xml
  5. XML ファイルに SCSI デバイスの設定を追加します。

    • マルチパスデバイスの場合:

      <disk type='block' device='lun'>
              <driver name='qemu' type='raw'/>
              <source dev='/dev/mapper/mpatha'/>
              <target dev='sdb' bus='scsi'/>
              <alias name='ua-scsi-mpath0'/>
              <address type='drive' controller='0' bus='0' target='0' unit='1'/>
      </disk>

      この例では、マルチパスデバイスは単一の disk 要素として定義されています。

      • <source dev='/dev/mapper/mpatha'/> は、ホスト上のデバイスマッパーマルチパスデバイスを指定します。
      • ホストのマルチパスレイヤーがすでにパスを集約しているため、仮想マシンは 1 つのブロックデバイスを受け取り、パスのフェイルオーバーはホスト側で処理されます。
    • ローカルディスクをパススルーする場合:

      <disk type='block' device='lun'>
              <driver name='qemu' type='raw'/>
              <source dev='/dev/sdb'/>
              <target dev='sdc' bus='scsi'/>
              <alias name='ua-scsi-lun0'/>
              <address type='drive' controller='0' bus='0' target='0' unit='0'/>
      </disk>

      この例では、SCSI ディスクデバイスが以下のパラメーターで定義されています。

      • type='block': デバイスがブロックデバイスであることを指定します。
      • device='lun': これが SCSI 論理ユニット番号 (LUN) デバイスのパススルーであることを示しています。
      • <driver name='qemu' type='raw'/>: 直接デバイスにアクセスするための raw 形式の QEMU ドライバーを指定します。
      • <source dev='/dev/sdb'/>: ホストブロックデバイスのパスを指定します。デバイスノード (例: /dev/sdb) を直接使用することも、再起動後の永続性を高めるために /dev/disk/by-path/ エントリーを使用することもできます。
      • <target dev='sdc' bus='scsi'/>: 仮想マシン内でデバイスがどのように表示されるかを指定します。このデバイスは SCSI バス上で sdc として表示されます。
      • alias: これは、libvirt コマンドでデバイスを接続解除するときなど、目的のデバイスを指定するのに使用できるオプションのユーザー定義エイリアスです。libvirt のユーザー定義エイリアスは、すべて "ua-" というプレフィックスで始まる必要があります。
      • <address type='drive' controller='0' bus='0' target='0' unit='0'/>: 仮想マシン内でデバイスがどのように表示されるかを指定します。controller 属性は、仮想マシン内の SCSI コントローラーを参照します。このコントローラーは、デバイスを接続する前に存在している必要があります。
  6. XML ファイルを使用して、定義済みの SCSI ディスクデバイスを仮想マシンに接続します。たとえば、scsi-passthrough-device.xml で定義されたデバイスを、実行中の <vm_name> 仮想マシンに永続的に接続するには、以下を実行します。

    # virsh attach-device <vm_name> scsi-passthrough-device.xml --live --config

    --live オプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--config オプションは、設定の変更を永続化します。--live オプションを指定せずに、デバイスをシャットダウンした仮想マシンに接続することもできます。

  7. オプション: SCSI ディスクを仮想マシンに接続する必要がなくなった場合は、virsh detach-device コマンドを使用してディスクを接続解除できます。

    1. シャットダウンした仮想マシンから SCSI ディスクデバイスを接続解除する場合:

      # virsh detach-device <vm_name> scsi-passthrough-device.xml --config
    2. 実行中の仮想マシンから SCSI ディスクデバイスを接続解除する場合:

      # virsh detach-device <vm_name> scsi-passthrough-device.xml --live --config
      警告

      実行中の仮想マシンから SCSI デバイスを接続解除すると、そのデバイスが使用中の場合、データの損失や破損が発生する可能性があります。デバイスを接続解除する前に、ゲストオペレーティングシステム上のどのアプリケーションからもデバイスにアクセスされていないことを確認してください。

検証

  • RHEL 仮想マシンでは、ブロックデバイスをリスト表示することで、ゲスト OS 上で SCSI デバイスが認識されていることを確認できます。マルチパス設定の場合、LUN ディスクは単一のブロックデバイスとして表示されます。

    # lsblk -nd -o name,size,type,wwn
    NAME   SIZE TYPE WWN
    sda    20G  disk
    sdb   100G  disk  0x36001438005deb1d00000000000000001

    この例では、SCSI デバイスは World Wide Name (WWN) を持つディスクとして表示されています。マルチパス設定の場合、ゲストに単一のブロックデバイスが提示され、パスのフェイルオーバーがホスト側で処理されます。

    提示されたデバイスのサイズが、ホスト上の LUN ディスクのサイズと同じであることを確認してください。

  • ホスト側では、実行中の仮想マシンの XML 設定を表示することで、デバイスの接続を確認できます。

    # virsh dumpxml <vm_name>
    <domain type='kvm'>
      <name>vm_name</name>
      ...
      <devices>
        ...
        <disk type='block' device='lun'>
          <driver name='qemu' type='raw'/>
          <source dev='/dev/sdb'/>
          <target dev='sdc' bus='scsi'/>
          <alias name='ua-scsi-lun0'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        ...
      </devices>
      ...
    </domain>

    この例の disk 要素は、ホストパス /dev/sdb の SCSI デバイスが SCSI バス上の sdc として仮想マシンに接続されていることを示しています。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る