我喜欢在 VirtualBox 中使用动态分配的图像。
如果您想分发图像,这是首选方式(还记得 Vagrant 吗?)。
当使用动态分配的映像时,哪些 Linux FS 可以将未使用的块回收到 VirtualBox?
我看到用户运行:
sudo dd if=/dev/zero of=/EMPTY bs=1M || : ; rm -f /EMPTY
缩小 VDI 映像。
我们也都知道 SSD 驱动器的 TRIM ATA 命令(discard
选项mount
)...
答案1
官方文档指出:https://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach
VBoxManage storageattach <UUID> --nonrotational
:
此开关允许启用虚拟硬盘的非旋转标志。某些客户机(即 Windows 7+)将此类磁盘视为 SSD,并且不会在此类介质上执行磁盘碎片整理。
VBoxManage storageattach <UUID> --discard
:
此开关启用虚拟硬盘的自动丢弃功能。这指定将收缩 VDI 映像以响应来自来宾操作系统的修剪命令。必须满足以下要求:
磁盘格式必须是VDI。
已清除区域的大小必须至少为 1MB。
VirtualBox 只会修剪整个 1MB 块。 VDI 本身被组织成 1MB 块,因此只有当正在 TRIM 的空间是 1MB 边界处至少 1MB 的连续块时,这才有效。在 Windows 上,偶尔进行碎片整理(使用“defrag.exe /D”),或在 Linux 下运行“btrfs 文件系统碎片整理”作为后台 cron 作业可能会有所帮助。
注意:来宾操作系统必须配置为发出修剪命令,通常这意味着来宾操作系统将磁盘“视为”SSD。 Ext4 支持 -o 丢弃挂载标志; OSX 可能需要额外的设置。 Windows 应该自动检测和支持 SSD - 至少在版本 7、8 和 10 中。Linux exFAT 驱动程序(由 Samsung 提供)支持 trim 命令。
目前尚不清楚 Microsoft 的 exFAT 实现是否支持此功能,尽管该文件系统最初是为闪存设计的。
另外,还有一些特殊的方法来发出trim,例如Linux fstrim 命令,它是util-linux 软件包的一部分。早期的解决方案要求用户将未使用的区域清零(例如使用 Zerofree),并显式压缩磁盘 - 仅当 VM 离线时才可能。
所以存储定义为:
<AttachedDevice discard="true" nonrotational="true" type="HardDisk">
与 FS 一样Ext4 / Btrfs / JFS / XFS / F2FS / VFAT安装-o discard
应该可以工作...
更新VirtualBox 中的 TRIM 支持仍然不稳定:https://www.virtualbox.org/ticket/16795
也可以看看https://superuser.com/questions/646559/virtualbox-and-ssds-trim-command-support