14.4. コマンドラインを使用した仮想マシンへの PCI デバイスの接続


仮想マシン (VM) を使用する場合、ホストシステムに接続されているストレージコントローラーやネットワークコントローラーなどの PCI デバイスにアクセスして制御できます。このような場合、ホストシステムはデバイスの制御を仮想マシンに渡します。これは、PCI デバイス割り当て、または PCI パススルーとも呼ばれます。

ホストに接続された PCI ハードウェアデバイスを仮想マシン (VM) で使用するには、ホストからデバイスの接続を解除し、仮想マシンに接続します。

注記

この手順では、一般的な PCI デバイスの割り当て方法を説明します。特定の種類の PCI デバイスを割り当てる手順については、該当する手順を参照してください。

前提条件

  • ホストが IBM Z アーキテクチャーを使用している場合は、vfio カーネルモジュールをホストにロードする必要があります。確認するには、次のコマンドを使用します。

    # lsmod | grep vfio

    出力に次のモジュールが含まれている必要があります。

    • vfio_pci
    • vfio_pci_core
    • vfio_iommu_type1

手順

  1. 使用するデバイスの PCI アドレス識別子を取得します。たとえば、ホストに接続されている NVME ディスクを使用する場合、このディスクは次の出力でデバイス 0000:65:00.0 として表示されます。

    # lspci -nkD
    
    0000:00:00.0 0600: 8086:a708 (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: igen6_edac
    	Kernel modules: igen6_edac
    0000:00:02.0 0300: 8086:a7a1 (rev 04)
    	Subsystem: 17aa:230e
    	Kernel driver in use: i915
    	Kernel modules: i915, xe
    0000:00:04.0 1180: 8086:a71d (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: thermal_pci
    	Kernel modules: processor_thermal_device_pci
    0000:00:05.0 0604: 8086:a74d (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: pcieport
    0000:00:07.0 0604: 8086:a76e (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: pcieport
    0000:65:00.0 0108: 144d:a822 (rev 01)
        DeviceName: PCIe SSD in Slot 0 Bay 2
        Subsystem: 1028:1fd9
        Kernel driver in use: nvme
        Kernel modules: nvme
    0000:6a:00.0 0108: 1179:0110 (rev 01)
        DeviceName: PCIe SSD in Slot 11 Bay 2
        Subsystem: 1028:1ffb
        Kernel driver in use: nvme
        Kernel modules: nvme
  2. PCI デバイスを接続する仮想マシンの XML 設定を開きます。

    # virsh edit vm-name
  3. 以下の <hostdev> 設定を XML ファイルの <devices> セクションに追加します。

    address 行の値を、デバイスの PCI アドレスに置き換えます。必要に応じて、デバイスが仮想マシン内で使用する PCI アドレスを変更するには、<address type="pci"> 行に別のアドレスを設定できます。

    たとえば、ホスト上のデバイスアドレスが 0000:65:00.0 で、ゲストでは 0000:02:00.0 を使用する場合は、次の設定を使用します。

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/>
       </source>
       <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </hostdev>
  4. オプション: IBM Z ホストでは、ゲストオペレーティングシステムが PCI デバイスを検出する方法を変更できます。これを行うには、<address> 要素に <zpci> サブ要素を追加します。<zpci> 行では、uid 値と fid 値を調整できます。これにより、ゲストオペレーティングシステムのデバイスの PCI アドレスと機能 ID が変更されます。

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/>
       </source>
       <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'>
         <zpci uid="0x0008" fid="0x001807"/>
       </address>
    </hostdev>

    この例では、以下が適用されます。

    • uid="0x0008" は、仮想マシンのデバイスのドメイン PCI アドレスを 0008:00:00.0 に設定します。
    • fid="0x001807" は、デバイスのスロット値を 0x001807 に設定します。これにより、仮想マシンのファイルシステムのデバイス設定が /sys/bus/pci/slots/00001087/address に保存されます。

      これらの値が指定されていない場合は、libvirt がこれらの値を自動的に設定します。

  5. XML 設定を保存します。
  6. 仮想マシンが実行中の場合はシャットダウンします。

    # virsh shutdown vm-name

検証

  1. 仮想マシンを起動し、ゲストオペレーティングシステムにログインします。
  2. ゲストオペレーティングシステムで、PCI デバイスがリストされていることを確認します。

    たとえば、ゲストデバイスのアドレスを 0000:02:00.0 に設定した場合は、次のコマンドを使用します。

    # lspci -nkD | grep 0000:02:00.0
    
    0000:02:00.0 8086:9a09 (rev 01)
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る