В некоторых случаях, чтобы установщик Windows или среда восстановления WinRE, увидела локальные диски компьютера, нужно дополнительно загрузить драйверы контроллера диска. Такое часто бывает на компьютерах с контроллерами NVMe SSD. В моем примере после миграции виртуальной машины с VMware ESXi на Proxmox, оказалось что в гостевой Windows отсутствуют драйвера VirtIO, которые должны обеспечить доступ к виртуальному диску.
В результате при загрузке гостевой Windows в ВМ появилась ошибка 0x0000007B
INACESSIBLE_BOOT_DEVICE
.
В этой статье мы рассмотрим, как загрузить необходимые драйверы контроллера диска в среде WinPE или Windows Recovery Environment. После того, как вы увидите локальный диск, можно добавить драйвера контроллера в офлайн образ Windows на диске.
Скачайте необходимые драйвера, обеспечивающие поддержку нужного контроллера диска. В случае с Proxmox, нужно скачать ISO образ с драйверами VirtIO для Windows. Если вы работаете с физическим компьютером, смонтируйте ISO образ на другом компьютере и скопируйте папки с драйверами на внешний USB диск (флешку). В случае с ВМ можно просто смонтировать ISO образ с драйверами в виртуальный CD/DVD привод.
Загрузите компьютер в среде восстановления, с диска восстановления или с установочного диска с Windows.
Откройте командную строку. Запустите команду diskpart и убедитесь, что среда WinPE не видит локальные диски:
diskpart
DISKPART>
list disk
There are no fixed disks to show. Жесткие диски отсутствуют.
Смонтируйте носитель с драйверами, который вы подготовили ранее (USB флешку или ISO образ).
{ "injection": [ { "parent": "/ISO/win2k22.iso", "archive": "/drivers/virtio-win-drivers.zip" } ] }
Для определения буквы диска, которая назначена подключенному носителю, выполните команду:
wmic logicaldisk get caption, volumename
В моем примере это образ с драйверами VirtIO для Windows, которому назначена буква D:. Для загрузки драйвера в среде WinPE используется команда drvload. Я хочу загрузить SCSI драйвер VirtIO для Windows Server 2022. Нужно указать полный путь к INF файлу драйвера:
drvload d:\vioscsi\2k22\amd65\vioscsi.inf
DrvLoad: Successfully loaded d:\vioscsi\2k22\amd65\vioscsi.inf
DrvLoad: Unable to load D:\...\xxxxx.inf (Error 0x80070002)
В этом случае убедитесь, что вы пытаетесь загрузить совместимый драйвер. Также проверьте что в каталоге драйвера присутствуют другие файлы драйвера кроме INF (обязательно должны быть CAT и SYS файлы).
Проверьте, что драйвер SCSIAdapter VirtIO загружен в память среды WinPE:
pnputil /enum-drivers
С помощью
diskpart
убедитесь, что локальные диски теперь видны и доступны.
Теперь можно интегрировать драйвера контроллера диска в офлайн образ Windows (в этом примере он хранится на диске C:). Можно добавить только один драйвер:
DISM /Image:C:\ /Add-Driver /driver:D:\vioscsi\2k22\amd64\vioscsi.inf
Или можно рекурсивно установить все драйвера из указанной папки (диска):
DISM /Image:C:\ /Add-Driver /driver:D:\ /recurse
Чтобы перезагрузить компьютер из среду WinPE, выполните:
wpeutil reboot
Теперь гостевая Windows должна загрузится нормально, и в списке оборудования вы увидите Red Hat VirtIO SCSI контроллер.