proxmoxでASM1166 PCIE SATAをvm側で認識させる準備の質問

質問内容
もう一度教えて PCにASM1166 PCIE SATAを指していて proxmoxをスルーしてtruenasに認識させる手順


gemini答え

Proxmox VE(PVE)上で、PCIe拡張カードの ASM1166(SATAコントローラ) を TrueNAS VM に直接認識させる(PCIパススルー)の手順をまとめました。

この設定を行うことで、Proxmoxを介さずにTrueNASがディスクのS.M.A.R.T.情報やシリアル番号を直接制御できるようになります。

前提条件の確認

  • ASM1166カードに、Proxmox自体が使用している起動ディスクやZFSプールが接続されていないことを確認してください(パススルーするとProxmox側から見えなくなります)。

  • マザーボードのBIOS/UEFI設定で 「Intel VT-d」 または 「AMD-Vi(IOMMU)」 が 有効(Enabled) になっていることを確認してください。

1. Proxmoxホスト側でIOMMUを有効化する

Proxmoxのブートローダー(GRUB または systemd-boot)に合わせて設定ファイルを編集します。

【パターンA】GRUBの場合(一般的な構成)

  1. Proxmoxのシェルを開き、設定ファイルを開きます。

    Bash
    nano /etc/default/grub
    
  2. GRUB_CMDLINE_LINUX_DEFAULT="quiet" の行を、CPUに合わせて以下のように書き換えます。

    • Intel CPUの場合:

      Plaintext
      GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
      
    • AMD CPUの場合:

      Plaintext
      GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
      
  3. 保存して閉じ(Ctrl + O → Enter → Ctrl + X)、設定を反映させます。

    Bash
    update-grub
    

【パターンB】systemd-bootの場合(ZFS起動などの構成)

  1. 設定ファイルを開きます。

    Bash
    nano /etc/kernel/cmdline
    
  2. 既存の行の末尾(スペースを空けて)に、以下を追加して保存します。

    • Intel: intel_iommu=on iommu=pt

    • AMD: amd_iommu=on iommu=pt

  3. 設定を反映させます。

    Bash
    proxmox-boot-tool refresh
    

2. VFIOカーネルモジュールの追加

パススルーに必要なモジュールをシステムに読み込ませます。

  1. モジュール設定ファイルを開きます。

    Bash
    nano /etc/modules
    
  2. ファイルの末尾に以下の4行を追記して保存します。

    Plaintext
    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    

3. Proxmoxホストの再起動と確認

  1. 設定を適用するため、一度Proxmoxホストを再起動します。

    Bash
    reboot
    
  2. 再起動後、シェルで以下のコマンドを実行し、IOMMUが正常に動作しているか確認します。

    Bash
    dmesg | grep -e DMAR -e IOMMU
    
    • 出力の中に IOMMU enabled や directed iommu といった文字列があれば成功です。

4. TrueNAS VMへASM1166を割り当てる(Web UI操作)

  1. ProxmoxのWeb UIにログインします。

  2. 対象の TrueNAS VM を選択し、「ハードウェア(Hardware)」 タブをクリックします。

  3. 画面上部の 「追加(Add)」 ボタンを押し、「PCIデバイス(PCI Device)」 を選択します。

  4. 設定ウィンドウで以下を指定します。

    • デバイス(Device): ドロップダウンから ASM1166 を探して選択します。(例: ASMedia Technology Inc. ASM1166 Serial ATA Controller などの表記)

    • すべての機能(All Functions): チェックを入れる(デバイスの全機能を一括で渡します)。

    • ROM BAR: チェックを入れたままでOK。

    • PCI-Express: TrueNAS VMのマシンタイプが「q35」の場合は、チェックを入れておくことを推奨します。

  5. 「追加(Add)」 をクリックします。

5. TrueNAS側での確認

設定が完了したら、TrueNAS VMを起動します。

TrueNASの管理画面(WebUI)にログインし、「ストレージ(Storage)」→「ディスク(Disks)」 を確認してください。ASM1166に接続されているHDDやSSDが、シリアル番号付きでずらりと認識されていれば無事成功です!

