VirtualBox 和 SSD 的 TRIM 命令支持

Krz*_*ter 28 virtualbox ssd trim virtual-machine

我知道互联网上有大量帖子说这行不通,为什么我几个月前真的花了几天时间寻找解决方案,但我昨天发现了一些关于如何为来宾机器“启用 TRIM 命令支持”的提示. 我试过了,“它看起来”像工作一样。我想知道的是问题在哪里,或者这是否真的正常工作。

来源:
https: //forums.virtualbox.org/viewtopic.php ? f =7& t =
51768 http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

我附加磁盘文件的确切命令:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --nonrotational on --discard on --medium "C:\path\to\file.vdi" --type hdd

它在机器的 *.vbox 文件中生成了这个条目:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>
Run Code Online (Sandbox Code Playgroud)

为了确保我不会丢失任何数据,该驱动器是连接到机器的第二个驱动器。我做了一些简单的测试,比如将一些文件复制到驱动器,离开它,重新启动机器,关闭机器,重新启动后检查它是否在那里,查看主机操作系统中的磁盘文件使用情况。结果是:

  • 不带选项 --nonrotational 和 --discard 附加的磁盘文件即使在来宾操作系统中删除文件后仍保持其(动态)大小
  • 附有上述两个选项的磁盘文件在删除数据后释放空间

现在我的问题是:
- --discard 选项究竟有什么作用?VirtualBox 手册(http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach)中没有描述
它 - 它真的将 TRIM 传递给主机操作系统还是只是看起来像?

小智 21

--discardoptions 指定vdi图像将被收缩以响应trim来自来宾操作系统的命令。必须满足以下要求:

  • 磁盘格式必须是 VDI
  • 清除区域必须至少为 1MB(大小)
  • [可能] 清除区域必须覆盖一个或多个 1MB 块(对齐)

显然,客户操作系统必须配置为发出trim命令,通常这意味着客户操作系统认为磁盘是 SSD。Ext4 支持-o discard挂载标志;OSX 可能需要其他设置,因为默认情况下只有Apple 提供的 SSD 会发出此命令。Windows 应该至少在版本 7 和 8 中自动检测和支持 SSD,我不清楚检测是在安装还是运行时发生。Linux exFAT 驱动程序(由三星提供)支持丢弃命令。尚不清楚 Microsoft 实施的 exFAT 是否支持相同的内容,即使文件系统最初是为闪存设计的。

或者,也有特殊的方法来发布包的一部分trim,例如 Linuxfstrim命令util-linux

早期的解决方案要求用户将未使用的区域清零,例如zerofree明确使用和压缩磁盘(我假设这只有在 vm 离线时才有可能)。


小智 14

由于这是谷歌上的最高结果,让我澄清一下其他答案,即使这是一篇旧帖子。事实上,在客户文件系统上未使用的虚拟块可以将相应的闪存物理块标记为未使用以更好地利用闪存的意义上,可以使 TRIM 工作。这些作品甚至已经出现在其他答案和评论中。

首先,必须设置主机以便修剪可用空间。您可以使用 -o discard 挂载文件系统,也可以通过 cron 定期在文件系统上运行 fstrim。我更喜欢后者,因为在一次删除多个文件时,第一个选项可能会导致系统锁定。

使用的磁盘格式必须是 qarma 写入时的 VDI 动态大小。

确保在 .vbox 文件中设置了 nonrotational="true" discard="true",如 OP 中所述。

然后像往常一样在来宾操作系统中启用 TRIM。在 Linux 中,我再次推荐一个运行 fstrim 的 cron 作业。这在这里可能更重要,因为在虚拟磁盘映像上执行 TRIM 的成本远高于在物理 SSD 上执行的成本,因为移动数据是为了使映像更小。

现在,由于磁盘映像会定期压缩,因此它只会占用实际使用的空间,加上 qarma 写入时的一些 1MB 块大小开销。这再次意味着主机 SSD 上的可用空间将被修剪。

  • 对*现有*第一个磁盘(假设为 SATA)执行此操作的命令:`VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on` (2认同)