Несколько дней назад я собрал первоклассную рабочую станцию, чтобы возиться с хобби-проектами и играть. Купил себе наилучший и новейший процессор (Ryzen 3900x — 12 ядер, 24 потока), производство AMD, а также 32 ГБ ОЗУ – как говорится, «компромиссы – не для нас». Собрал ПК, оказалось, он просто летает. Сконфигурировал систему так, чтобы в ней можно было одновременно работать с Windows и Linux (PopOS), пользуясь двойной загрузкой. От прошлой сборки у меня сохранился твердотельный диск (SSD), на котором был установлен и сконфигурирован дистрибутив Linux. Там я настроил поисковые роботы для Twitter, а также установил и приспособил для работы другие сервисы. Linux я использовал для задач, где требуется продуктивность, а под Windows в основном играл – впрочем, так и принято.

Некоторое время спустя я осознал, что у такой конфигурации есть явный недостаток. Пока я играл, мои поисковые роботы и прочие сервисы, в сущности, оставались выключены. Чтобы это исправить, я изменил порядок загрузки так, чтобы по умолчанию загружалась именно ОС Linux. Но даже в таком случае я не был готов смиряться с такой нагрузкой, которую испытывал процессор – фактически, он был вынужден тянуть обе эти ОС одновременно, хотя и более чем справлялся с этим. Если бы мне удалось как-то виртуализовать уже установленный у меня образ Linux, то процессор бы смог обслуживать обе ОС, даже не напрягаясь. Я к тому же ленив и обнаружил, что переключаться с одной действующей ОС на другую, фактически, деактивируя при этом первую – очень сложно, в особенности, если делать это часто. Мне хотелось просто снизить издержки.

Итак, резюмируя вышесказанное: я хотел попробовать загрузить уже имеющийся образ Linux с другого SSD, представив его как гостевую виртуальную машину под Windows. У меня уже была установлена Windows 10 Professional, так что о выборе гипервизора вопрос не стоял – данная конкретная версия Windows поставляется с Hyper-V. Сложность здесь была в том, как загрузиться именно с физического жёсткого диска, а не с виртуального. Вот какие проблемы вырисовывались с вышеописанным подходом:
  1. Как проскочить через жёсткий диск (на котором уже установлен Linux) прямо на виртуальную машину
  2. Как загрузиться с этого жёсткого диска, воспользовавшись виртуализованным носителем GRUB
  3. Как решить другие проблемы, чтобы добиться гладкой работы системы

Активируем виртуализацию и HyperV


Первым делом необходимо зайти в BIOS и оттуда активировать возможность виртуализации, включив её в Windows. В моём случае всё было просто: найти в BIOS настройку Virtual Machine Mode (SVM) – безопасный режим виртуальной машины. Когда она активна, в Windows можно пользоваться HyperV. После этого активировать HyperV в Windows не составляет труда. Просто выполните следующие шаги:
  1. Через поисковую строку Windows найдите раздел Windows Features.
  2. Поставьте флажок у Hyper-V. Нажмите OK – и всё должно быть готово.
  3. Как только вы активируете эту возможность, Windows перезапустится.


image

Как через SSD добраться до виртуальной машины


Следующая задача – убедиться, что фактически используемый носитель данных в моём случае — SSD) преодолевается без каких-нибудь помех для только что созданной нами виртуальной машины. Обязательно убедитесь, что Windows не пользуется этим носителем и аккуратно перепоручает его нашей целевой VM.

В Windows переводим устройство в оффлайновый режим

Нужно убедиться, что те носители, которые мы передаём виртуальной машине, не используются операционной системой хоста. Для этого диск необходимо перевести в оффлайновый режим. Для этого можно выполнить, например, следующие шаги:
  1. Найдите инструмент Disk Management (Управление дисками) через поисковую строку Windows и откройте его.
  2. В нижней части экрана должны выстроиться все ваши диски, в том числе, логические.
  3. Перейдите к тому носителю с Linux, на который вы хотите устроить переадресацию (речь о том диске, на котором установлен Linux) и щёлкните по нему левой кнопкой мыши. Будет предложено перевести этот диск в оффлайновый режим, щёлкните по этому варианту. Теперь диск должен оказаться оффлайн, и эти изменения отразятся в пользовательском интерфейсе.


image

Создаём виртуальную машину при помощи HyperV

