web-dev-qa-db-ja.com

(QEMU)Windows 10 VMを、廃棄(別名トリム)を使用してシンプロビジョニングされたLVMデバイスにセットアップする)

QEMUを使用してWindows10 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
Daniel Santos

許してください。でも、これに2日近く費やしたので、自分の質問に答えるつもりです。オンラインのどこかに答えが必要です。

Virtioドライバーの ChangeLog は、0.1.172-1のviostorに「discard(unmap)コマンドの予備サポート」を追加したと述べていますが、それでも失敗しました-これはとにかく不安定なリリース。

私は私の答えを見つけました ここ 、これは本質的にこれを置き換えることでした:

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
  • 以下のようなものでqemuvmを起動します。
#!/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」を実行します(「スタート」->「WindowsPowerShell」->「WindowsPowerShell」サブエントリーを右クリック->「詳細」->「管理者として実行」をクリックします)
  • PowerShellで、Optimize-Volume -DriveLetter c -Degrag -ReTrim -Verboseを実行します

すべてがうまくいけば、エラーメッセージは表示されず、NTFSファイルシステムで使用されなくなったブロックは破棄され、LVMシンプールに戻されます。 -Verboseを省略すると、PowerShellの上部にかなりのプログレスバーが印刷されますが、そのように吸うため、結果は印刷されません。 -DriveLetter c-FileSystemLabel "System Reserved"に置き換えることで、システム予約済みパーティションを選択することもできます。

おそらく、私はgtk-spiceを使用していることに注意する必要があります-spiceプロトコルのリファレンス実装(私が知っている唯一のものでもあります)。 cygwinをセットアップしてsshdを実行できるように、sshポートをセットアップしました。

0
Daniel Santos