我知道在 SSD 上运行碎片整理是没有意义的(事实上这是一个坏主意)。那么在 SSD 上运行的虚拟机呢?我应该对硬盘进行碎片整理吗?因为它基本上以相同的方式访问硬盘?
答案1
我确实对我的 VHD 进行了碎片整理,但是是出于空间原因,而不是时间原因:
我对 VHD 使用动态分配选项,因此它们一开始很小,然后根据需要扩展。但是随着 VHD(不一定是文件)变得碎片化,它会扩展以包含所有分配的块。对 VHD 进行碎片整理是再次压缩它的第一步。
答案2
无需对 SSD 进行碎片整理。普通硬盘必须旋转才能找到文件(部分)。SSD 与 RAM 相当,可以以相同的延迟访问所有文件。
维基百科状态“读取性能不会根据 SSD 上数据存储位置而改变”
答案3
这只是我的观点,我没有测试结果来支持它。事情可能发生的情况大致如下:
真实操作系统:
- 应用程序请求数据X(快速)
- 操作系统向磁盘驱动器请求数据 X(快速)
- 物理磁盘获取数据 X 并将其返回给操作系统(如果碎片化则速度慢)
以下是虚拟机中的等效命令链:
- VM应用程序请求数据X(快速)
- VM OS 询问数据 X(快速)
- VM主机要求真实操作系统获取存储在虚拟磁盘文件中的数据X(快速)
- 真实操作系统要求磁盘驱动器获取数据X(快速)
- 物理磁盘获取数据X并将其返回给操作系统(如果碎片化则速度慢)。
如您所见,在这两种情况下,碎片化只会在物理硬盘尝试读取数据的操作阶段才真正成为问题,而这发生在实际操作系统中,不在虚拟机环境中。在此之前,所有操作可能都发生在内存中。
总之,因为我们知道 SSD 不会受到真实操作系统碎片的影响,并且 VM 中的碎片问题可能仅发生在操作的最后一个物理步骤,所以我猜测对虚拟操作系统或主操作系统中的虚拟磁盘文件进行碎片整理不会提高 SSD 的性能,同时与对真实操作系统进行碎片整理一样有害/无用。
编辑:如果这是正确的,那么将虚拟机放在 SSD 上就是一个非常好的理由!在 HDD 上,任何阶段(客户操作系统、虚拟磁盘文件、真实操作系统)的碎片都会破坏线性并导致物理磁盘步骤中的碎片。
答案4
关于 SSD 传统碎片整理的原始问题,我确实同意这是一个坏主意,但有特定的解决方案可以解决文件移动和 SSD 寿命的问题。
如果虚拟机运行的是 Windows 作为其操作系统,则仍会出现碎片化现象,额外 I/O 流量的综合影响不仅会降低客户系统的速度和效率,还会降低主机的速度和效率。Microsoft 和 VMware 都建议在客户系统级别解决碎片化问题。
原因如下...
应用程序请求数据 X
请求由 NTFS.sys 处理
检查文件属性($MFT),如果数据不包含在单个范围(片段)中,则为每个范围/片段创建额外的 I/O 请求以满足原始数据请求。
然后,每个请求都会被发送到磁盘存储驱动程序。
一旦检索到数据,它就会通过堆栈传回给用户/应用程序。
每个 Windows 虚拟机都会向主机系统发送此类 I/O 流量。如果文件系统结构在客户机/虚拟机级别上碎片化,那么这将转化为主机必须处理并由后端存储处理额外且不必要的 I/O 流量。随着您添加越来越多的虚拟机,这种情况会进一步加剧。事实上,在主机文件系统级别,您可以在碎片中再产生碎片。
无论数据存储在 SSD 还是传统 HDD 上,如果您运行的是 Windows,NTFS 文件系统将变得碎片化,因此,由于 NTFS 文件和可用空间碎片化,您将永远无法达到制造商额定的速度和吞吐量。可以通过 PerfMon 查看平均磁盘读取队列长度、平均写入队列长度以及最重要的每秒分割 IO 来测量这些影响。