Выполнив предыдущий этап, далее вы должны создать виртуальную машину при помощи HyperV. Перейдите в HyperV и там создайте новую VM. Новая виртуальная машина создаётся сразу со всеми необходимыми конфигурационными настройками – речь, в частности, об объёме памяти и количестве ядер процессора. Создавая новую виртуальную машину, убедитесь, что выбираете для неё поколение 2 в разделе «Specify Generation» (на то нет никаких особых причин, просто этот вариант кажется более новым и мне лучше подходит). В разделе Connect Virtual Hard disk (Подключить виртуальный жёсткий диск) выберите опцию “Attach a Virtual Hard disk later” (Прикрепить виртуальный жёсткий диск позже). Чтобы смонтировать наш носитель с Linux и убедиться, что мы можем с него загрузиться, нам нужно проложить путь с этого устройства к виртуальной машине:
  1. Перейдите в настройки той VM, которую только что создали, найдите раздел с контроллером SCSI. Там необходимо добавить жёсткий диск.
  2. В разделе «media» ваш HDD с Linux HDD должен появиться в разделе «Physical Hard disk» (физический жёсткий диск). Выберите жёсткий диск и нажмите «apply» (Применить).
  3. Смонтируйте и любые другие диски, которые вам потребуются.
  4. Скачайте отсюда образ диска SuperGrub2
  5. В подразделе «DVD drive» раздела SCSI выберите в качестве файла образа тот ISO, который недавно скачали.


image

SuperGrub2 поможет нам в случае, если при загрузке с VM мы не сможем найти раздел с GRUB. Таким образом, при помощи SuperGrub2 мы загружаемся в установленный дистрибутив Linux.
Когда закончите, оставьте для DVD-дисковода наивысший загрузочный приоритет.

Отключаем мгновенные снимки


HyperV не позволит вам загрузить созданную таким образом виртуальную машину, так как HyperV Manager не может делать мгновенные снимки. Дело в том, что носитель, на котором установлена наша система – это физический HDD, а не виртуальный. Можно отключить создание мгновенных снимков, перейдя в настройки VM -> Management -> Checkpoints и убрав галочку у пункта «Enable Checkpoints».

Загружаемся через виртуальную машину Linux


Как только выполните все вышеперечисленные шаги, вы сможете поднять виртуальную машину и далее загрузиться в меню SuperGrub. В этом меню выберите запись “Detect and show boot methods” (Обнаружить и показать методы загрузки).

image

После этого у вас должна появиться возможность выбрать вашу версию Linux, и далее вы сможете в неё загрузиться.

Конфигурируем драйвер дисплея


Если вы пользуетесь в имеющемся у вас дистрибутиве Linux проприетарными драйверами Nvidia, то их нужно удалить. Сделав это, установите пакет xserver-xorg-video-fbdev, чтобы у вас заработал сервер xorg.

sudo apt-get install xserver-xorg-video-fbdev 

Также я добавил конфигурационный файл x11, но точно не знаю, помог он или нет. Оставлю, вдруг кому-нибудь пригодится. Создайте новый файл /etc/X11/xorg.conf.d/30-hyperv.conf и добавьте в него следующий сниппет.

Section "Device"
   Identifier "HYPER_V Framebuffer"
   Driver "fbdev"
EndSection

Без перечисленных костылей я не мог загрузиться в графический пользовательский интерфейс (хотя, интерфейс командной строки работает нормально). Как только всё это проделаете и перезагрузитесь, Linux GUI должен начать нормально загружаться.

Заключение


Поздравляем! Вот вы и виртуализовали ваш дистрибутив Linux, и теперь можете обращаться к нему из вашей ОС Windows. Достоинство этого подхода в том, что при нём сохраняется возможность нормально загружаться в ОС Linux, а все изменения остаются согласованными как в виртуальной машине, так и в самой системе Linux, так как обе эти системы установлены на одном и том же носителе. Единственное, с чем у меня возникли проблемы – как включить драйверы GPU. Может быть, в будущем я смогу динамически переключать дисплейные драйверы в зависимости от контекста.

Ещё этот метод не сработает, если на рассматриваемом жёстком диске у вас стоит Linux. Думаю, в таком случае было бы проще преобразовать весь сегмент диска в VHDX-файл. У такого подхода есть собственные недостатки – в частности, вы не сможете добиться согласованности данных в обоих инстансах.

