CentOS 中 VirtualBox 磁盘性能优化
一 宿主机与 VirtualBox 侧设置
- 将虚拟硬盘放在SSD/NVMe上,优先使用SATA 控制器直连虚拟盘,避免不必要的 IDE 与过度嵌套的镜像链;动态分配磁盘便于空间管理,但会产生碎片,定期做离线压缩回收空间。
- 在宿主机 BIOS/UEFI 启用Intel VT-x/AMD-V,并确认 VirtualBox 内核模块(如 vboxdrv)已加载;为虚拟机合理分配CPU/内存,避免过度分配导致宿主机抖动。
- 安装并启用VirtualBox Guest Additions,可获得更好的 I/O 与图形支持(如剪贴板、共享文件夹等)。
二 CentOS 来宾系统层优化
- 文件系统与挂载
- 使用合适的文件系统(如 ext4/XFS),挂载时加上noatime/nodiratime以减少元数据写入;对数据库/高并发场景,结合 LVM 做条带化(striping)可提升吞吐。
- I/O 调度器
- 针对SSD/NVMe优先使用 none/mq-deadline;机械盘可用 mq-deadline 或 bfq。查看与临时切换示例:
- 查看:cat /sys/block/sda/queue/scheduler
- 切换:echo mq-deadline > /sys/block/sda/queue/scheduler
- 虚拟内存与脏页
- 适度降低写回激进度,减少抖动:
- sysctl -w vm.dirty_ratio=10
- sysctl -w vm.dirty_background_ratio=5
- sysctl -w vm.dirty_writeback_centisecs=100
- sysctl -w vm.swappiness=10
- 监控与定位
- 用 iostat -x 1、vmstat 1、sar -d 观察 await、svctm、util、r/s/w/s,先确认是带宽瓶颈还是IOPS/延迟瓶颈,再决定调度器、队列深度、文件系统与是否上 SSD。
三 共享文件夹与网络盘的性能取舍
- 避免把高 I/O 工作负载放在 VirtualBox 的 vboxsf 共享文件夹上,其通用性较强但性能通常不如原生磁盘;如必须使用共享文件夹,确保已安装 Guest Additions 并正确挂载(如 mount -t vboxsf ShareName /mnt/hgfs),同时检查权限与用户组(如 vboxsf)。
- 在 Linux 宿主机 + Vagrant 场景,常用 NFS 共享来显著提升代码同步与 I/O 性能(示例 mount_options: nolock,vers=3,udp,noatime,actimeo=1)。
- 若对吞吐敏感,优先改为桥接/仅主机网络 + 在来宾内挂载 SMB/NFS 网络盘,或直接把数据盘作为VMDK/VHD附加到来宾中以获得接近原生磁盘的性能。
四 维护与空间回收
- 删除不再需要的快照,减少快照链长度;快照越多,合并与 I/O 开销越大。
- 对动态 VDI做空间回收:先在来宾内将未用空间“清零”(例如 dd if=/dev/zero of=/free bs=1M; rm -f /free),关机后在宿主机执行:
- VBoxManage modifyhd “<path/to/disk.vdi>” --compact
- 定期碎片整理(机械盘)与TRIM(SSD,若宿主机与文件系统支持),保持盘块连续性与空间回收效率。