Windows 10 в KVM: измените загрузочный диск на Virtio

25

Я установил виртуальную машину Windows 10, используя диск IDE, и теперь хотел бы заменить диск на драйвер Virtio.

Для других версий Windows подход в этом вопросе представляется достаточным - как перенести виртуальную машину IDE на виртуальную машину virtio?

Однако с Windows 10 это приводит к INACCESSIBLE_BOOT_DEVICEпроблеме.

Мне известно, что предпочтительным подходом является использование устройства Virtio с самого начала и установка соответствующего драйвера virtio при появлении соответствующего запроса. К сожалению, у меня были некоторые отдельные проблемы со сменой компакт-диска в KVM (я также не мог заставить работать 2 устройства CDROM).

Есть ли способ исправить эту проблему без переустановки?

Подобная проблема здесь - https://me.m01.eu/blog/2015/03/windows-10-kvm-and-iscsi/#comment-36090

Graeme
источник
+1. Я не мог понять эту проблему сам. Следуя различным обходным путям для предыдущих версий Windows, я попытался установить драйвер VirtIO на виртуальной машине Windows после подключения блочного устройства VirtIO, но у меня все еще был INACCESSIBLE_BOOT_DEVICEсиний экран. В итоге я переустановил на загрузочное устройство VirtIO.
Дельтик
Поскольку я ленивый, я опубликую это в качестве комментария, чтобы вы могли проверить: Добавьте дополнительный диск с virtio “controller”. Установите драйвер, когда Windows попросит вас. Не нужно создавать разделы или что-то еще. Затем переключите загрузочный диск на virtio. Поскольку экземпляр драйвера контроллера теперь установлен (очень важно), он должен работать.
Даниэль Б
@DanielB: Это именно то, что я сделал. Похоже, что ваше предложение работает для предыдущих версий Windows, но не для Windows 10.
Deltik
Хм, хорошо. Ну, я думаю, тогда у меня есть единственный лучший способ не решить вашу проблему (смеется): просто измените Windows ISO и включите драйверы. Имейте в виду, что он должен оставаться загрузочным. Таким образом, вы можете (надеюсь) установить прямо в virtio.
Даниэль Б
1
@DanielB: Драйвер VirtIO может быть загружен в процессе установки с помощью отдельного диска с драйверами. Если Windows 10 установлена ​​с драйвером VirtIO, проблем нет. Просто существующие в Интернете инструкции по переключению Windows с IDE на VirtIO не работают для виртуальных машин Windows 10 KVM.
Deltik

Ответы:

24

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

  1. Откройте командную строку с повышенными правами и установите виртуальную машину для загрузки в безопасном режиме, набрав

    bcdedit / set {current} safeboot минимальный

  2. выключите виртуальную машину и измените тип загрузочного устройства на virtio.

  3. загрузите виртуальную машину. Он войдет в безопасный режим.

    Примечание. В безопасном режиме все загрузочные драйверы будут включены и загружены, включая драйвер virtio. Поскольку теперь для его использования установлен мини-порт, ядро ​​теперь сделает его частью драйверов, которые должны быть загружены при загрузке, и не отключит его снова.

  4. в загруженной виртуальной машине сбросьте настройки bcdedit, чтобы позволить машине загружаться в обычном режиме, набрав (снова в командной строке с повышенными правами):

    bcdedit / deletevalue {текущий} safeboot

  5. Выполнено.

llegolas
источник
1
Фантастика! Это был недостающий кусочек для меня. Я использовал bcdedit /set safeboot minimal, опуская, {current}потому что я не был уверен, что должно идти туда.
Чарльз Грин
2
@CharlesGreen {current}буквально, вы вводите как есть.
23 марта
Проблема, если у вас есть PIN-код, потому что для входа в систему может потребоваться доступ к сети. Я переустанавливаю Windows в результате. answers.microsoft.com/en-us/windows/forum/windows_10-security/…
Эндрю Олни
Я попытался с помощью bcdedit / set {current} safeboot network на первом шаге избежать проблемы со входом в систему, сначала я создал локального пользователя, чтобы он был более безопасным, и я не думаю, что проблема в любом случае относится ко мне, но так как машина подключен к домену, и я не контролирую все, что я хотел, чтобы убедиться, что я не сделал ничего плохого. И сетевой параметр по крайней мере не испортил процесс.
HackerBaloo
как вы делаете 1), то есть повышенное приглашение?
Фредерик Норд
16

