virtualization.rst 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. ..
  2. SPDX-FileCopyrightText: 2018-2023 EasyCoding Team and contributors
  3. SPDX-License-Identifier: CC-BY-SA-4.0
  4. .. _virtualization:
  5. ***************
  6. Виртуализация
  7. ***************
  8. .. index:: virtualization, vm, kvm, virtualbox
  9. .. _virt-selection:
  10. Какую систему управления виртуальными машинами лучше установить?
  11. =====================================================================
  12. Рекомендуется использовать :ref:`KVM <kvm>`, т.к. её гипервизор и необходимые модули уже находятся в ядре Linux и не вызывают проблем.
  13. .. index:: cpu, virtualization
  14. .. _cpu-virt:
  15. Как определить имеет ли процессор аппаратную поддержку виртуализации?
  16. ========================================================================
  17. Проверим наличие флагов **vmx** (Intel), либо **svm** (AMD) в выводе ``/proc/cpuinfo``:
  18. .. code-block:: text
  19. grep -Eq '(vmx|svm)' /proc/cpuinfo && echo Yes || echo No
  20. .. index:: virtualization, kvm, vm
  21. .. _kvm:
  22. Как правильно установить систему виртуализации KVM?
  23. =======================================================
  24. Установим KVM и графическую утилиту управления виртуальными машинами **virt-manager**:
  25. .. code-block:: text
  26. sudo dnf group install Virtualization
  27. Перезагрузим машину для вступления изменений в силу:
  28. .. code-block:: text
  29. sudo systemctl reboot
  30. .. index:: virtualization, kvm, polkit
  31. .. _kvm-users:
  32. Как отключить запрос пароля во время запуска или остановки виртуальных машин при использовании KVM?
  33. =======================================================================================================
  34. Возможностью управления виртуальными машинами обладают члены группы **libvirt**, поэтому нужно добавить в неё свой аккаунт:
  35. .. code-block:: text
  36. sudo usermod -a -G libvirt $(whoami)
  37. .. index:: virtualization, repository, virtualbox, vm
  38. .. _virtualbox:
  39. Как правильно установить VirtualBox в Fedora?
  40. ================================================
  41. Сначала нужно подключить репозиторий :ref:`RPM Fusion <rpmfusion>`, затем выполнить:
  42. .. code-block:: text
  43. sudo dnf upgrade --refresh
  44. sudo dnf install gcc kernel-devel kernel-headers akmod-VirtualBox VirtualBox
  45. Для нормальной работы с USB устройствами и общими папками потребуется также добавить свой аккаунт в группу **vboxusers** и **vboxsf**:
  46. .. code-block:: text
  47. sudo usermod -a -G vboxusers $(whoami)
  48. sudo usermod -a -G vboxsf $(whoami)
  49. .. index:: virtualbox, drive image, disk image, kvm, qemu, qcow2, vdi
  50. .. _vdi-to-qcow2:
  51. Как преобразовать образ виртуальной машины VirtualBox в формат, совместимый с KVM?
  52. ======================================================================================
  53. Для конвертирования образов воспользуемся штатной утилитой **qemu-img**:
  54. .. code-block:: text
  55. qemu-img convert -f vdi -O qcow2 /path/to/image.vdi /path/to/image.qcow2
  56. В случае необходимости создания образа фиксированного размера, добавим параметр ``-o preallocation=full``:
  57. .. code-block:: text
  58. qemu-img convert -f vdi -O qcow2 /path/to/image.vdi /path/to/image.qcow2 -o preallocation=full
  59. .. index:: vmware, drive image, disk image, kvm, qemu, qcow2, vmx, vmdk
  60. .. _vmdk-to-qcow2:
  61. Как преобразовать образ виртуальной машины VMWare в формат, совместимый с KVM?
  62. ===================================================================================
  63. Вариант 1. Воспользуемся утилитой **virt-v2v**:
  64. .. code-block:: text
  65. virt-v2v -i vmx /path/to/image.vmx -o local -os /path/to/kvm -of qcow2
  66. Вариант 2. Воспользуемся утилитой **qemu-img**:
  67. .. code-block:: text
  68. qemu-img convert -f vmdk -O qcow2 /path/to/image.vmdk /path/to/image.qcow2
  69. .. index:: hyper-v, drive image, disk image, kvm, qemu, qcow2, vpc
  70. .. _vpc-to-qcow2:
  71. Как преобразовать образ виртуальной машины Hyper-V в формат, совместимый с KVM?
  72. ===================================================================================
  73. Для преобразования образа воспользуемся штатной утилитой **qemu-img**:
  74. .. code-block:: text
  75. qemu-img convert -f vpc -O qcow2 /path/to/image.vpc /path/to/image.qcow2
  76. .. index:: spectre, hardware, vulnerability, disable, mitigation, windows
  77. .. _windows-cpuvuln:
  78. Можно ли отключить защиту от уязвимостей CPU в гостевых Windows внутри виртуальных машин?
  79. ============================================================================================
  80. Да, `согласно MSDN <https://support.microsoft.com/en-us/help/4072698/>`__, при помощи следующего REG файла:
  81. .. code-block:: ini
  82. Windows Registry Editor Version 5.00
  83. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
  84. "FeatureSettingsOverride"=dword:00000003
  85. "FeatureSettingsOverrideMask"=dword:00000003
  86. .. index:: drive image, disk image, virtualbox
  87. .. _image-type:
  88. Какие дисковые образы лучше: динамически расширяющиеся или фиксированного размера?
  89. =====================================================================================
  90. Фиксированного размера, т.к. они меньше фрагментируются.
  91. .. index:: drive image, disk image, virtualbox, vdi
  92. .. _convert-vdi-to-fixed:
  93. Как конвертировать динамически расширяющийся образ диска VirtualBox в фиксированный?
  94. ========================================================================================
  95. Динамическая конвертация не поддерживается, поэтому воспользуемся утилитой **VBoxManage**, входящей в базовую поставку VirtualBox, для создания нового дискового образа на базе старого:
  96. .. code-block:: text
  97. VBoxManage clonehd /path/to/System.vdi /path/to/System_fixed.vdi --variant Fixed
  98. Теперь в свойствах виртуальной машины подключим новый образ фиксированного размера. Старый при этом можно удалить.
  99. .. index:: drive image, disk image, kvm, qemu, qcow2
  100. .. _convert-qcow2-to-fixed:
  101. Как конвертировать динамически расширяющийся образ диска QCOW2 в фиксированный?
  102. ===================================================================================
  103. Динамическая конвертация не поддерживается, поэтому воспользуемся утилитой **qemu-img** для создания нового дискового образа на базе старого.
  104. Остановим виртуальную машину и переименуем старый файл:
  105. .. code-block:: text
  106. mv System.qcow2 System-old.qcow2
  107. Выполним преобразование:
  108. .. code-block:: text
  109. qemu-img convert -f qcow2 -O qcow2 System-old.qcow2 System.qcow2 -o preallocation=full
  110. Проверим работу с новой конфигурацией и, если всё верно, удалим оригинал:
  111. .. code-block:: text
  112. rm -f System-old.qcow2
  113. .. index:: cpu, virtualization, acceleration
  114. .. _kvm-no-acceleration:
  115. Можно ли использовать KVM на CPU без поддержки аппаратной виртуализации?
  116. ===========================================================================
  117. Нет. KVM требует наличие активной :ref:`аппаратной виртуализации <cpu-virt>` и при её осутствии работать не будет.
  118. В то же время, без наличия этой функции со стороны CPU, могут работать VirtualBox до версии 6.1.0 и VMWare, хотя и с очень низкой производительностью.
  119. .. index:: kvm, libvirt, selinux, semanage, restorecon
  120. .. _kvm-move-directory:
  121. Можно ли перенести каталог с образами виртуальных машин KVM?
  122. ===============================================================
  123. По умолчанию образы создаваемых виртуальных машин создаются в каталоге ``/var/lib/libvirt/images``, что многих не устраивает.
  124. Переместим образы виртуальных машин на отдельный накопитель, смонтированный как ``/media/foo-bar``. ISO будем размещать в каталоге ``iso``, а дисковые образы виртуальных машин -- ``images``.
  125. Создаём собственные политики SELinux для указанных каталогов:
  126. .. code-block:: text
  127. sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/iso(/.*)?"
  128. sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/images(/.*)?"
  129. Сбросим контекст безопасности SELinux для них:
  130. .. code-block:: text
  131. sudo restorecon -Rv /media/foo-bar/iso
  132. sudo restorecon -Rv /media/foo-bar/images
  133. В настройках Virt Manager добавим новую библиотеку ``/media/foo-bar/images`` и зададим её использование для всех виртуальных машин по умолчанию.
  134. .. index:: virtualization, kvm, transfer
  135. .. _kvm-transfer:
  136. Как переместить виртуальную машину KVM на другой ПК?
  137. ========================================================
  138. Переместим образы дисков из каталога ``/var/lib/libvirt/images`` старого хоста на новый :ref:`любым удобным способом <copying-data>`.
  139. Экспортируем конфигурацию виртуальной машины:
  140. .. code-block:: text
  141. virsh dumpxml vmname > vmname.xml
  142. Здесь **vmname** -- название машины KVM, а **vmname.xml** -- имя файла, в котором будут сохранены настройки.
  143. Импортируем ранее сохранённую конфигурацию:
  144. .. code-block:: text
  145. virsh define /path/to/vmname.xml
  146. Новая виртуальная машина появится в списке и будет готова к работе немедленно.
  147. .. index:: virtualization, virtualbox, transfer
  148. .. _virtualbox-transfer:
  149. Как переместить виртуальную машину VirtualBox на другой ПК?
  150. ===============================================================
  151. Получим список доступных виртуальных машин VirtualBox:
  152. .. code-block:: text
  153. vboxmanage list vms
  154. Экспортируем настройки и данные в открытый формат виртуализации версии 2.0:
  155. .. code-block:: text
  156. vboxmanage export vmname -o vmname.ova --ovf20
  157. Здесь **vmname** -- название виртуальной машины VirtualBox, а **vmname.ova** -- имя файла экспорта.
  158. Переместим полученный файл на новый хост :ref:`любым удобным способом <copying-data>`, затем осуществим его импорт:
  159. .. code-block:: text
  160. vboxmanage import /path/to/vmname.ova --options importtovdi
  161. Через некоторое время новая виртуальная машина появится в списке и будет готова к работе.
  162. .. index:: virtualization, kvm, vm, windows
  163. .. _kvm-windows:
  164. Как правильно установить в KVM Windows?
  165. ===========================================
  166. См. `здесь <https://www.easycoding.org/2019/12/19/zapuskaem-windows-v-kvm-na-fedora.html>`__.
  167. .. index:: virtualization, kvm, qemu, qcow2
  168. .. _qcow2-type:
  169. Какой тип QCOW2 образов выбрать?
  170. ====================================
  171. Существует два типа образов:
  172. * :ref:`динамически расширяющийся <qcow2-dynamic>`;
  173. * :ref:`фиксированного размера <qcow2-fixed>`.
  174. У каждого есть как достоинства, так и недостатки.
  175. .. index:: virtualization, kvm, qemu, qcow2
  176. .. _qcow2-dynamic:
  177. Что нужно знать о динамически расширяющихся образах?
  178. ========================================================
  179. Достоинства:
  180. * занимают меньше места на диске, постепенно расширяясь до заданного предела.
  181. Недостатки:
  182. * очень сильно фрагментируются;
  183. * производительность значительно уступает :ref:`образам фиксированного размера <qcow2-fixed>`.
  184. .. index:: virtualization, kvm, qemu, qcow2
  185. .. _qcow2-fixed:
  186. Что нужно знать об образах фиксированного размера?
  187. ========================================================
  188. Достоинства:
  189. * практически не фрагментируются, т.к. все блоки для них заранее зарезервированы на диске;
  190. * имеют более высокую производительность по сравнению с :ref:`динамически расширяющимися образами <qcow2-dynamic>`.
  191. Недостатки:
  192. * занимают очень много места на диске, хотя если файловая система поддерживает `разреженные (sparse) файлы <https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB>`__, эта функция будет использоваться в полном объёме.
  193. .. index:: virtualization, kvm, qemu, qcow2, resize
  194. .. _qcow2-resize:
  195. Как увеличить размер дискового образа QCOW2?
  196. ================================================
  197. Воспользуемся утилитой **qemu-img** для увеличения дискового образа:
  198. .. code-block:: text
  199. qemu-img resize --preallocation=full /path/to/image.qcow2 +10G
  200. При использовании :ref:`образов фиксированного размера <qcow2-fixed>`, добавим параметр ``--preallocation=full``:
  201. .. code-block:: text
  202. qemu-img resize --preallocation=full /path/to/image.qcow2 +10G
  203. Здесь вместо **+10G** укажем насколько следует расширить образ. Все операции должны выполняться при остановленной виртуальной машине, в которой он смонтирован.
  204. По окончании, внутри гостевой ОС расширим используемую файловую систему до новых границ образа при помощи fdisk, GParted или любого другого редактора разделов диска.
  205. .. index:: virtualization, kvm, qemu, qcow2, resize, shrink
  206. .. _qcow2-shrink:
  207. Как уменьшить размер дискового образа QCOW2?
  208. ================================================
  209. Уменьшение размера дискового образа QCOW2 :ref:`при помощи qemu-img <qcow2-resize>` -- это достаточно небезопасная операция, которая может привести к его повреждению, поэтому вместо отрицательных значений для *resize* сначала уменьшим размер дисковых разделов внутри самой гостевой ОС при помощи fdisk, Gparted или любого другого редактора разделов диска так, чтобы справа осталось лишь неразмеченное пространство.
  210. Далее воспользуемся утилитой **qemu-img** и сделаем копию образа, которая уже не будет включать неразмеченное дисковое пространство:
  211. .. code-block:: text
  212. qemu-img convert -f qcow2 -O qcow2 /path/to/image.qcow2 /path/to/new_image.qcow2
  213. В случае необходимости создания :ref:`образа фиксированного размера <qcow2-fixed>`, добавим параметр ``-o preallocation=full``:
  214. .. code-block:: text
  215. qemu-img convert -f qcow2 -O qcow2 /path/to/image.qcow2 /path/to/new_image.qcow2 -o preallocation=full
  216. Подключим новый образ к виртуальной машине вместо старого и проверим работу. Если всё верно, старый можно удалить.
  217. .. index:: virtualization, kvm, qemu, qcow2, ssd, trim
  218. .. _kvm-ssd:
  219. Как оптимизировать KVM для работы с SSD-накопителей?
  220. ========================================================
  221. Каких-то особых оптимизаций производить не требуется. Достаточно лишь использовать дисковые образы гостевых ОС в формате QCOW2, а также при их подключении указать тип контроллера **VirtIO** и установить следующие опции:
  222. * discard mode: unmap;
  223. * detect zeroes: unmap.
  224. Конечно же как в хостовой, так и в гостевой ОС, должна быть :ref:`включена поддержка TRIM <ssd-tuning>`.
  225. .. index:: virtualization, virt manager, kvm, qemu, desktop, shortcut
  226. .. _kvm-desktop-entry:
  227. Как создать ярлык запуска виртуальной машины KVM?
  228. =====================================================
  229. Для создания ярлыка в главном меню рабочей среды, создадим файл ``fedora-rawhide.desktop`` в каталоге ``~/.local/share/applications`` следующего содержания:
  230. .. code-block:: ini
  231. [Desktop Entry]
  232. Name=Fedora Rawhide
  233. Name[ru_RU]=Fedora Rawhide
  234. GenericName=Start Fedora Rawhide
  235. GenericName[ru_RU]=Запуск Fedora Rawhide
  236. Comment=Start Fedora Rawhide
  237. Comment[ru_RU]=Запуск Fedora Rawhide
  238. Exec=/usr/bin/virt-manager --connect "qemu:///session" --show-domain-console "Fedora-Rawhide"
  239. Icon=virtualbox
  240. Categories=Development;
  241. StartupNotify=false
  242. Terminal=false
  243. Type=Application
  244. Здесь вместо **Fedora-Rawhide** укажем реальное имя виртуальной машины KVM, а **qemu:///session** -- сеанс, в котором она создана (**session** -- пользовательский; **system** -- системный).