当使用动态分配的映像时,什么 FS 可以将未使用的块回收到 VirtualBox?

当使用动态分配的映像时,什么 FS 可以将未使用的块回收到 VirtualBox?

我喜欢在 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

相关内容