image

Комментарии (14)


  1. lair
    20.10.2023 13:13
    +7

    Но даже в таком случае я не был готов смиряться с такой нагрузкой, которую испытывал процессор – фактически, он был вынужден тянуть обе эти ОС одновременно, хотя и более чем справлялся с этим.

    Сравним с оригиналом:

    Even then, I wasn’t ready to accept this tradeoff when I had a processor that was more than capable of handling both of these OSes at the same time.

    Смысл полностью поменялся. Это в блоге издательского дома, который выпускает переводы профессиональной литературы в этой области.

    А люди потом удивляются, почему я не доверяю переводам.


  1. diogen4212
    20.10.2023 13:13

    Тема проброса видеокарты в вирутальную машину Linux так и осталась не раскрытой, а жаль...


    1. Houl
      20.10.2023 13:13

      А что там раскрывать. Если есть отдельная дискретка, то система должна позволить подцепить через dda. Если не даёт или только встройка, то можно настроить GPU Partitioning.


      1. diogen4212
        20.10.2023 13:13

        Это точно будет работать с хостом на Винде и вируталке на Линуксе? Кажется, есть какие-то ограничения с Линуксом
        https://learn.microsoft.com/ru-ru/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment

        https://learn.microsoft.com/ru-ru/windows-server/virtualization/hyper-v/feature-descriptions-for-linux-and-freebsd-virtual-machines-on-hyper-v#video
        и вот тут в разделе Видео " Эта функция обеспечивает высокопроизводительную графику и более высокое разрешение для виртуальных машин. Это устройство не предоставляет расширенный режим сеанса или возможности RemoteFX. "

        Либо будет работать, но не с потребительскими видеокартами (у меня Нвидия 3060)


        1. Houl
          20.10.2023 13:13

          В виде отдельного PCI-E устройства не вижу большой разницы между GPU и каким нить Wi-Fi адаптером. Но последний я могу проверить и заявить что работает, а вот отдельного GPU у меня нет.

          Если интересно, то можете проверить посредством:

          1) Данный скрипт покажет совместимость оборудования для DDA https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1

          2) Или всё в одном (кроме GPU Partitioning) проверка, монтирование удаление и все в GUI - https://github.com/Houl777/DDA. Доработал софтину от китайского товарища.


  1. Johan_Palych
    20.10.2023 13:13

    Купил себе наилучший и новейший процессор (Ryzen 3900x — 12 ядер, 24 потока)

    AMD Ryzen™ 9 3900X Launch Date 7/7/2019
    https://www.amd.com/en/product/8436
    Running Native Linux install as a VM using HyperV
    https://www.abagade.com/dualbootasVM/
    Hindi rusi bhai bhai!
    https://www.abagade.com/


  1. 13werwolf13
    20.10.2023 13:13

    всё же просто:

    1) отказываемся от дуалбута и винды в целом
    2) profit

    на дворе не прошлый век, если винда нужна вам только для игр то вам не нужна винда


    1. 411
      20.10.2023 13:13
      +5

      Или от линукса, если вам нужен линукс на винде, есть WSL2


      1. 13werwolf13
        20.10.2023 13:13

        я предпочту ОС которая не разваливается ни с того ни с сего и пару прог в wine чем бомбу замедленного действия и тонну софта в wsl


  1. Megaloss
    20.10.2023 13:13

    Играть на гипервизоре. What could possibly go wrong?


    1. alan008
      20.10.2023 13:13
      +1

      Иностранный автор исходной статьи предлагает, наоборот, играть на Винде, а работать на гипервизорном линуксе.


  1. Megaloss
    20.10.2023 13:13

    Вы наверное хотели сказать виртуализированном линуксе. Тогда слово "наоборот" тут лишнее. Автор играет на Винде на которой параллельно крутится гипервизор и под ним виртуальный Линукс с графической оболочкой на отдельном физическом диске чтобы парсить сообщения в твиттере а также крутить "другие сервисы" требующие "продуктивность".


  1. Houl
    20.10.2023 13:13

    Что ещё следует добавить в статью:

    1) Настройка Enhanced Session через xrdp

    2) Прямой доступ к VM на хосте через mstsc


  1. LuchS-lynx
    20.10.2023 13:13

    имхо конечно, но как по мне использовать гипервизором линукс проще и гибче, взять тот же proxmox к примеру