Совместимость виртуальных дисков между Hyper-V, Virtual Server и Virtual PC

Одним из первых вопросов, которые задают те, кто готов начать использовать Hyper-V, — совместимость виртуальных дисков в формате VHD между различными платформами виртуализации Microsoft. (И не только Microsoft, так как индустрия в целом приняла формат VHD). Причем обычно вопрос формулируется именно так: «Совместимы ли диски VHD между Virtual PC и Hyper-V?». Хотя как правило имеют ввиду другое: «Совместимы ли виртуальные машины Virtual PC и Hyper-V?». Два разных вопроса — два разных ответа.

Все три платформы виртуализации Microsoft четко следуют спецификации VHD. То есть на первый вопрос существует однозначный ответ: «Да, диски в формате VHD совместимы между любыми платформами». Но совсем другое — совместимость самих виртуальных машин. (И даже не важно, что за ОС там установлена). Давайте разберемся, почему.

В первую очередь напомню — Hyper-V позволяет устанавливать 64-битные версии ОС, которые не поддерживаются Virtual Server и Virtual PC. Создав в Hyper-V виртуальную машину с Windows XP/2003/Vista/WS2008 на платформе x64 — вы никак не сможете заставить ее работать в Virtual Server или Virtual PC. Хотя подключить ее виртуальные диски к любой существующей ВМ сможете — и получите из этой ВМ доступ к файлам на дисках. То есть если вопрос касается 64-битный виртуальных машин — ответ очевиден: «Нет, не совместимы».

Что же качается 32-битных виртуальным машин, то краткий ответ также неутешителен: «Нет, не совместимы, но…». Многозначительное «но» в конце означает, что перенести 32-битную ВМ таки можно. С любой платформы на любую. Основные проблемы совместимости 32-битных ОС между Hyper-V и Virtual Server/Virtual PC возникают из-за различия между используемыми в ВМ уровнями абстрагирования от оборудования (Hardware Abstraction Layer, HAL). Виртуальная машина, установленная в Hyper-V, будет использовать APIC HAL.

Перенеся ее на платформу Virtual Server/Virtual PC вы увидите, что она просто не загрузится. Виртуальные машины на этих платформах используют ACPI HAL. Поэтому для переноса машины с Hyper-V на Virtual Server/Virtual PC вам потребуется вручную сменить HAL. Исключение — ВМ с Windows Vista/WS2008. При помощи msconfig эти ОС можно заставить заново определять HAL при загрузке.

Что же касается предыдущих версий Winodows — это не поддерживается Microsoft, но делается элементарно. Пока ваша ВМ еще загружена в Hyper-V, через Device Manager выберите модель компьютера «Standard PC».

 

Или, если вы уже перенесли машину в Virtual Server/Virtual PC, воспользуйтесь Recovery Console. Вам потребуется заменить файл %SystemRoot%\System32\HAL.DLL на HALACPI.DLL (то есть переименовать последний в HAL.DLL). Этот файл вы найдете на диске с дистрибутивом вашей ОС в сжатом виде по адресу \i386\HALACPI.DL_. Распакуйте его с помощью команды expand. 

Если вы перенесли ОС с Virtual Server/Virtual PC на Hyper-V и не установили компоненты интеграции — то HAL в виртуальной машине не изменился, и вы можетеперенести ее назад. При установке компонентов интеграции HAL заменится на APIC. Если в дальейшем потребуется вернуть машину обратно в Virtual Server/Virtual PC — от вас потребуются действия, описанные выше.