Предоставляется довольно простой ответ - и он может работать во многих случаях наряду с подсказками для других вариантов. Если (как и я) вы не можете переключиться на IDE и вынуждены использовать VirtIO, тогда может работать следующий альтернативный подход:

  1. Добавьте в VM как Windows 10 DVD / CD ISO, так и драйвер virtio ISO.
  2. Загрузите Windows 10 DVD / CD и войдите в командную строку из режима восстановления.
  3. Загрузите драйвер через CLI, например drvload e:\viostor\w10\amd64\viostor.inf
    • В моем случае e: был назначен ISO установки virtio.
    • После загрузки драйвера f: был установлен Windows.
  4. Используйте команду DISM для внедрения драйвера контроллера хранилища.
    • Например dism /image:f:\ /add-driver /driver:e:\viostor\w10\amd64\viostor.inf
    • Как указано выше, измените назначения букв дисков в соответствии со своей средой.

Избегает необходимости возиться с созданием специальных загрузочных компакт-дисков / образов Windows и «исправлений» фактического установочного образа Windows на лету.

Обратите внимание, что для этого нишевого случая я бы рекомендовал избегать ремонта при запуске (который не удался для меня). Похоже, он не знал, как включить vistor.inf после загрузки, и, если вы попробуете это, будьте осторожны, чтобы избежать стремления DVD 10 Windows восстановить или переустановить все ...

Кредит на подход DISM: Использование dism для добавления драйверов

JPvRiel
источник
1
Альтернатива 4: щелкните правой кнопкой мыши на файле inf -> Install.
Rbs
Кроме того, следите за обновлениями Windows, ломая это. Согласно сообщению reddit, «обновление стерло мои драйверы VirtIO»: reddit.com/r/VFIO/comments/6b06y5/… . Это может произойти в угловом случае, когда вы запускаете установку Windows как с двойной загрузкой, так и с виртуальной
машиной,
1
Это плюс ответ ниже. Мне пришлось выполнить загрузку в безопасном режиме (bcdedit / set {current} safeboot минимально), а затем удалить загрузку в безопасном режиме (bcdedit / deletevalue {current} safeboot), а затем перезапустить. После этого он работал с Windows Server 2016 Essentials.
G Trawo
10

Шаги, чтобы следовать в общем:

  1. Установите драйверы VirtIO на ВМ
  2. Настройте системный диск виртуальной машины на использование VirtIO
  3. Если виртуальная машина не загружается, выполните восстановление при загрузке или даже восстановление установки

Процедура подробно это:

  1. Верните загрузочный диск в IDE.
  2. Убедитесь, что Windows VM выключена.
  3. Загрузите ISO-драйверы VirtIO здесь .
  4. Смонтируйте его на дисковод для виртуальной машины.
  5. Добавьте запоминающее устройство типа VirtIO. Распределение размера не имеет значения, так как вы используете его для установки драйверов.
  6. Запустите виртуальную машину Windows. Он попытается установить драйверы. Если этого не произойдет, откройте Диспетчер устройств, и вы увидите устройство SCSI в списке со значком восклицательного знака рядом с ним. Вы можете обновить драйвер и указать соответствующий каталог подключенного ISO. После установки не перезагружайте, а выключайте машину.
  7. В настройках virt-manager для Windows измените тип хранилища с IDE на VirtIO.
  8. Вы можете удалить устройство хранения, которое вы создали ранее. Это больше не нужно.
  9. Запустите Windows, она должна загрузиться и установить драйверы SCSI. Вам нужно будет перезагрузиться после этого.
  10. Если виртуальная машина не загружается, но драйверы установлены, вы можете попробовать выполнить:

    1. Восстановление при загрузке, которое может исправить некоторые системные проблемы, которые могут помешать запуску Windows.
    2. Последнее решение: восстановить установку при загрузке с Windows 10 ISO. Это сохранит все приложения и пользовательские настройки, просто обновив Windows и загрузившись. Используйте последнюю версию Windows 10 ISO.

Если, к сожалению, требуется последний шаг, еще одна трудность, с которой можно столкнуться, заключается в том, что загрузочный компакт-диск Windows не может понять диск VirtIO, поскольку эти драйверы не были включены в него Microsoft. В этом случае необходимо создать пользовательский загрузочный CD / USB, содержащий эти драйверы, но убедитесь, что вы запускаете Windows ISO того же уровня, что и установка, получив последнюю версию (в настоящее время 1511).

Вот несколько уроков о том, как ускорить использование драйверов в Windows:

