VirtualBox和SSD的TRIM命令支持


27

我知道互联网上有大量帖子说这是行不通的,为什么?几个月前我真的花了几天时间寻找解决方案,但是昨天我发现了一些技巧,如何为来宾计算机“启用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” –端口1 –设备0 –nonrotational on –discard –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>

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

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

现在这是我的问题:
---discard选项到底有什么作用?VirtualBox手册(http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach)中
未对此进行说明-是将TRIM真正传递给主机OS还是只是看起来像?


3
在与虚拟磁盘连接的虚拟机上使用的虚拟TRIM可带来虚拟的感觉……
Fiasco Labs

Ramhound:那么存储子菜单中的“固态驱动器”复选框选项是什么?此外,如果手册中提到了--discard之类的选项,则应进行详细说明。我完全不明白你的意思,“有一个没有描述它的原因”。如果是这样,为什么完全在手册中?
2013年

11
为了回答@Ramhound,我的博客是OP列出的帖子之一。我不确定他的原因是什么,但是对我来说,我有一个虚拟机,需要物理缩小动态分配磁盘的文件大小。那是一个保留了已删除数据的磁盘,我正试图将其缩小到较小的大小-通过TRIM命令使这种情况得以实现...将我的虚拟磁盘从12G缩小到7G。对于OP,希望我的帖子对您​​有所帮助。我是在博客上看到传入流量的。
杰森罗(Jayson Rowe)2014年

只是对任何对此主题感兴趣的人的警告。VirtualBox磁盘映像模拟器上的修整实现存在很多错误,可能会使您的vm崩溃。为此打开了一个2岁的错误。可以启用它,但不要浪费时间尝试它。
Dominik SMogor

我认为这是Dominik所指的错误:virtualbox.org/ticket/16450
bobpaul

Answers:


19

--discardoptions指定vdi将缩小图像以响应trim来自客户机OS的命令。必须满足以下要求:

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

显然,必须将来宾OS配置为发出trim命令,这通常意味着使来宾OS认为磁盘是SSD。Ext4支持-o discard挂载标志;OSX可能需要其他设置,因为默认情况下,仅此命令发出了Apple提供的SSD。Windows应该至少在版本7和版本8中自动检测并支持SSD,目前尚不清楚是否在安装或运行时进行检测。Linux exFAT驱动程序(由Samsung提供)支持throw命令。尚不清楚Microsoft的exFAT实现是否支持相同功能,即使文件系统最初是为Flash设计的。

另外,也有一些特定的发布方法trim,例如Linux fstrim命令,它是util-linux软件包的一部分。

较早的解决方案要求用户将未使用的区域清零,例如zerofree,明确地使用和压缩磁盘(我假设只有在vm处于脱机状态时才可行)。


1
另外,在btrfs上使用某种重复数据删除功能(尤其是在0个区域打孔的重复数据处理),btrfs balance确实有助于创建尽可能多的可修剪区域。
全方位

12

由于这是Google的最佳结果,因此即使这是旧文章,也让我澄清一下其他答案。实际上,从客户机文件系统上未使用的虚拟块可以将相应的闪存物理块标记为未使用的意义上来说,可以使TRIM工作,以更好地利用闪存。这些片段甚至已经存在于其他答案和评论中。

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

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

确保按照OP中的说明在.vbox文件中设置了nonrotational =“ true”丢弃=“ true”。

然后照常在来宾操作系统中启用TRIM。在Linux中,我再次建议运行fstrim的cron作业。由于在虚拟磁盘映像上执行TRIM的成本比在物理SSD上进行TRIM的成本要高得多,这是因为数据要四处移动以减小映像的大小,因此这在这里可能更为重要。

现在,由于磁盘映像已定期压缩,因此仅占用实际使用的空间,加上qarma写入时会占用大约1MB的块大小开销。同样,这意味着可用空间将在主机SSD上被TRIM'ed。


实际上,我使用trim命令杀死了一些虚拟机。
davidbaumann

@davidbaumann这是怎么发生的?
dvtan

实际上,启用它后,它开始减少约20GB。恰在此刻,笔记本电脑崩溃了(这些天我的GPU出现了一些问题)。forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann '18年

命令执行到现有的第一个磁盘(假设SATA):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.