(QEMU)在精简配置的 LVM 设备上使用丢弃(又名 trim)设置 Windows 10 VM

(QEMU)在精简配置的 LVM 设备上使用丢弃(又名 trim)设置 Windows 10 VM

我正在尝试使用 QEMU 设置 Windows 10 VM,并且我想使用精简配置的 LVM 卷,并能够在 Windows 中“重新修剪”驱动器。我使用以下命令创建了设备:

-drive index=0,media=disk,if=virtio,format=raw,file=/dev/vg0/myvol

但是当我Optimize-Volume -DriveLetter c -Defrag -ReTrim在 Windows PowerShell 中运行时,它声称支持设备不支持修剪。我该如何让它工作?

答案1

所以请原谅我,但我要回答我自己的问题,因为我花了将近两天的时间在这个问题上,并且网上某个地方需要有答案!

变更日志对于 virtio 驱动程序,他们指出他们viostor在 0.1.172-1 中添加了“对丢弃(取消映射)命令的初步支持”,但仍然失败 - 无论如何,这是一个不稳定的版本。

我找到了我的答案这里,本质上是取代这个:

qemu-system-x86_64 --enable-kvm \
    < ... other options ... > \
    -drive index=0,format=raw,if=virtio,media=disk,file=/dev/vg0/myvol

有了这个:

qemu-system-x86_64 --enable-kvm \
    < ... other options ... > \
    -device virtio-scsi-pci,id=scsi0 \
    -device scsi-hd,drive=mydrive0 \
    -drive index=0,format=raw,if=none,id=mydrive0,file=/dev/vg0/myvol

总结一下整个过程:

  • 下载Windows 10 iso
  • 下载为 Windows 签名的 virtio 驱动程序 iso
  • 创建 LVM 精简池(例如lvcreate -L 1t --thinpool tpool vg0
  • 在该池中创建一个精简卷(例如lvcreate --verbose --thin vg0/tpool --virtualsize 128G --name win10
  • 使用类似下面的命令启动 qemu vm:
#!/bin/bash

mem=8G
cores=8
threads=1
name=win10

   WINVOLC=/dev/vg0/${name}
 WIN10_ISO='~/dl/m$/Win10_1903_V2_English_x64.iso'
VIRTIO_ISO=~/dl/virtio-win-0.1.173.iso
  rdp_port=12345
  ssh_port=12346
spice_port=12347
 spice_pwd=like_so_secret

qemu-system-x86_64 --enable-kvm
    -name "${name}" \
    -monitor stdio \
    -cpu host -smp cores=${cores},threads=${threads} -m ${mem} \
    -rtc base=localtime,clock=host \
    -net nic,id=vmnet0,model=virtio \
    -net user,id=vmnet1,hostfwd=tcp::${ssh_port}-:22,hostfwd=tcp::${rdp_port}-:3389 \
    -vga vmware \
    -spice port=${spice_port},password=${spice_pwd} \
    -device virtio-serial-pci \
    -device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
    -chardev spicevmc,id=spicechannel0,name=vdagent \
    -device virtio-scsi-pci,id=scsi0 \
    -device scsi-hd,drive=winvolc \
    -drive index=0,if=none,id=winvolc,format=raw,file=${WINVOLC} \
    -drive index=1,media=cdrom,file=${WIN10_ISO} \
    -drive index=2,media=cdrom,file=${VIRTIO_ISO} \
    -boot order="cd"
  • 跑步spicy -p 12347 -h localhost -w like_so_secret
  • 选择键盘布局
  • 点击“立即安装”
  • 单击“我没有产品密钥”或输入一个(您也可以稍后添加)
  • 选择 Windows 版本并选择“自定义”安装
  • 单击“加载驱动程序”并浏览您的 CD(可能是e:\vioscsi\w10\amd64
  • 出现提示时,点击“我没有互联网”
  • 当 Windows 安装完成后,浏览 virtio CD 并运行安装程序:e:\virtio-win-gt-x64.msi。它将在获得网卡后完成 Windows 设置,但您可以跳过它。
  • 可能需要重启 Windows
  • 以超级用户身份运行“powershell”(单击开始 --> Windows PowerShell --> 右键单击​​“Windows PowerShell”子条目 --> 更多 --> 以管理员身份运行)
  • 在 powershell 中,运行Optimize-Volume -DriveLetter c -Degrag -ReTrim -Verbose

如果一切顺利,您将不会收到错误消息,并且 NTFS 文件系统不再使用的块将被丢弃并返回到 LVM 精简池。如果您省略-Verbose,它会在 powershell 顶部打印一个漂亮的进度条,但不会打印结果,因为它们很糟糕。您也可以通过替换-DriveLetter c来选择系统保留分区-FileSystemLabel "System Reserved"

我可能应该指出,我正在使用gtk-spice该协议的参考实现spice(也是我所知道的唯一协议)。我设置了 ssh 端口,以便可以设置 cygwin 并运行 sshd。

相关内容