Hyper-V PCIE設(shè)備直通教程
注:本文是為了已經(jīng)咕了將近半年的LTO磁帶使用教程而作,之前一直有時間和各方面條件的限制。最近還在進行試驗,以后不僅會寫教程,還會將LTO磁帶存儲用于直播錄像的上傳后留檔等。

環(huán)境:Intel?S2400SC2平臺,HP的HBA卡和LTO4磁帶機。host系統(tǒng)是Windows?Server?2019?Datacenter?w/?GUI,虛擬機系統(tǒng)是剛裝的Debian?testing。
目的:將HBA卡掛載至虛擬機,以方便在GNU/Linux環(huán)境下使用LTO磁帶設(shè)備。但理論上本文方法適用于所有支持的PCIE設(shè)備,包括顯卡。之后也會測試其他類型的設(shè)備,測試結(jié)果更新在動態(tài)。
首先在host系統(tǒng)中,按下Win?+?X?->?M打開設(shè)備管理器,找到要掛載的PCIE設(shè)備。

先點擊上方工具欄的向下的白色箭頭(禁用設(shè)備),將目標設(shè)備從host上禁用。

確認禁用后,我們發(fā)現(xiàn)接在HBA卡上的"磁帶驅(qū)動器"也一并消失了,說明操作成功。同時設(shè)備圖標上顯示向下箭頭,工具欄對應(yīng)位置圖標變?yōu)橄蛏系木G色箭頭(啟用設(shè)備)。

接下來我們雙擊打開目標設(shè)備的屬性對話框,定位到"詳細信息"選項卡,選擇屬性"位置路徑"以查看其內(nèi)容。

復制以"PCIEROOT"開頭的一項備用。

接下來打開Hyper-V管理器,打開目標虛擬機的設(shè)置。將"自動停止操作"由默認的"保存"(保存虛擬機狀態(tài))改為"關(guān)閉"(關(guān)閉來賓操作系統(tǒng)),當然你非要改成"關(guān)閉電源"(強行關(guān)閉虛擬機)應(yīng)該也可以,就是。。

接下來以管理員身份打開PowerShell,執(zhí)行兩條cmdlet:
Dismount-VMHostAssignableDevice?-LocationPath?"{目標設(shè)備的位置路徑}"?-Force
Add-VMAssignableDevice?-LocationPath?"{目標設(shè)備的位置路徑}"?-VMName?"{目標虛擬機名}"

注意不要漏掉參數(shù)的半角雙引號,因為`#`在PowerShell中代表注釋。執(zhí)行過程中應(yīng)該沒有任何輸出,“沒有消息就是好消息”。
這兩條cmdlet的作用可從字面意思得知:將目標設(shè)備從host上強制卸載,然后掛載在指定虛擬機上。PowerShell的cmdlet設(shè)計上真的很不錯,有RESTful?API內(nèi)味了。(就是命令太長對手動輸入不友好。。
接下來回到Hyper-V管理器,啟動目標虛擬機。然后可以ssh上去檢查一下。

可以看到HBA卡、磁帶機、磁帶均被正確識別。
接下來是將設(shè)備掛載回host的步驟。
關(guān)閉目標虛擬機。以管理員身份打開PowerShell,執(zhí)行兩條cmdlet:
Remove-VMAssignableDevice?-LocationPath?"{目標設(shè)備的位置路徑}"?-VMName?"{目標虛擬機名}"
Mount-VMHostAssignableDevice?-LocationPath?"{目標設(shè)備的位置路徑}"

作用不言而喻:將目標設(shè)備從指定虛擬機上卸載,然后掛載在host上。
接下來回到設(shè)備管理器,啟用目標設(shè)備即可。