はじめに
メインPCをMacに変えようとしてた時、ちょうとProxmoxを入れてるMac miniがVMを立てすぎてメモリ不足になりそうだったり記録デバイスが全部USBで接続されていて速度が活かせてなかったりと不満があったので乗り換え。
全てHDD1に保存されていたのを以下の構成に変更することとした。
- HDD1のデータを個人ファイルをSSD3、immichのデータベースと画像をSSD2に写す
- HDD1は化石ファイル(ダウンロードフォルダーの集まり)やPCの丸ごとダンプデータ(OSのUsersフォルダ)を保存するようにする
そうすると、NVMe接続されているディスクたちをVMに認識させる必要がある。
そこでIOMMUというのに手をだすことにしたが、3時間くらい苦労したので書き留めておく。
動作環境
- CPU: Ryzen 9 5950X
- メモリ: DDR4 128GB (32GB x4)
- SSD1: NVMe Samsung 256GB(OS用)
- SSD2: NVMe Samsung 1TB(immich用)
- SSD3: NVme KIOXIA 2TB(個人ファイル用)
- HDD1: SATA WD Red IronWolf 8TB(化石ファイル保存用)
- マザーボード: B550M-P4(OEM)
やり方
1. Proxmoxのホストシェルから/etc/default/grubを触る。
なんのエディタでもいいので/etc/default/grubをいじる。
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
と書いているところから
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
に変更する。
保存後はupdate-grubも忘れずに。
その後再起動してBIOSを開く。
※AMDではiommu=ptが機能しないとか言われていますがよくわからないので入れています。
2. BIOSからIOMMU関連を有効
まずBIOSでIOMMUの設定を探す。自分はアドバンス→AMD CBSなんとかNBIO Common OptionsにIOMMUがあった。
とりあえずよくわからないのでIOMMUをEnabled。その他Disabledにされていたのは全部Autoにした。
3. 起動してVMでPCIeデバイスを設定してみる(⚠️)
全部違う数字になっていればグループが分かれているので割当しても起動するが、同じになっている場合ホストのPCI含めてVMに切り離されてしまうためホストごと操作不能になってしまう。
これの面倒なところがブートディスクの強制取り外しと同等になるので、rebootやログインすら機能しなくなりPCを強制終了させてからBIOSでIOMMUを無効化。その後にgrubのブートメニューでeを押して一旦引数を削除して起動してからWebUIからVMに指定したPCIeを削除して再起動してまたBIOSを直すということをしないといけない。
全て別のIDなら問題はないが、もし同じIDの場合VMに反映せずに閉じてホストシェルで
/etc/default/grubにて
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
と書き直してupdate-grubを実行して再起動。
※pcie_acs_override=downstream,multifunctionはソフトウェア的にIOMMUのグループを分けるフラグだそうですが、あんまり使うことは推奨されないそう?基本的にPCIeのスロットを変えるかNVMeの場所を変えるかが推奨されているそうですが、私が持つB550マザーでは反映されなかったのでやむおえず。今のところは不便してない。
※一応CPU Configurationから変更できるらしいが自分は効果ナシ。
4. やったー
こうなってたら成功。IOMM...のIDがすべて違うものになっている。これでホストと分離してVMでパススルーできる。

さいごに
適当に書いたので参考になれば幸いです。
引用元
Super Thanks



