我正在尝试使用 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。