harrymc
источник
Этот ответ будет работать (и работает для других версий в Windows), за исключением того, что на шаге 9 при попытке загрузки возникает ошибка INACCESSIBLE_BOOT_DEVICE (именно там я и находился, когда отправлял вопрос). Восстановление при запуске (10.1) не работает, и шаг 10.2 фактически невозможен. Ремонтную установку можно выполнить, только сначала загрузив систему без CD, а затем запустив ее setup.exeна CD. Это то, что описывает ссылка в вопросе, и, насколько мне известно, другого способа сделать это не существует.
Грэм,
Какую еще информацию я должен предоставить? Я неоднократно говорил вам, что выбора нет. Проблема здесь в том, что вы постоянно настаиваете, что это так. Если это так, что в различных статьях, найденных в Интернете, есть «десятки других», сделайте ссылку. Ссылка на одну статью, которая описывает, как загрузиться с компакт-диска и начать ремонтную установку - без предварительной загрузки установленной системы и запуска setup.exeна компакт-диске. Ссылка на одну статью из надежного источника, который доказывает, что вы не лгите откровенно, и я извинюсь и дам вам ваш драгоценный голос.
Грэм
Посмотрите, например, это видео о том, как выполнить Восстановление при загрузке в Windows 10 с установочного носителя. Если нет, попробуйте использовать командную строку . Как я уже говорил выше, вам может понадобиться ISO-образ с пропуском - я понятия не имею, содержит ли установка WIn10 драйверы VirtIO.
harrymc
Или вы можете адаптировать метод drvload для добавления драйверов VirtIO в загруженный установочный образ Windows PE.
Harrymc
2
Хотя приведенный выше ответ звучит хорошо и выглядит просто, к сожалению, с моей виртуальной pc-q35-2.5машиной, использующей эмуляцию / тип компьютера, добавить контроллер IDE невозможно.
JPvRiel
5

Ответ от Harrymc прекрасно работает для меня.

следующие шаги я следовал:

  1. Установите драйвер virtio в windows
  2. Добавьте дополнительный «фиктивный» диск virtio. Перезагрузите компьютер и проверьте, работает ли «пустышка».
  3. Если шаг 2 работает, переключите загрузочный диск на virtio.
  4. перезагружать
  5. Удалите дополнительный «фиктивный» диск virtio
  6. ...
SDHD
источник
Пожалуйста, не добавляйте «спасибо» как ответы. Потратьте некоторое время на сайт, и вы получите достаточные привилегии, чтобы выслушать ответы, которые вам нравятся, что является суперпользователем, чтобы сказать спасибо.
ДэвидПостилл
1
Это недооцененный ответ - в Proxmox Windows 10 имела проблемы с инициализацией даже после установки всех драйверов. Мне пришлось создать небольшой диск объемом 1 ГБ в качестве блочного устройства VirtIO, запустить виртуальную машину, убедиться, что он отображается правильно, а затем завершить работу и изменить основной диск на VirtIO. Windows 10 неправильно определяла драйвер жесткого диска, поэтому мне пришлось уговорить его загрузить его при загрузке, прежде чем переключаться.
Альберт Х
3

К сожалению, возможно, что драйвер будет отлично установлен и все равно получит «недоступное загрузочное устройство». Причина немного шокирует (я нахожу): установка Win 10 «запоминает» драйверы, которые требовались при первой установке, и по умолчанию НЕ БУДЕТ загружать другие драйверы хранилища во время загрузки. Это делается, похоже, для «пиратства» - это затрудняет запуск «одной и той же» установки на другом оборудовании. В этом посте есть отличная документация по этой «функции» с форумов gentoo. Суть в следующем:

Драйверы, предназначенные для запрещенной загрузки при загрузке, могут быть определены следующим образом: В разделе реестра Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services есть один подключ для каждого драйвера, известного для установки. Имя этого подраздела - это просто имя драйвера. В каждом подразделе драйвера будет подраздел «STARTOVERRIDE», если этот драйвер должен быть загружен при загрузке. В частности, в подразделе STARTOVERRIDE есть параметр с именем «0». Если значение этого параметра равно «3», он не будет загружен во время загрузки. Установка этого значения в 0 вместо этого переопределит поведение.

Я сам просто захожу на компьютер \ HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Services и ищу "STARTOVERRIDE". Каждый раз, когда я нахожу это, если есть имя под этим "0" со значением "3", я меняю на "0". Это кажется излишним, вам нужно только изменить диск, который нужно загрузить. В моем случае их несколько, и я не помню, какие именно, поэтому я просто делаю «F3-поиск» в этом разделе «услуги».

И последний совет, который не нужен для текущего, подписанного, virtio хранилища, но может быть для тех, кто читает это, если они хотят использовать более экспериментальный драйвер, который (пока) не подписан: я обнаружил, что ДАЖЕ после выполнения вышеупомянутого Уловка, мне ТАКЖЕ нужно было загрузиться в экран расширенных опций и выбрать F7 («отключить проверку подписи драйверов»). Досадно, что было недостаточно установить флаг bcd для отключения проверки драйвера, потому что драйвер должен загрузиться до того, как машина прочитает BCD и обнаружит, что ей не нужно проверять подпись.

В общем, не самый яркий час Microsoft. Вы действительно должны ненавидеть своих пользователей, если вы предпочитаете давать законным пользователям искусственный Blue-Screen, а не позволять людям (скажем) заменить диск SATA на диск NVMe и заставить его «просто работать».

Скотт Петрак
источник
Спасибо за предоставленную информацию, это самое работоспособное решение! Один regfile для импорта и решить все это.
Флориан Хейгл