VirtualBox 中 CentOS 存储性能优化
一 存储控制器与磁盘类型
- 控制器选择:系统盘优先使用 SATA 控制器;如必须使用 NVMe,请安装 VirtIO 驱动 后再用 NVMe 控制器,以获得更高 IOPS 与更低 CPU 开销。
- 磁盘类型:优先选择 固定大小(Fixed) 虚拟硬盘以获得更稳定的顺序与随机 I/O;若空间弹性更重要,再选 动态分配(Dynamic)。
- 缓存策略:在虚拟机设置的 存储 → SATA 控制器 → 属性 → 硬盘 → 固态驱动器 勾选,启用 SSD 仿真;并在 存储 → 控制器:SATA → 端口 0 → 高级 将 主机 I/O 缓存 设为 开启(提升元数据与随机写性能,注意断电风险由宿主机承担)。
- 多磁盘场景:将 数据盘 单独挂到 第二个 SATA 端口,避免与系统盘争抢 I/O 队列。
二 宿主机与 VirtualBox 设置
- 启用虚拟化:在宿主机 BIOS 打开 VT‑x/AMD‑V,并在 VirtualBox 全局设置中启用硬件虚拟化,减少虚拟化开销。
- 更新版本:保持 VirtualBox 与宿主机驱动 为最新稳定版,获取 I/O 路径与调度优化修复。
- 存储路径:将虚拟磁盘文件放在 本地 SSD/NVMe 上,避免放在网络共享或加密盘。
- 快照策略:频繁快照会显著降低 I/O 并影响合并/压缩效果,生产环境建议 少用或合并快照。
三 CentOS 内文件系统与 I/O 调度
- 安装增强功能:在客户机中安装 VirtualBox Guest Additions,可获得更好的 I/O 与图形集成。
- 文件系统挂载优化:在 /etc/fstab 为主分区添加 noatime,nodiratime,减少元数据写入;示例:
/dev/sda1 / ext4 defaults,noatime,nodiratime 0 0
- I/O 调度器:对 SSD/NVMe 使用 none/mq-deadline,对机械盘使用 mq-deadline;查看与临时切换:
cat /sys/block/sda/queue/scheduler
echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler
- 透明大页(THP):数据库等重负载建议关闭或延迟分配,降低抖动:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
- 写回策略:适度降低脏页回写阈值以减少抖动(示例值,需结合负载测试):
sudo sysctl -w vm.dirty_background_ratio=5
sudo sysctl -w vm.dirty_ratio=10
- 空间回收与对齐:
- 定期清理并回收空间(见第四节)。
- 若使用 LVM/RAID,确保 起始扇区 4MiB 对齐,避免跨条带写放大。
四 空间回收与 VDI 瘦身
- 适用前提:虚拟磁盘为 动态扩展 且已删除大量文件。
- 操作步骤:
- 在客户机删除无用文件后,用零填充空闲空间并删除填充文件:
sudo dd if=/dev/zero of=/zero bs=1M status=progress
sudo rm -f /zero
- 关闭虚拟机。
- 在宿主机执行压缩(路径含空格需加引号):
VBoxManage modifyhd “/path/to/disk.vdi” --compact
- 如需进一步回收,先 删除快照 再压缩,效果更显著。
- 风险提示:填充与压缩会显著增加磁盘写入与 I/O 时间,请在维护窗口执行并提前备份。
五 监控与验证
- 客户机内:使用 iostat -x 1、vmstat 1、sar -d 观察 await、r/s、w/s、util% 等指标,验证调度器、挂载选项与缓存策略的效果。
- 宿主机侧:观察 磁盘活动时间、队列深度 与 CPU I/O 等待,确认瓶颈是否在存储路径。
- 变更流程:每次只调整 一个变量(如调度器或挂载选项),通过基准测试对比 IOPS、延迟与吞吐,再决定是否固化到配置。