🌀

自宅ProxmoxのノードでGPUを交換したらWindowsVMが起動しなくなった

2023/04/13に公開

自宅のProxmoxのGPUパススルーで使っているGPUを交換しようとした時にトラブったので備忘録。 多分GPUを交換したのが原因だと思われる。
結論、これで解決しました。

起こった現象

Proxmoxを3台でクラスターを組んでいるのですが、そのうち一台にGeForce GTX 1650を積んでいます。 今回はこれをRTX3060に置き換える作業をしていました。

GPUの載せ替え自体はすんなりいったのですが、GPUパススルーをしていたWindowsのVMを起動すると、起動時に輪っかが二、三回回った後固まってしました。 ドライバーの再インストールするも同じ状況です。
試しにGPUのPCIをVMから除いてみたところ、復旧の画面が出てきて、正しく起動できました。
やはりGPU周りが怪しそうです。

解決策

色々試したところ、これ通りにしたところ直りました。
お手軽に直るか試す方法として、以下を対象GPUを積んだノードのShellで実行してください。

lspci -k

まずGPUのPCIデバイスIDを調べます。出てきたものの中でGPUのものを見つけます。
僕の場合は0000:06:00.00000:06:00.1でした(後者はグラボの音のほう)。

さらに以下を実行して、Proxmoxを再起動させずにWindowsのVMを起動し、正しくGPUが認識されていたら成功です(IDは自分のものに置き換えてください)。

echo 1 > /sys/bus/pci/devices/0000\:06\:00.0/remove
echo 1 > /sys/bus/pci/devices/0000\:06\:00.1/remove
echo 1 > /sys/bus/pci/rescan 

ただこれだとProxmoxを再起動すると元に戻るので以下を実行しておきます。

mkdir pcifix 
nano /root/pcifix/fix_gpu_pass.sh 

以下をファイルに書いておく

#!/bin/bash 
echo 1 > /sys/bus/pci/devices/0000\:06\:00.0/remove
echo 1 > /sys/bus/pci/devices/0000\:06\:00.1/remove
echo 1 > /sys/bus/pci/rescan 
chmod +x /root/pcifix/fix_gpu_pass.sh
crontab -e 

以下を追記

@reboot /root/pcifix/fix_gpu_pass.sh

これで起動時に毎回コマンドが実行されるので、直ります。

Discussion