Я зіткнувся з цією проблемою недавно, і після кількох днів налагодження я виявив проблему та виправив її.
Будь-ласка, будь ласка:
Після встановлення Hyper-V Server 2016 використовуйте офлайн-інструмент (наприклад, Windows PE) для монтажу вулика SYSTEM нової установки та змініть DWORD ControlSet001 \ Control \ BootDriverFlags з 0x04 на 0x1c. (Ви, ймовірно, повинні змінити версію ControlSet002 також для гарної міри. Ви можете вносити зміни у ваш install.wim, щоб уникнути цього після кожного встановлення.)
(Оскільки, звичайно, потрібен тиждень і налагоджувач ядра, щоб зрозуміти, що для цього потрібна лише двобітна зміна незрозумілого та ретельно недокументованого бітфілда.)
Ось чому.
Завантажувач Windows використовує вбудовані підпрограми UEFI для пошуку встановлення Windows та завантажує драйвери ядра та завантажувача в оперативну пам’ять до виклику ExitBootServices. Після того, як він зробив це і передав управління ядру, ядро не може отримати доступ до обсягу завантаження, якщо в оперативній пам'яті вже немає відповідних драйверів.
Ось і такий запуск: winload.efi недостатньо складний, щоб перерахувати обладнання та визначити, які драйвери насправді потрібні. У старих версіях він завантажуватиме лише речі, встановлені на Boot Start. Однак за завантаження сторонніх драйверів накладається штраф за продуктивність, і оскільки Windows почала підтримувати більше класів завантажувальних пристроїв, потрібна була краща система.
Введіть значення BootFlags для окремих драйверів та загальносистемне значення BootDriverFlags. Якщо (BootFlags & BootDriverFlags)! = 0, драйвер буде завантажений, навіть якщо він не встановлений на Boot Start. Кожен біт у значенні повинен відповідати іншому типу апаратних засобів, тому значення BootDriverFlags встановлює, з яких типів обладнання можна завантажувати.
Коли цей механізм був введений, Bit 3 був призначений для завантажувальних пристроїв USB, але завантаження з USB-пристроїв не підтримувалося в стандартних Windows. Версія Hyper-V Server 2008 R2 додала специфічну підтримку для завантаження з USB, встановивши це значення 0x04, і це значення було встановлено у кожній версії Hyper-V Server, що випускається з тих пір.
Загальні вдосконалення, внесені з тих пір для підтримки функції Windows To Go, означають, що вам не доведеться використовувати фокус завантаження до VHD, рекомендований для попередніх версій сервера Hyper-V, встановлених на пристроях USB. Однак вони також змінюють значення значення BootDriverFlags. Пристрої USB 3 отримали окремий біт, а SD-картки спеціально отримали ще один біт.
У версії 2016 року це означає, що значення 0x04 тепер дозволяє завантажувати лише з USB2-дисків, які не є SD-картами. Усі версії Server 2016, за винятком Hyper-V Server, поставляються за замовчуванням 0x1c, що дозволяє завантажувати USB2, USB3 та SD-карту; однак значення 0x04 все ще встановлено на сервері Hyper-V, оскільки воно було додано як переосмислення в процесі збирання зображень для версії 2008R2. Замість додавання функції, однак тепер це значення видаляє.
Це пояснює, чому деякі попередні рішення цієї проблеми рекомендували відключати USB3 та завантажувати з USB-накопичувача замість SD-карти: це змусить категорію завантажувального пристрою бути чимось, що все ще охоплене тепер більш обмеженим визначенням "USB" "біт у BootDriverFlags.