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


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

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

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

前提条件

手順

  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>

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

      • <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'/>: 直接デバイスにアクセスするための生フォーマットの 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 デバイスを取り外すと、そのデバイスが使用中の場合、データの損失や破損が発生する可能性があります。デバイスを取り外す前に、ゲストオペレーティングシステム上のどのアプリケーションからもデバイスにアクセスされていないことを確認してください。

検証

  • 仮想マシン内でブロックデバイスのリストを表示し、ゲスト 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>

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

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る