Назад | Перейти на главную страницу

(QEMU) Настройка виртуальной машины Windows 10 на устройстве LVM с тонкой подготовкой и сбросом (также известна как обрезка)

Я пытаюсь настроить виртуальную машину Windows 10 с помощью QEMU, и я хочу использовать том LVM с тонкой подготовкой и иметь возможность «восстановить» диск в Windows. Я создал устройство с помощью:

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

Но когда я бегу Optimize-Volume -DriveLetter c -Defrag -ReTrim в Windows PowerShell утверждается, что устройство поддержки не поддерживает обрезку. Как я могу заставить это работать?

Так что простите меня, но я собираюсь ответить на свой вопрос, потому что я потратил на это почти два дня и должен быть ответ где-то в Интернете!

В Журнал изменений для драйверов virtio указано, что они добавили «предварительную поддержку команды discard (unmap)» в 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
  • Загрузите подписанный драйвер virtio iso для Windows
  • Создайте тонкий пул 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 и выберите "Выборочная" установка.
  • Нажмите «Загрузить драйвер» и просмотрите свой компакт-диск (вероятно, e:\vioscsi\w10\amd64)
  • При появлении запроса нажмите «У меня нет Интернета».
  • Когда установка Windows завершится, просмотрите компакт-диск virtio и запустите установщик: e:\virtio-win-gt-x64.msi. Он захочет завершить установку Windows после того, как получит сетевую карту, но вы можете ее пропустить.
  • Возможно перезагрузка Windows
  • Запустите "powershell" суперпользователя (нажмите "Пуск" -> Windows PowerShell -> щелкните правой кнопкой мыши вложенную запись "Windows PowerShell" -> "Дополнительно" -> "Запуск от имени администратора")
  • В PowerShell запустите Optimize-Volume -DriveLetter c -Degrag -ReTrim -Verbose

Если все пойдет хорошо, вы не получите сообщение об ошибке, а блоки, больше не используемые файловой системой NTFS, будут отброшены и возвращены обратно в тонкий пул LVM. Если вы опустите -Verbose, он выводит симпатичную полосу выполнения в верхней части командной оболочки, но не выводит результат, потому что это отстой. Вы также можете выбрать раздел System Reserved, заменив -DriveLetter c с участием -FileSystemLabel "System Reserved".

Наверное, стоит отметить, что я использую gtk-spice - эталонная реализация для spice протокол (также единственный, о котором я знаю). Я настроил порт ssh, чтобы настроить cygwin и запустить sshd.