我以前是 VirtualBox 用户,最近我转到了 KVM(QEMU/libvirt 或任何其他名称)。我知道在 VirtualBox 中,当你向虚拟机添加新的存储设备时,会有一个标记为固态硬盘如果选中,客户系统将把虚拟磁盘视为固态设备。这非常有用,因为它可以通知客户系统(即 Windows)禁用碎片整理。我想知道这在 KVM 中是否可行,因为我在互联网上找不到任何相关信息?
答案1
目前 QEMU 中没有机制将 SCSI、ATA 或 VirtioBlk 磁盘标记为由非旋转存储支持。因此客户操作系统不会立即执行最佳设置。作为一种解决方法,对于 Linux,您可以通过在 sysfs 中为任何由 SSD 支持的磁盘取消设置块设备的“旋转”标志来覆盖此问题。我正在与人们交谈,以了解是否有可能将此功能添加到 QEMU 中,使其在未来版本中“正常工作”。
答案2
你不需要关心 Windows 中的碎片整理,因为如果相信一些来源Windows 中的碎片整理无法在 SSD 驱动器上完全关闭:
如果您完全禁用碎片整理,则文件系统元数据可能会达到最大碎片化程度,并可能给您带来麻烦。
真正重要的是在虚拟机内启用 TRIM 支持。您可以使用virtio-scsi
支持 TRIM 命令来实现这一点。
更改虚拟机配置以设置控制器模型virtio-scsi
:
<controller type='scsi' index='0' model='virtio-scsi'>
并更改每个磁盘以启用unmap
选项:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' discard='unmap'/>
答案3
答案4
QEMU 的最新版本(我尝试了 2.12.0)支持一个rotation_rate
参数。如果您将其设置为 1,则客户机应将磁盘视为 SSD。目前,libvirt 不直接以 XML 格式支持此参数,因此您必须将其作为参数传入qemu:commandline
。
以下是我为 OSX 客户机使用的 libvirt 配置的相关部分:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
…
<devices>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native' discard='unmap'/>
<source dev='/dev/vg1/osx'/>
<target dev='sda' bus='sata'/>
<boot order='2'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
…
</devices>
<qemu:commandline>
…
<qemu:arg value='-set'/>
<qemu:arg value='device.sata0-0-0.rotation_rate=1'/>
</qemu:commandline>
</domain>