返回
磁盘控制器和缓存设置
Proxmox磁盘控制器和缓存
本页提供配置虚拟机时与磁盘相关的设置信息,包括关键注意事项和预防措施。
关于SCSI控制器
创建新虚拟机并选择SCSI控制器时,默认选项是“VirtIO Single”。这意味着如果创建多个虚拟磁盘(如下节所述),它们都将显示为连接到此单一控制器。此设置优化了虚拟机内的内存和设备使用。
选择“VirtIO SCSI”允许将每个虚拟磁盘分配到单独的SCSI总线,这需要额外的驱动空间和内存。然而,在某些工作负载下,分散I/O操作可以提升性能。
通常不推荐使用其他物理SCSI卡模拟。
关于磁盘控制器
IDE(也称为ATA)成立于1988年,确保与几乎所有操作系统兼容。对于2003年之前发布的操作系统版本,使用IDE可能是最佳选择。虽然物理IDE的最大速度为133MB/秒,但在虚拟化IDE中没有此限制,除非操作系统强制执行。然而,IDE不支持热插拔,即在虚拟机运行时无法移除设备。
SATA适用于2003年后发布的操作系统版本,是现代操作系统中最兼容的选项。从物理上看,它是IDE的进化版,采用串行传输,速度高达6Gbps(约600MB/秒)。然而,在虚拟化环境中,除非客户操作系统强制执行,否则没有固有的速度限制。
VirtIO SCSI和VirtIO SCSI Single提供最快的磁盘访问速度。然而,它们要求客户操作系统安装准虚拟化驱动。如果系统中没有任何IDE/SATA磁盘,除非安装VirtIO SCSI驱动,否则操作系统安装过程将失败。Linux发行版自2012年起包含此驱动,FreeBSD自2014年起支持,而对于Windows操作系统,安装时必须提供包含VirtIO驱动的额外ISO文件。
关于磁盘缓存
磁盘缓存设置涉及数据完整性与性能之间的权衡。
特性 | writethrough | directsync | none | writeback | unsafe |
---|---|---|---|---|---|
缓存使用 | 使用页面缓存(对读取操作有益) | 不使用缓存 | 不使用缓存 | 使用页面缓存 | 使用页面缓存 |
fsync发出 | 每次写入时发出 | 每次写入时发出 | 不发出 | 延迟发出 | 不发出 |
写入过程 | 写入缓存,然后立即刷新到磁盘 | 直接写入磁盘并立即刷新 | 直接写入磁盘,不刷新 | 写入缓存,延迟刷新 | 写入缓存,不刷新 |
读取性能 | 高(利用缓存) | 低(依赖磁盘) | 低(依赖磁盘) | 高(利用缓存) | 高(利用缓存) |
写入性能 | 中等(缓存辅助) | 低(无缓存) | 中等(无缓存) | 高(延迟缓存刷新) | 非常高(延迟缓存刷新) |
数据完整性 | 高 | 非常高 | 中等(依赖磁盘) | 低(延迟写入) | 非常低(数据丢失风险高) |
使用场景 | 优先考虑读取性能和完整性的系统 | 需要最大数据完整性的系统 | 性能驱动且完整性需求中等的系统 | 写入密集型系统,平衡性能和完整性 | 性能优先、可接受数据丢失的系统 |
TRIM(Discard)
Discard命令通知存储系统某些块不再需要。
最初为SSD磨损均衡引入,某些操作系统可能需要SSD模拟来支持TRIM。除了SSD外,TRIM还可以通过移除加密密钥而非覆盖数据来协助安全删除。
在私有云环境中,TRIM允许精简配置的存储回收空间。通常情况下,一旦虚拟机使用了存储,即使删除数据,存储级别仍会保持分配状态。
fstrim -v /mountpoint
对于实时TRIM操作,使用discard选项挂载:
mount -o discard,remount /
IO线程
在VirtIO SCSI中启用IO线程会将磁盘写入操作卸载到与主操作系统线程分开的线程中。
此设置需要额外的CPU资源,但可减少延迟,特别是在具有多个虚拟磁盘且同时处理读/写操作的虚拟机中。