Создание VHD-диска и загрузка с VHD
Бывают такие ситуации, когда необходимо на одном компьютере запускать различные операционные системы, а использование виртуальных машин невозможно или не требуется.
В этой статье я расскажу, как создать виртуальный жесткий диск (VHD), установить на него операционную систему и научить компьютер загружаться с этого VHD.
Быстродействие такой системы будет выше, чем при использовании виртуальных машин. Т.к. при использовании виртуализации на копьютере запускается одновременно две системы. А в случае с VHD — только одна и все ресурсы компьютера отданы именно ей.
В качестве основной системы можно использовать Windows 7 и выше. На виртуальный диск указанным способом можно устанавливать операционную систему от Windows Vista и выше.
Внимание!
Загрузку с VHD дисков в Windows 7 поддерживают только редакции Максимальная (Ultimate) и Корпоративная (Enterprise).
В Windows 10 загрузку с VHD поддерживает редакция Профессиональная (Professional) и выше.
Создание вирутального жесткого диска (VHD)
Создать VHD в Windows 7 можно двумя способами — с помощью утилиты Diskpart (используя CMD), а можно через визуальный интерфейс Менеджера дисков. Второй способ проще и нагляднее, поэтому используем его.
Открываем Менеджер дисков. Это можно сделать по следующему пути: Пуск -> Панель управления -> Администрирование -> Управление компьютером -> Управление дисками.
Далее щелкаем правой кнопкой мыши по разделу «Управление дисками» и в выпавшем меню выбираем «Создать виртуальный жесткий диск«.
Указываем расположение файла VHD.
Размер файла должен быть досточно большим, чтобы его хватило на разворачивание операционной системы, установки обновлений, необходимых программ и хранения различных файлов. В то же время, размер файла не должен быть больше, чем свободное место на диске, где он располагается.
Формат виртуального жесткого диска я предпочитаю выбирать «Динамическое расширение«, т.к. такой режим позволяет экономить место.
Нажимаем кнопку OK, создается файл VHD.
После этого в консоли «Управление дисками» появляется созданный виртуальный диск. Но он не инициализирован.
Инициализируется он через контекстное меню:
Далее необходимо создать том и отформатировать диск. Тоже через контекстное меню:
В итоге мы создали виртуальный жесткий диск, он находится на диске D: (D:\MyDisk.vhd) и виден в операционной системе. Можно разворачивать на нем другую «операционку».
Развертывание операционной системы Windows на VHD
Для этого потребуется утилита imagex.exe из состава Windows AIK или Windows ADK. Я уже предусмотрительно взял эту утилиту из WADK и приложил к статье. Скачать imagex для x64 и x86 Вы можете внизу страницы.
Также понадобится файл install.wim из дистрибутива Windows. В дистрибутиве он находится в папке Sources. Предположим, что у нас в привод вставлен установочный DVD и путь к install.wim выглядит так — E:\Sources\install.wim.
Разворачивание ОС из файла install.wim на диск выполняется следующим образом.
Так как в одном WIM-файле может находится несколько образов ОС, то предварительно определим индекс нужного нам образа:
Допустим, что нужная Винда находится под индексом 1.
Разворачиваем из индекса 1 операционку на наш VHD:
где Z: — буква, присвоенная нашему VHD.
После окончания разворачивания операционки, можно зайти на VHD-диск и убедится, что структура его каталогов соответсвует системному диску Windows.
Если всё прошло успешно, то переходим к добавлению в загрузчик ОС информации о том, что с нашего VHD тоже можно грузиться.
Изменение информации в загрузчике Windows
Создаем копию текущей операционной системы в загрузчике и даем ей описание «Windows 7 VHD»:
При выполнении этой команды также будет отображен GUID новой записи. Запишите или скопируйте его — он нам пригодится.
Если вы забыли записать GUID, то узнать его вы можете запустив команду bcdedit без параметров.
Далее установите параметры device и osdevice для загрузочной записи VHD. В командной строке введите:
bcdedit /set
где GUID — идентификатор нашей новой записи в загрузчике.
Не забудьте изменить букву диска и путь к файлу VHD на свои.
Для некоторых систем на основе x86 требуется изменить параметр конфигурации загрузки для ядра, чтобы найти сведения об определенном оборудовании и успешно выполнить встроенную загрузку с VHD:
где GUID — идентификатор нашей новой записи в загрузчике.
Завершение
Теперь можно перегружать компьютер.
При старте компьютера на черном фоне будет в течение 5 секунд выдан запрос о выборе операционной системы. Выбирайте свою вновь созданную систему.
Начнется загрузка и установка ОС. После чего не забудьте установить драйверы на новой ОС и можете пользоваться новой системой, которая располагается на виртуальном диске VHD.
Отключение загрузки с VHD и возврат к первоначальному состоянию
Чтобы вернуть компьютер к первоначальному состоянию, необходимо выполнить следующие шаги (в любой последовательности):
Удалить запись из загрузчика.
Для этого выполняем команду bcdedit без параметров. Она выведет нам все записи. Находим в списке нашу добавленную запись и ее GUID.
Для ее удаления выполняем команду:
Удалить виртуальный диск из консоли «Управление дисками«.
Создание VHD и установка в него Windows с помощью WinNTSetup и Simple VHD Manager
Albert_researcher
Модератор
Создание VHD и установка в него Windows с помощью WinNTSetup и Simple VHD Manager.
Создаем VHD используя программу WinNTSetup
Скачать утилиту можно здесь https://yadi.sk/d/xLGkpAOzhXCPc
Запускаем программу. Нажимам клавишу VHD>>>, выбираем создание VHD, создается диск и автоматически монтируется (например под буквой Y). Заполняем форму.
Изменение размера VHD. Заходим под другой системой.
Увеличение размера VHD, VHDX через CMD
Периодически надо увеличивать размер виртуальных дисков.
Делается это все в командной строке под администратором:
Запускаем CMD, под админом
Запускаем diskpart
SELECT VDISK file=”пусть к vhd” (VHD должно быть в состоянии detach)
EXPAND VDISK MAXIMUM=”новый размер в мегабайтах“
Exit
Microsoft Windows [Version 10.0.18363.657]
(c) Корпорация Майкрософт (Microsoft Corporation), 2019. Все права защищены.
C:\Windows\system32>diskpart
Microsoft DiskPart, версия 10.0.18362.1
(C) Корпорация Майкрософт (Microsoft Corporation).
На компьютере: DESKTOP-7RHSIJ4
DISKPART> SELECT VDISK file=»D:\Win_vhd_x32.vhd»
Файл виртуального диска успешно выбран с помощью программы DiskPart.
DISKPART> EXPAND VDISK MAXIMUM=»30000″
Завершено (в процентах): 100
Файл виртуального диска расширен с помощью программы DiskPart.
DISKPART> exit
Завершение работы DiskPart.
C:\Windows\system32>
Далее диск аттачим назад и делаем “Extend Volume…” в консоле управления дисками на разделе увеличенного диска.
Сжимание динамический диск vhd с помощью Diskpart
Запускать от имени администратора.
Предварительно рекомендую заполнить всё cвободное пространство на виртуальном диске нулями, это повысит эффективность сжатия в зависимости от того насколько много вы удаляли файлов в виртуальной машине. Сделать это можно с помощью различных программ, например wipefreespace, sdelete (https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete).
Если у вас виртуальный диск очень большого размера перед заполнение нулями лучше уменьшить размер раздела — это никак не повлияет на сжатие и раздел можно будет обратно увеличить после сжатия, но при заполнение нулями это существенно уменьшить нагрузку на жесткий диск и ускорит сжатие.
Программа sDelete используется в Windows гостевой системе для заполнение нулями свободного пространства, например запускаем командную строку и вводим:
Где параметр z — это заполнение нулями, а C — это диск на котором необходимо произвести заполнение нулями.
Далее, для сжатия откройте командную строку с правами администратора и наберите в ней:
diskpart
Выберите диск, который вы хотите сжать, указав диски и путь к vhd файлу:
select vdisk file=»c:\Data\DAT22GB.vhd»
Подключите диск в режиме чтения Read-only:
attach vdisk readonly
И выполните команду сжатия:
compact vdisk
В зависимости от размера виртуального диска, процедура сжатия может занять достаточно продолжительно время.
Если сжатие прошло успешно, появится надпись:
DiskPart successfully compacted the virtual disk file
Отмонтируйте диск VHD:
detach vdisk
У каждого свои способы. Предлагаю поделиться опытом и мнением.
Установка Windows 7 на USB storage и/или виртуальный диск VHD
В данной статье хочу рассмотреть вопросы по установке на внешний USB-накопитель не обычного набора инструментов реанимации, а полноценной рабочей ОС, которую можно носить с собой. И если Linux ставится из коробки на любое устройство и без проблем работает, то Windows и не ставится, и не работает.
Также раздел этой статьи может быть полезен при загрузке Windows на новом оборудовании (при обновлении материнской платы и т.д.).
Изначально было 2 противоречивых требования души:«всё своё ношу с собой» и «не хочу быть нагруженным», что в итоге вылилось в установку Ubuntu на внешний диск. Всё было замечательно, но чувствовалась какая-то незавершённость. И решил я установить Windows 7 туда же.
Но появились проблемы:
- Windows 7 предупреждает о невозможности загрузки с USB (заботливый какой) и не хочет устанавливаться на него;
- установщик не умеет работать с VHD;
- при загрузке Windows 7 с USB-storage появляется BSOD.
И они были успешно решены.
Нам потребуются
Поехали
В настройках виртуальной машины подключаем к CD-ROM Windows 7 и добавляем HDD: «Use physical disk» -> выбрать диск, соответствующий USB (скорее всего, он последний). Стоит отметить, что другие диски на данном этапе лучше удалить из виртуальной машины. Загружаемся с CD и попадаем в установщик.
Установка
Сейчас самое время указать установщику VHD. Командой Shift+F10 открывается консоль. Допустим, мы хотим установить Windows на C:\win7.vhd:
diskpart
create vdisk file=C:\win7.vhd type=fixed maximum=25000
select vdisk file=C:\win7.vhd
attach vdisk
create partition primary
list volume
Убеждаемся, что имеем 3 volume с Fs: UDF, NTFS, RAW. Ну или больше, если на диске есть другие разделы.
Теперь можно уходить с консоли и перейти к непосредственной установке. При выборе назначения установки, мы должны увидеть Disk 1 Partition 1, при выборе которого Windows 7 заботливо предупредит о возможных проблемах, но продолжить всё-таки разрешит.
Теперь можете откинуться на спинку кресла и отдохнуть. По завершению данного этапа установщик должен записать загрузчик на физический раздел, который запустит Windows с виртуального диска. В итоге мы получим рабочую Windows 7 внутри виртуальной машины. Самое время подготовиться к запуску с USB.
Настройка для запуска с USB
С особенностями загрузки Windows 7 я особо не знаком, но вкратце суть примерно такая: загрузчик читает ядро и самые важные драйвера (к которым USB не относится) и передаёт управление ядру, которое должно прочитать всё остальное, но в нашем случае оно ничего не найдёт. Соответственно, сам напрашивается вариант: надо сказать загрузчику, что USB критически важен и надо бы сначала его загрузить, а потом передавать управление. И, что характерно, в Microsoft дали такие возможности: надо в реестре по адресам [HKLM/System/CurrentControlSet/services/usb*] установить значение ключа Start в 0. Самым неприятным оказывается то, что периодически это поле само сбрасывается в 3, судя по всему при появлении новых устройств. Но и это не проблема. Существует 2 возможных решения (суть которых, естественно, совпадает):
- usbbotfix.bat — мне понравился больше, ибо командный файл, который легко правится. Взят отсюда и мною добавлены улучшения: отключение создания имён 8.3, отключение обновления времени последнего обращения (ну зачем нам лишние операции записи) и запрет удаления страниц с исполняемым кодом, дабы случайно не сбросился в своп код драйвера USB (вполне возможно, что это не обязательно, но лучше перестраховаться). Этот файл также скажет планировщику вызывать его при Event 20003 — т.е. при добавлении новых устройств.
Содержимое файла такое:
@echo off
if «%1″==»fix» goto :fix
rem — install task
copy /y «%
f0″ «%SystemRoot%\system32\usbbootfix.bat»
SCHTASKS /Create /RU SYSTEM /SC ONEVENT /MO «*[System[Provider[@Name=’Microsoft-Windows-UserPnp’] and EventID=20003]]» /EC System /TN USBBootFix /TR «‘%SystemRoot%\system32\usbbootfix.bat’ fix» /F
rem — apply other settings
fsutil behavior set disablelastaccess 1
fsutil behavior set disable8dot3 1
reg add «HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management» /v DisablePagingExecutive /t REG_DWORD /d 1 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\pciide /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\msahci /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\intelide /v Start /t REG_DWORD /d 0x0 /f
reg add HKLM\SYSTEM\CurrentControlSet\services\viaide /v Start /t REG_DWORD /d 0x0 /f
rem — run :fix once after install
:fix
call :fixservice usbehci «Boot Bus Extender»
call :fixservice usbohci «Boot Bus Extender»
call :fixservice usbuhci «Boot Bus Extender»
call :fixservice usbhub «System Bus Extender»
call :fixservice usbstor «SCSI miniport»
goto :eof
:fixservice
setlocal
set Start=
set Group=
for /f «skip=2 tokens=1,2,*» %%I in (‘reg query HKLM\SYSTEM\CurrentControlSet\services\%
1′) do (
if «%%I»==»Start» set Start=%%K
if «%%I»==»Group» set Group=%%K
)
if not «%Start%»==»0x0» reg add HKLM\SYSTEM\CurrentControlSet\services\%
1 /v Start /t REG_DWORD /d 0x0 /f
if not «%Group%»==»%
2″ reg add HKLM\SYSTEM\CurrentControlSet\services\%
1 /v Group /t REG_SZ /d «%
2″ /f
endlocal
goto :eof
Если загрузка системы не происходит
В случае, если мы уже пришли на новое место и там оказалось, что ОС запускаться не хочет, придётся чинить тем, что есть: раздел загрузки Repair, в который Windows скорее всего сам и предложит загрузиться после неудачной попытки (если не предложит — перед загрузкой нажимать F8). Затем открываем «Command Prompt» (в случае неудавшегося автоматического восстановления перед этим нажимаем «View advanced options»).
- Запускаем редактор реестра командой «regedit». Стоит отметить, что это — реестр системы восстановления.
- Подключаем нужный реестр (точнее, улей). Нас интересует «[HKLM/SYSTEM/]», он хранится в файле %WINDIR%\System32\Config\System. Для этого наводим фокус на «HKEY_LOCAL_MACHINE», в меню выбираем File -> Load Hive -> нужный файл -> Key name: «nn» (в случае установки на VHD, необходимо его в подключить в консоли).
- В загруженном улье должно быть несколько ControlSet*, нужный записан в «Select/Current». Переходим в «ControlSet*/services». В разделе чуть выше описано, что и зачем делать. Но стоит отметить, что в случае запуска не с USB, могут заинтересовать ключи вроде «atapi», «pciide», «intelide», «msahci» и аналогичные им.
Загрузка с USB
Т.к. перезапускаться лишний раз всем лень, проверимся мы снова в виртуальной машине. Выключаем её, в настройках удаляем все HDD, запускаемся, перебрасываем USB-HDD в виртуалку и… Понимаем, что наш диск не видно. Но ведь в списке того, что требуется не была упомянута поддержка BIOS’ом загрузки с USB.
Качаем plop boot manager — в архиве есть образы iso и img. Указываем виртуальной машине грузиться с диска plpbt.iso (или plpbt.img для floppy) и уже он передаст управление загрузчику с USB. Всё должно пройти успешно и в итоге запустится Windows 7 и скажет, что найдено новое устройство.
Теперь мы можем перенести внешний диск на любую другую реальную машину и запуститься. Вот и всё. Интересны Ваши предложения по практическому применению.