Несмотря на то что последние лет 15 я использую только линукс, иногда возникает потребность в винде, в основном это касается случаев прошивки firmware в какую либо аппаратуру. Я решил купить себе внешний ssd, установить на него линукс с личными файлами, настройками, паролями и брать его в командировку вместо ноубука (или вместе с ним). Линукс это хорошо, но винда нужна для перепрошивки аппаратуры , которую мне приходится налаживать. Итак цель - поставить винду в виртуальную машину, прокинуть COM порт, прокинуть USB флешку(и), организовать обмен файлами/буфером обмена между хостом (линукс) и гостевой машиной (виндоуз 10) и при этом сохранить максимальную совместимость с неизвестно какими физическими компьютерами, где я все это буду загружать.
1) Что нам понадобится:
- Скачать с сайта майкрософта установочный образ Windows 10 (гугл или яндекс в помощь)
- Скачать образ диска с драйверами для виртуальной машины virtio-win iso c этой страницы
- Установить в системе пакеты qemu, seabios, virt-viewer (может еще что, мне уже сейчас не понять).
2)Первым делом надо создать виртуальный диск для гостевой машины, это делается командой
qemu-img create -f qcow2 -o compat=1.1 windows-10-vm.qcow2 100G
здесь написано создать диск в формате qcow2 (родном и наиболее продвинутом формате qemu), версия этого формата 1.1, диск будет в файле windows-10-vm.qcow2 и иметь максимальный объем 100GB.
После выполнения этой команды у вас появится маленький файл:
3) Можно приступать к установке винды, это делается командой196 -rw-r--r-- 1 user user 198208 Nov 10 20:52 windows-10-vm.qcow2
qemu-system-x86_64-spice -enable-kvm -machine type=q35,accel=kvm -m 4096 -cpu qemu64 -smp 4 -vga qxl -usb -device usb-tablet -hda windows-10-vm.qcow2 -cdrom /home/user/Downloads/Win10_1903_V2_EnglishInternational_x64.iso
здесь написано использовать эмулятор персонального компьютера qemu-system-x86_64-spice с вкомпилированной поддержкой протокола spice (поддержка буферов обмена и драг'н'дроп файлов для удаленного подключения), использовать встроенный в ядро линукса гипервизор виртуальных машин kvm, тип эмулируемого компьютера q35, включить оптимизацию для kvm, выделить виртуальной машине 4096 Мегабайт памяти (исправьте в соответствии с вашими возможностями), эмулировать виртуальный процессор qemu64 с неким общим множеством команд с 4 ядрами (можете поправить в соответствии с вашим физическим процессором, у меня 8-ядерный), эмулировать виртуальную видеокарту qxl, -usb -device usb-tablet позволит нам не ограничивать мышь в окне виртуальной машины, далее указано где наш виртуальный диск и установочный образ винды.
Закончите установку виндоуз как обычно, настройте что вы там обычно настраиваете в винде и выключите виндоуз.
4) Создайте еще один временный маленький виртуальный диск для qemu, он нам понадобится для установки драйвера виртуального дискового контроллера:
qemu-img create -f qcow2 -o compat=1.1 temp.qcow2 100M
5) Теперь запустим виртуальную машину, подключив к ней еще этот виртуальный диск и образ диска с драйверами:
qemu-system-x86_64 -enable-kvm -machine type=q35,accel=kvm -m 4096 -cpu qemu64 -smp 4 -vga qxl -usb -device usb-tablet -soundhw hda -hda windows-10-vm.qcow2 -drive file=temp.qcow2,if=virtio -cdrom /home/user/Downloads/virtio-win-0.1.171.iso
Здесь уже видно, что мы подключили эмуляцию звуковой карты -soundhw hda, подключили второй диск -drive file=temp.qcow2,if=virtio но уже подключенный к другому интерфейсу (первый пока по прежнему сидит на эмулированном IDE) и подключили образ диска с драйверами.
6) Теперь в запустившейся виндоуз открываем cdrom с драйверами и устанавливаем guest-agent, драйвер для virtio scsi (он помечен знаком вопроса в менеджере устройств), драйвер видеокарты qxldod, cкачиваем пакет Windows guest tools - spice-guest-tools, устанавливаем его и выключаем винду.
7) Опять запускаем виртуальную машину уже с новыми драйверами и без лишних дисков:
qemu-system-x86_64 -enable-kvm -machine type=q35,accel=kvm -m 4096 -cpu qemu64 -smp 4 -vga qxl -usb -device usb-tablet -soundhw hda -drive file=windows-10-vm.qcow2,if=virtio
Проведите оставшиеся настройки виндоуз - например заставить виндоуз и линукс показывать одинаковое время, можно отключить fast boot у виндоуз (гугл в помощь, но в принципе на этом установка винды закончена).
8\) Теперь надо написать скрипт для запуска виртуальной машины и включить поддержку буферов обмена и перекидывания файлов. Но я уже написал за вас:
Код: Выделить всё
#!/bin/sh
#
# This script will start emulation with spice (with clipboard, file dropping, usb redirection)
#
qemu-system-x86_64 -enable-kvm \
-machine type=q35,accel=kvm \
-m 3072 \
-cpu qemu64 \
-smp 2 \
-vga qxl \
-usb \
-device usb-tablet \
-soundhw hda \
-drive file=/home/qemu/win10/wirtual-10.qcow2,if=virtio \
-name wirtual-10 \
\
-device virtio-serial-pci \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0 \
-chardev spicevmc,id=spicechannel0,name=vdagent \
-spice unix,addr=/tmp/vm_spice.socket,disable-ticketing \
\
-device ich9-usb-ehci1,id=usb \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \
-chardev spicevmc,name=usbredir,id=usbredirchardev1 \
-device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \
-chardev spicevmc,name=usbredir,id=usbredirchardev2 \
-device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \
-chardev spicevmc,name=usbredir,id=usbredirchardev3 \
-device usb-redir,chardev=usbredirchardev3,id=usbredirdev3 \
\
"$@"&
sleep 2
exec remote-viewer -t "Windows 10" "spice+unix:///tmp/vm_spice.socket"
Вот собственно и всё, вам осталось только подкорректировать в этом скрипте количество ядер CPU, RAM выделяемых виртуальной машине и путь к виртуальному диску.