随机
Enter 搜索 ↑↓ 切换 Esc 清空

pve-sata-disk

命令

单硬盘直通

pve-sata-disk

单硬盘直通

补充说明

单硬盘直通是将 PVE 宿主机上的某一块物理 SATA 硬盘直接分配给虚拟机,让虚拟机获得接近原生的存储性能,同时不影响 PVE 系统盘和其他硬盘。适合需要虚拟机内直接操控物理硬盘的场景(如虚拟机内安装独立系统、数据直存物理盘、NAS 硬盘直通等)。

前置准备:确认硬件支持与硬盘信息

1. 硬件要求

单硬盘直通无需完整的 IOMMU 分组支持(与控制器直通不同),但 IOMMU 仍需启用:

2. 查看并记录硬盘 ID(关键步骤)

通过硬盘唯一 ID 配置直通(避免盘符漂移导致直通失效):

ls -l /dev/disk/by-id/ | grep ata

示例输出:

lrwxrwxrwx 1 root root  9  54 10:00 ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989 -> ../../sdb

记录 ata- 开头的完整 ID(如 ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989),后续步骤需使用。

核心步骤:开启 PVE 的 IOMMU 硬件直通

IOMMU 是硬件直通的基础,需配置 GRUB 并加载内核模块:

1. 编辑 GRUB 配置文件

nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 行,按 CPU 类型修改:

Intel CPU(添加 intel_iommu=on):

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

AMD CPU(添加 amd_iommu=on):

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

2. 更新 GRUB 并加载内核模块

更新 GRUB 配置:

update-grub

编辑内核模块配置文件:

nano /etc/modules

添加以下必需模块:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

重启 PVE 系统使配置生效:

reboot

3. 验证 IOMMU 是否启用成功

重启后执行:

dmesg | grep -i iommu

操作步骤:直通单个硬盘

1. 直通硬盘到虚拟机

执行以下命令(替换占位符):

qm set <VM_ID> --sata<X> /dev/disk/by-id/<硬盘ID>

示例:给 ID 为 100 的虚拟机添加硬盘到 sata0 接口:

qm set 100 --sata0 /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989

2. 验证直通

启动虚拟机,在虚拟机内执行:

lsblk
fdisk -l

应能看到直通的物理硬盘。

恢复单硬盘直通给宿主机

如需将直通给虚拟机的硬盘归还给 PVE 宿主机:

1. 查看当前硬盘挂载位置

qm config <VM_ID> | grep sata

示例输出:

sata0: /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989,size=250G

2. 关机和移除硬盘

# 关闭虚拟机
qm stop <VM_ID>

# 移除硬盘(将 <X> 替换为实际接口编号,如 0)
qm set <VM_ID> --sata<X> none

示例:

qm set 100 --sata0 none

3. 在宿主机上重新挂载(可选)

移除后硬盘在宿主机上处于未挂载状态。如需挂载使用:

# 查看硬盘设备名
ls -l /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXHZ08044989

# 挂载到宿主机的目录(将 sdx 替换为实际盘符)
mount /dev/sdX /mnt/你的目录

如果宿主机上之前有 ZFS 池或其他存储,硬盘会重新被 PVE 存储系统识别:

# 重新扫描 SCSI 总线
echo "- - -" > /sys/class/scsi_host/host0/scan

# ZFS 导入池(如果硬盘之前属于 ZFS 池)
zpool import

故障排查与避坑指南

常见错误

错误现象 可能原因 解决方案
执行 qm set 后虚拟机内看不到硬盘 硬盘 ID 错误 / 盘符漂移 重新执行 ls -l /dev/disk/by-id/ 确认硬盘 ID,使用 ID 而非盘符
直通后虚拟机无法启动 IOMMU 未启用 验证 IOMMU(dmesg | grep -i iommu),确认 GRUB 和 BIOS 配置正确
移除硬盘后宿主机不识别 系统未重新扫描 执行 echo "- - -" > /sys/class/scsi_host/host0/scan 或重启

关键避坑要点