ワンポイントアドバイス もしTrueNAS側でうまく認識されない場合は、VMの「オプション」タブで「OSタイプ」が正しく設定されているか、またはVMを一瞬シャットダウン(再起動ではなく一度Stop)してから起動し直してみてください。


と返事来たけど前回と違うのですよなので控えてた資料からみて

 前回と違うようだけど?  driverct を使ってたと思うけど と再質問

大変失礼いたしました!おっしゃる通り、説明が漏れていました。

ASM1166のようなSATAコントローラーは、普通に設定しようとするとProxmoxホスト自身が標準の ahci ドライバーで起動時にガッチリ掴んでしまうため、VMへのパススルーが失敗したり、挙動が不安定になったりすることがよくあります。

それを防ぐために、「このPCIスロットのデバイスは、ホストではなく最初からVFIO(パススルー用ドライバー)で動かす」 とピンポイントで固定してくれるのが driverctl です。通常の方法(ベンダーID指定)だと同じチップが全部巻き込まれてしまいますが、これなら安全に指定できます。

driverctl を使った確実な手順を改めてまとめました。

1. driverctl のインストール

Proxmoxのシェル(またはSSH)を開き、ツールをインストールします。

Bash
apt update && apt install driverctl -y

2. ASM1166の「PCIアドレス」を特定する

パススルーしたいASM1166カードの正確なPCIアドレスを調べます。

Bash
lspci -nn | grep -i -E "ahci|asmedia"
  • 出力例:

    Plaintext
    03:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1166 Serial ATA Controller [1b21:1166] (rev 02)
    

この場合のPCIアドレスは 03:00.0 になります。※環境によって数値は変わりますので、実際に出力されたものを控えてください。

3. driverctl でドライバーを vfio-pci に固定する

特定したPCIアドレスに対して、オーバーライド設定を行います。 コマンドに入力する際は、頭に 0000: を付けたフル形式(例:0000:03:00.0)にする必要があります。

Bash
driverctl set-override 0000:03:00.0 vfio-pci

設定が正しく登録されたか確認します。

Bash
driverctl list-overrides

出力に 0000:03:00.0 vfio-pci と表示されれば、ホストの ahci に奪われる心配はなくなります。

4. ホストの再起動と確認

  1. 設定を確定させるため、Proxmoxホストを一度再起動します。

    Bash
    reboot
    
  2. 再起動後、以下のコマンドでASM1166が最初から vfio-pci で動作しているか確認します。

    Bash
    lspci -s 03:00.0 -v
    

    出力の下方にある Kernel driver in use: の項目が vfio-pci になっていれば成功です。

5. TrueNAS VMへ割り当て(Web UI)

ここからProxmoxのWeb UIでTrueNASに引き渡します。

  1. Web UIで TrueNAS VM を選択し、「ハードウェア(Hardware)」 タブをクリックします。

  2. 「追加(Add)」 → 「PCIデバイス(PCI Device)」 を選択します。

  3. デバイス(Device) のドロップダウンから、先ほど固定した 0000:03:00.0(ASM1166)を選択します。

  4. 「すべての機能(All Functions)」 にチェックを入れます。

  5. 「追加(Add)」 をクリックします。

💡 なぜ driverctl が確実なのか? 通常の /etc/modprobe.d/vfio.conf に options vfio-pci ids=1b21:1166 と書く方法だと、マザーボード上に同じASMedia製チップ(同じID)が他にも載っていた場合、それらも一緒にホストから切断されてしまいます。 driverctl であれば「〇番目のスロットに刺さっているやつだけ」と物理的な場所で指定できるため、ホスト側の他のSATAポートに一切迷惑をかけずに安全に TrueNAS へ引き渡せます。

記憶の通り driverctl を挟むのが圧倒的に正解でした。これでTrueNAS側でも安定して全ディスクが直接見えるようになります!

と云う感じですね、毎回同じ答えじゃない(笑)

指摘すると、しれ~っと 答えが返ってくる(笑)
多分同じ質問をした時も自分が調べてきて「driverctl」の事を聞いて返事くれたような感じでした(笑)

100%な答えじゃなくても助かっていること多いので、使ってます(無料版をね)

コメント

このブログの人気の投稿

今回お調子者じゃないんですよね(;^ω^)