引言:为什么磁盘控制器如此重要
很多人在 PVE 上装完系统后发现「能用,但就是感觉慢」——数据库查询卡顿、文件复制缓慢、CPU 使用率居高不下,却找不出原因。问题往往出在创建虚拟机时随手选的那个磁盘控制器类型上。
磁盘控制器是虚拟机与底层存储之间的一座桥。它的实现方式决定了每次磁盘读写要经过多少层软件模拟、触发多少次 CPU 上下文切换(vm-exit)。在虚拟化世界里,控制器可以分为两大类:
模拟(Emulated)设备:QEMU 用软件逐条指令模拟真实硬件(IDE、SATA、模拟 SCSI 卡)。兼容性极好,任何系统都能识别,但每次 I/O 都要经过 QEMU 的软件模拟层,CPU 开销巨大、性能受限。
半虚拟化(Paravirtualized,VirtIO)设备:虚拟机里的驱动「知道」自己在虚拟环境里,直接与宿主机通过高效的 VirtIO 队列通信,跳过繁琐的硬件模拟。性能逼近裸机,但需要客户机安装对应驱动。
理解了这条分界线,下面的选型逻辑就一目了然了。
一、五种控制器逐一详解
1. IDE —— 只属于古董系统的「化石级」控制器
IDE(Integrated Drive Electronics)是 QEMU 中最古老的磁盘控制器,基于 Intel PIIX4 芯片组模拟而来。
性能参数
一个 IDE 控制器含 2 个通道,共 4 个设备槽位(ide0 ~ ide3)
纯软件模拟,无 DMA 优化(QEMU 中 IDE 采用 PIO 模式),顺序读写通常只有几十到上百 MB/s,随机 4K IOPS 极低
CPU 开销在五种控制器中最高
优势
兼容性无与伦比:几乎所有操作系统(包括 Windows 9x/XP、上古 Linux)都内置 IDE 驱动,无需任何额外驱动即可识别
劣势
性能垫底,CPU 占用高
不支持热插拔、不支持 NCQ、不支持 TRIM/Discard
设备数量受限(最多 4 个)
适用场景
CD-ROM/DVD 光驱挂载
极老的操作系统(仅当没有其他选择时)
作为安装 VirtIO 驱动前的「临时引导盘」
⚠️ 一个常见误区:很多人习惯把 Windows 的系统盘设成 IDE「图省事」,结果性能极差。PVE 官方明确建议——不要用 IDE 作为系统盘,它是给古董系统准备的。
2. SATA —— 兼容与性能的折中之选
SATA 控制器模拟的是 Intel ICH9 的 AHCI(Advanced Host Controller Interface)控制器。
性能参数
最多 6 个端口(sata0 ~ sata5)
支持 NCQ(原生命令队列)与热插拔
性能明显优于 IDE,但仍是软件模拟,CPU 开销中等偏高
实测参考值(NVMe 后端,fio 基准):顺序读约 650 MB/s、顺序写约 520 MB/s,4K 随机读约 35,000 IOPS、随机写约 30,000 IOPS
优势
兼容性好:Windows 7 及以后的系统、几乎所有现代 Linux 都内置 AHCI 驱动,无需额外装驱动
比 IDE 快,支持热插拔与 NCQ
劣势
仍是模拟设备,性能与 VirtIO 存在明显差距(顺序带宽只有 VirtIO 的一半左右)
QEMU 的 AHCI 模拟对 TRIM/Discard 支持有限,SSD 空间回收效果差
适用场景
需要兼容性、又不方便装 VirtIO 驱动的场景(例如某些精简版系统、嵌入式 Linux)
不追求极致性能的普通工作负载
3. SCSI(模拟)—— 经典但已显老态
这里的 SCSI 指 QEMU 模拟的传统 SCSI 控制器,PVE 提供多种型号:LSI 53C895A(默认老款)、LSI SAS 2008/1078、MegaRAID SAS 9240-8i 等。
性能参数
LSI 53C895A:单通道,7 个 SCSI 目标(ID 0~6)
LSI SAS / MegaRAID:最多可挂 14 个磁盘
性能中等偏低,CPU 开销高(尤其是老款 LSI 53C895A)
优势
兼容性好:Windows 2000/XP/Server 时代就内置了 SCSI 驱动
设备数量比 IDE/SATA 更多(SAS 卡可到 14 个)
劣势
性能平庸,CPU 开销大
已属于历史遗留方案,PVE 默认早已不再优先推荐
适用场景
需要挂载大量磁盘、且无法使用 VirtIO 的老旧系统
特定需要 SCSI 语义的应用
💡 关键提醒:在 PVE 里,当你在「磁盘总线」选择 SCSI 时,控制器类型是可以单独指定的。默认的「LSI 53C895A」性能较差,若用 SCSI,应把 SCSI 控制器换成「VirtIO SCSI」——这又是另一番天地(见下文)。
4. VirtIO Block —— 半虚拟化的「老兵」
VirtIO Block 是半虚拟化块设备,虚拟机驱动(virtio_blk / Windows 的 viostor.sys)直接与宿主机通信。
性能参数
每块磁盘独占一个 virtio-blk 设备(一个 PCI 槽位),一卡一盘
性能极高、CPU 开销极低
实测参考值:顺序读约 1150 MB/s、顺序写约 920 MB/s,4K 随机读约 82,000 IOPS、随机写约 75,000 IOPS
受 PCI 槽位限制,单机最多约 30 个设备
优势
性能逼近裸机,CPU 开销低
实现简单、稳定
劣势
一卡一盘的架构导致扩展性差:磁盘多时会耗尽 PCI 槽位
使用私有块设备语义,而非标准 SCSI 命令集,不支持 SCSI 直通
对新功能(如多队列、TRIM)支持不如 VirtIO SCSI
适用场景
磁盘数量少、追求单盘性能的场景
部分老版本 QEMU / 特定兼容性需求
VirtIO Block 与 VirtIO SCSI 的性能差距很小,但 VirtIO Block 在架构上已被 VirtIO SCSI 全面取代。除非有特殊理由,否则不再推荐新部署使用 VirtIO Block。
5. VirtIO SCSI —— 当前的首选方案
VirtIO SCSI 是 VirtIO Block 的「进化版」,一个半虚拟化 SCSI 控制器可挂载多个磁盘,同时保留 VirtIO 的低 CPU 开销。
性能参数
单控制器可挂大量磁盘(理论上支持数百个 target,远高于 VirtIO Block 的约 30 个)
性能最高、CPU 开销最低
实测参考值:顺序读约 1250 MB/s、顺序写约 980 MB/s,4K 随机读约 85,000 IOPS、随机写约 78,000 IOPS(五种控制器中最优)
支持多队列(Multi-Queue),高并发随机 I/O 下表现稳定
两种模式
VirtIO SCSI(默认):一个控制器 + 多队列,所有磁盘共享该控制器
VirtIO SCSI single:每块磁盘各自拥有一个独立控制器(独立队列),避免队列争用,性能略优,是 PVE 官方推荐的高性能模式
优势
性能天花板最高、CPU 开销最低
标准 SCSI 命令集:设备命名为标准的 sdX,与裸机一致,便于物理↔虚拟迁移
完整支持 TRIM/Discard、SCSI 直通(SCSI passthrough)、多队列
可扩展性强,一个控制器可挂载大量磁盘
劣势
Windows 需要额外安装 VirtIO 驱动(vioscsi.sys)
相对 VirtIO Block 略复杂(差异极小)
适用场景
几乎所有新部署虚拟机的默认首选,尤其适合数据库、文件服务器、高并发应用等对 I/O 敏感的工作负载
二、横向对比总览
2.1 核心参数对比表
2.2 性能基准数据(fio,PVE 7.4 + CentOS 7.9 + NVMe 后端)
IDE 与模拟 SCSI 的实测数据更低,故未列入同表。从上表可以直观看出:VirtIO 系控制器的顺序带宽约为 SATA 的两倍,随机 IOPS 约为 SATA 的 2.4~2.6 倍。这正是「选错控制器、性能掉一半」说法的由来。
三、选型推荐
3.1 通用结论(一句话版)
默认选 SCSI + VirtIO SCSI(single)控制器,Windows 系统提前装好 VirtIO 驱动;只有装不了驱动的场景才退而求其次用 SATA,IDE 留给光驱和古董系统。
3.2 按场景细分
3.3 三条必须记住的「黄金配置」
系统盘别用 IDE——它是给古董系统用的,性能垫底、CPU 开销最高。
SCSI 控制器要换成 VirtIO SCSI——PVE 里 SCSI 总线的默认控制器可能是 LSI 53C895A,性能差一大截,务必改成 VirtIO SCSI single。
SSD + 精简置备,记得勾选 Discard——开启 TRIM 后,VM 释放的空间才能真实回收到宿主机,否则 thin provision 的盘会越用越大。
3.4 缓存模式(Cache)与 IO Thread 补充
控制器之外,还有两个直接影响性能的选项:
Cache 缓存模式:PVE 默认 No cache(none)最安全但写入较慢;追求极致性能可设 Write back(unsafe 变体有断电丢数据风险,谨慎使用);Write through 与 Direct sync 偏重安全。
IO Thread:启用后磁盘 I/O 交由独立线程处理,在多核宿主机、多盘或高 IOPS 场景下可显著提升性能,PVE 官方最佳实践明确建议开启。
四、常见误区与排错
误区 1:「选 SCSI 就是选了 VirtIO」 ❌ 错误。SCSI 只是总线类型,控制器才是关键。默认的 LSI 53C895A 是模拟卡,性能平庸。务必手动把 SCSI Controller 改为 VirtIO SCSI single。
误区 2:「Windows 装不了 VirtIO 驱动」 ❌ 错误。Windows 完全支持 VirtIO,只需在安装时「加载驱动程序」选择 virtio-win ISO 中的 vioscsi\wXX\amd64 目录即可。PVE 官方 Wiki 有完整步骤。
误区 3:「VirtIO Block 和 VirtIO SCSI 性能差很多」 ⚠️ 不准确。两者性能差距很小(单盘顺序带宽差约 8%),真正的区别在扩展性与功能:VirtIO SCSI 支持单控制器挂多盘、SCSI 直通、更完善的 TRIM。选 VirtIO SCSI 是「性能差不多,功能更多」。
排错速查
Windows 虚拟机启动蓝屏/找不到磁盘 → 系统盘换 SATA 引导进系统装好 VirtIO 驱动,再切回 VirtIO SCSI。
SSD 空间不回收 → 检查是否勾选 Discard,以及后端是否为精简置备。
高并发下 IOPS 上不去 → 确认已启用 IO Thread,并将控制器设为 VirtIO SCSI single(或多队列)。
总结与展望
磁盘控制器的选择,本质上是「兼容性」与「性能」的权衡:
IDE / 模拟 SCSI 代表着极致的兼容、放弃性能,只适合光驱与古董系统;
SATA 是折中的舒适区,能跑但不快;
VirtIO Block / VirtIO SCSI 代表着半虚拟化的高性能路径,其中 VirtIO SCSI 凭借更强的扩展性与功能完整性,成为当前 PVE 的绝对主流。
对绝大多数新部署,「SCSI 总线 + VirtIO SCSI single 控制器 + IO Thread + Discard + Write back 缓存」 就是一套可以闭眼抄的「标准答案」,能在兼容性几乎无损的前提下,把磁盘 I/O 性能压榨到接近裸机的水平。
随着 Proxmox VE 版本迭代(当前已进入 8.x/9.0 时代)与 virtio-win 驱动的持续更新,半虚拟化生态只会愈发成熟。掌握这一组控制器的差异,是在 PVE 上做好存储性能优化的第一课,也是最容易被忽略却收益最高的一课。
参考资料: