Как из файла vhd загрузить систему grub4dos

Обновлено: 05.07.2024

Особенности

VBoot позволяет загружать физический компьютер из одного файла виртуального диска в VHD/VMDK/VDI/RAW формате.
Каждый файл содержит одну операционную систему. Он поддерживает Windows 2000, Windows XP, Vista, Windows 7, 2003 Server, 2008 Server и Linux 2.6, 32- и 64-бит .
Можно просто скопировать файл на физический компьютер, и можно загружаться с ОС, содержащейся внутри этого файла.
VBoot позволяет установить Windows из файла ISO, вместо того, чтобы использовать физический CD-ROM диск.
VBoot поддерживает разностные диски. Вы можете легко восстановить в исходное состояние или сделать сеанс неизмененным, где все системные изменения будут потеряны после перезагрузки системы.
Домашняя страница vmlite vboot
Создается впечатление, что там работает(-ал) всего 1 человек. Штуковина платная - из-за жадности на Vmlite задохла

Версии для Windows, средство установки Windows XP VHD - ссылки и история

welic :
Вот вам все, что у меня есть наборы Vboot. Комментарий от stea внутри архива. В китайском наборе крякнутый драйвер находится корне папки Vboot-1к. Китайский Vboot-2 не пробовал - ничего не могу сказать о нем.

Создание систем LINUX-VHD

Дальнейшего редактирования не будет - тема исчерпана, vboot не развивается и не актуальный

Последний раз редактировалось: BalAngel (2016-12-06 09:34), всего редактировалось 12 раз(а)

24859Лично я склоняюсь в варианту №2 ( VDI-формат контейнера),

Кстати так и не раскрыта эта тема до конца ru-board ,у меня отлично работали эти системы и от stea и от welic.

Кстати так и не раскрыта эта тема до конца ru-board

Наверное, многие знают, что на ру-борде пользователи со статусом "advanced member" и выше могут заказать приобретение нужного софта, если у него нет он-лайн активации и/или привязки к компу.
Может там у liikuri и заказать vboot?

UserX , а зачем? Я выложил ломанный vboot 2 от Kievigreen и Xodok дал vboot 1.1 ломанный. Их вполне достаточно.

24870 а зачем? Я выложил ломанный vboot 2 от Kievigreen и Xodok

Я извиняюсь, но иногда ломаный софт работает некорректно. Если этот проверен и в глюках не замечен, тогда другое дело.

Дык,конечно интересно,тока поподробнее,желательно с системами по этой теме,пусть даже не доработанными.

24904Дык,конечно интересно,тока поподробнее,желательно с системами по этой теме,пусть даже не доработанными

Загрузка Linux с VHD может пригодиться в различных сценариях, например, когда на компьютере установлена Windows и есть необходимость в Linux, но WSL или виртуальной машины с Linux недостаточно, а разбивать диск на разделы нет желания. Microsoft позволяет грузить Windows с VHD «из коробки» начиная со старших редакций Windows 7. Но что делать, если возникла необходимость загрузить таким способом Linux?

На форумах часто можно встретить мнение, что загрузить Linux с VHD либо нельзя, либо очень сложно. Полезной информации в интернете на эту тему действительно мало. Базовая идея, как это осуществить, описана тут. Суть в следующем:

Необходимо убедиться в поддержке NTFS на всех этапах.

Необходимо убедиться в поддержке loop-устройств.

Добавить в загрузочные скрипты ОС команду монтирования loop-устройства.

Убедиться, что все необходимые утилиты добавлены в образ, обновить initramfs внутри VHD.

В случае legacy-зарузки (BIOS) и использования штатного загрузчика Windows добавить grub4dos в меню bootmgr, а в меню grub4dos добавить пункт для загрузки с VHD.

Практическое применение этой идеи для Arch Linux описано тут. В этой статье я проведу аналогичный эксперимент с Debian. Предполагается, что читатель имеет представление о работе с консолью в Windows и в Linux, умеет работать со стандартными системными утилитами, с ПО для виртуализации и т.п. — элементарные вещи подробно не расписаны.

Процесс загрузки будет выглядеть так: bootmgr -> grub4dos -> initramfs -> debian. Рассмотрим подготовку каждого этапа справа налево.

Установка Linux на VHD

Для начала необходимо создать пустой образ VHD с фиксированным размером. Если нужно минимизировать размер образа, то для экспериментов с CLI достаточно создать диск объемом

1,5 Гб. Для рабочей системы с GUI можно ограничиться объемом 10 Гб (с условием хранения пользовательских данных вне VHD).

Создадим VHD с помощью diskpart.exe:

Далее необходимо установить Debian на VHD. Я для этого воспользовался VirtualBox 6.1, устанавливал debian-10.8.0-amd64-netinst.iso. Параметры виртуальной машины — по умолчанию, новый диск создавать не надо, достаточно подключить ранее созданный debian.vhd.


Установка Debian стандартна, обращу внимание только на некоторые моменты.

При разметке диска я создал один загрузочный раздел ext4. Раздел подкачки на VHD я делать не стал, после установки можно разместить файл или раздел подкачки в удобном месте.


При выборе дополнительного ПО для установки я оставил только SSH-сервер и стандартные системные утилиты. Всё остальное можно поставить потом, по необходимости. GRUB установлен в MBR. Если при установке была выбрана русская локаль, то после установки можно добавить локаль en_US командой dpkg-reconfigure locales .

Подготовка Linux к загрузке с VHD

В установленную систему необходимо добавить поддержку NTFS и утилиту partprobe, которая позволяет сообщить ядру ОС о необходимости повторного чтения таблицы разделов жёсткого диска.

Затем надо подготовить скрипты для initramfs.

initramfs — это начальная файловая система в оперативной памяти, которая содержит утилиты и скрипты, требуемые для монтирования файловых систем перед вызовом init, располагающегося в корневой файловой системе.

Скрипты для initramfs созданы на основе документации. Наши дополнения для initramfs мы будем размещать в следующих каталогах.

/etc/initramfs-tools/hooks/ — здесь размещаются скрипты, которые запускаются при генерации initramfs-образа. Тут мы разместим скрипт для добавления в initramfs утилиты partprobe с необходимыми библиотеками.

/etc/initramfs-tools/scripts/local-top/ — после выполнения этих скриптов загрузчик считает, что root-устройство смонтировано. Т.е. здесь будет скрипт для монтирования VHD.

Скрипт для добавления partprobe в initramfs возьмем из этой статьи с добавлением еще одной библиотеки. Надо создать файл partcopy и сделать его исполняемым:

Скрипт для монтирования VHD сделан на основе скрипта для Arch Linux с учетом особенностей выбранного дистрибутива Linux. Скрипт необходимо сохранить под именем loop_boot_vhd и сделать исполняемым:

Немного подробнее поясню логику работы скрипта. Обработка prereqs рекомендована в документации. В переменную cmdline попадает строка инициализации из grub4dos, например, root=/dev/loop0p1 loop_file_path=/debian.vhd loop_dev_path=/dev/sda2 . Далее идет разбор этой строки и из нее определяется номер партиции на loop-устройстве, а в переменные loop_dev_path и loop_file_path сохраняются путь к устройству, на котором хранится VHD-файл, и путь к VHD-файлу на устройстве. Если данные для этих переменных не переданы, то скрипт прекращает работу и система пытается загрузиться в обычном режиме. Если переменные определены, то загружается модуль ядра для подержки loop-устройств с указанием в параметрах максимального количества loop-устройств и максимального количества таблиц разделов на loop-устройстве. Затем командой blkid определяется тип файловой системы диска, на котором хранится VHD-файл. Если VHD лежит на NTFS, то монтирование производится с помощью команды ntfs-3g , иначе — командой mount . Монтирование производится в каталог /host (который при необходимости предварительно создается). После этого VHD подключается в систему командой losetup , а затем partprobe сообщает ядру о новом диске.

После размещения скриптов в нужные каталоги ( /etc/initramfs-tools/scripts/local-top/loop_boot_vhd и /etc/initramfs-tools/hooks/partcopy ) необходимо пересобрать initramfs командой:

Для дальнейшей настройки надо запомнить номер версии ядра: /boot/initrd.img-4.19.0-14-amd64 и /boot/vmlinuz-4.19.0-14-amd64.

На этом образ готов к запуску на реальном железе, можно выключать виртуальную машину и приступать к подготовке загрузчика. Готовый образ debian.vhd надо скопировать в корень диска C:, дальнейшие скрипты написаны исходя из предположения, что VHD находится в корне NTFS-раздела.

Настройка grub4dos

Для начала надо скачать актуальную версию grub4dos. Работа с этой утилитой в различных источниках описана достаточно подробно. Настройка сводится к следующему:

необходимо найти раздел, в корне которого лежит VHD-файл, и сделать его корневым для всех команд в текущем пункте меню (команда find --set-root );

затем загрузить образ жесткого диска (команды map . vhd и map --hook );

далее подключенный образ указать как корневое устройство (команда root );

и указать параметры запуска Linux ( kernel и initrd ).

Получается файл menu.lst с таким содержимым:

Тут надо обратить внимание на один момент: в команде kernel инициализируются переменные, которые передаются в initramfs и используются в ранее созданном скрипте loop_boot_vhd .

В моем примере переменные заполнены исходя из моей конфигурации компьютера: один диск с Windows, разбитый на два раздела (загрузочный "System Reserved" и основной NTFS), а внутри VHD — один раздел ext4.

Настройка загрузчика bootmgr

Обратите внимание: в зависимости от версии Windows и особенностей установки ОС возможны незначительные отличия.

Первое, что надо сделать, — подключить скрытый раздел с bootmgr, в примере ниже я подключаю скрытый раздел "System Reserved" в каталог C:\mnt (каталог должен быть предварительно создан). Команды выполняются в diskpart.exe:

После этого надо распаковать в каталог C:\mnt\ файлы из архива с grub4dos: grldr и grldr.mbr . В этот же каталог надо скопировать файл menu.lst , созданный на предыдущем шаге. После этого раздел можно отключить в diskpart.exe:

Чтобы настроить отображение пункта меню при загрузке Windows, надо сделать следующее:

В ответ будет сообщен GUID нового пункта меню. Полученный GUID используется в следующих командах:

Тут подробно не останавливаюсь, все команды очевидны и хорошо описаны в документации. Ну, и чтобы не переключаться лишний раз между графическим и текстовым режимами:

На этом всё: можно перезагрузить компьютер, выбрать в меню загрузки grub4dos, затем Debian, после чего должен загрузиться Linux.

Что делать, если не грузится?

В этом случае, скорее всего, неверно указаны параметры с путями к устройству, на котором находится VHD-файл, или раздел на loop-устройстве. Если загрузка останавливается на уровне grub4dos, то в консоли надо последовательно вводить команды, перечисленные в menu.lst , и смотреть на результаты, в зависимости от которых правильно указать параметры для загрузки Linux. Если загрузка останавливается в initramfs, то надо проверить доступность необходимых устройств на этом этапе. Проверить можно, последовательно вводя команды из скрипта loop_boot_vhd (основное: смонтировать нужные разделы, найти VHD, подключить его, проверить присвоенный номер партиции с Linux, в моем примере — loop0p1).

А как же UEFI?

Это немного другая история, надеюсь, позже найду время и проведу аналогичный эксперимент с UEFI.

maisvendoo avatar

Операционные системы семейства Windows, в частности их инсталляторы, широко известны своим "дружественным" отношением к другим ОС, установленным на вашем компьютере. Совместное проживание Windows и *nix систем осложняется тем, что первая считает MBR своей собственностью, и её инсталлятор не задумываясь пишет в неё свой загрузочный сектор. Кроме того, творение редмодовцев требует для себя первичный раздел на hdd, а Win7/8 ещё и около 100 Мб в начале диска, для создания раздела с загрузчиком. Все ухищрения по установке всё равно сводятся к необходимости после инсталяции восстанавливать загрузочную запись того же grub, для возможности загрузки других ОС.

Не знаю кому как, а мне всё это дело не нравилось с самого начала. Поэтому решение вопроса использования Linux и Windows на одном компьютере по началу почти всегда сопровождалось потерей данных на диске, а позже, после преобретения некоторого опыта, стало просто неприятным занятием, которого хотелось избежать. Именно по этой причине около года назад я отказался от дуалбута в пользу Linux как основной системы, и виртуальной Windows для использования вордов/экселей и прочего софта, без которого в реалиях современного документооборота и организации научной работы, как не крути, не обойтись.

Однако в моей деятельности существует ряд задач, которые нерешаемы без использования Windows в реальном аппаратном окружении. Это прежде всего моделирующие программы, в частности "Универсальный механизм", который работает в вайне, но довольно таки криво. И поиграть в игры - тоже хочется :). А потрошить HDD для установки винды, рискуя при обрыве питания получить венегрет из единиц и нулей на прилично забитом данными терабайтном винтчестере - ой как неохота.

Оказалось что решение есть. Довольно простое и эффективное.

1. VHD-контейнеры, или как это реализует Microsoft

VHD - формат образа жесткого диска, используемый виртуальной машиной Virtual PC и гипервизором Hyper-V. Довольно распространен, в виду чего открытый VirtualBox поддерживает данный формат в полном объеме. Это же касается и QEMU, в состав которого входят утилиты для преобразования других образов в VHD.

В Windows 7 Ultimate (насчет висты я не в курсе) имеет в своем составе утилиты для создания дисков формата VHD и управления ими, а интсталятор win7 позволяет установить на такой диск семерку и настроить загрузчик для запуска установленной ОС на реальном железе. Гугление по этому поводу дает достаточно информации, вполне адекватная документация есть и на сайте Microsoft. При этом мы получаем полноценную систему, установленную в файл образа.

Цель данной статьи - подробно осветить и собрать воедино информацию, касающуюся данной задачи. Дабы облегчить жизнь тем, кому эта технология может пригодится. Строго не судите - приобретя некоторое знание, хочу поделиться им с окружающими.

Задачу будет освещаться в аспекте того, как её решал автор. Заинтересованное лицо, возможно, найдет для себя иной удобный ему способ реализации.

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

  • Утилита для управления разделами HDD, например gparted
  • Менеджер виртуальных машин VirtualBox
  • Установленная на ВМ ОС Windows (XP/7)
  • Загрузчик grub4dos
  • Драйвер WinVBlock
  • Утилита wincontig от Марка Русиновича для дефрагментации образов - берем тут

Для размещения образов необходим раздел жесткого диска (или отдельный диск) с файловой системой, которую будет понимать Windows. Выбор тут невелик - NTFS, так как FAT32 не поддерживает файлов более 4 Гб, а наши образы будут существенно больше. Раздел можно создать в gparted и там же и отформатировать, например у меня сделано вот так - воспользовался местом, резервированном для вероятной установки другой системы и экспериментов.


Теперь этот раздел необходимо пробросить в виртуальную машину. Это нужно для того, чтобы выполнять операции над файлами из нативной виндозной среды, в частности может потребоваться дефрагментация образов, о чем будет чуть ниже. Для этого создаем файл-ссылку на физический жесткий диск/раздел диска средствами VirtualBox

Полученный виртуальный диск подключаем в виртуалбоксе к машине с установленной виндой (лучше с win7), допустим вот так


Таким образом, почву мы подготовили.

Что касается загрузчика, то для нашей задачи необходим grub4dos - этот загрузчик умеет работать с образами hdd, в том числе и VHD-формата. Качаем его отсюда. Необходимо брать последнюю версию, так как у подобраной на гитхабе версии 0.4.4 обнаружилась проблема с определением геометрии диска - для любого образа он выдавал 1024 цилиндра, вне зависимости от размера оного. Автором использован 0.4.6a.

Можно установить загрузчик как основной, но у большинства пользователей арча используется grub2, поэтому имеет смысл использовать его для загрузки по цепочке. Просто копируем содержимое архива с grub4dos, например в /boot/grub4dos/. Создаем файл

/etc/grub.d/40-custom
где my_menu.lst - кастомное меню, где мы пропишем все наши винды. Перегенерируем конфиг груба
и в меню grub2 появится пункт, запускающий grub4dos.

Предупреждение: grub4dos очевидно не понимает разметки GPT, так что сказанное выше, как и вся статья, справедливы для тех, кто использует старую разметку.

3. Создание VHD-образа

Тут возможны варианты. Быстрый - создать образ диска средствами VirtualBox. Образ должен быть фиксированного размера в формате VHD. Кроме того, и это самое принципиальное, образ не должен быть фрагментирован! В противном случае, при попытке маппинга, g4d выдаст ошибку
Это значит, что образ фрагментирован и для его маппинга потребуется дефрагментация.

Образы, созданные VirtualBox практически всегда фрагментированы, во всяком случае мне показалось, что степень из фрагментации некая случайная величина. Так что мимо дефрагментации не пройти. Ещё можно произвести утилитой wincontig из виртуальной машины с виндой, к которой подключен раздел где мы храним образы.

Второй путь - создать VHD из ВМ c win7 через "Управление дисками". Результат не будет фрагментированным, однако на создание образа уйдет время, пропорциональное размеру образа.

После создания образа переходим к установке целевой винды на образ. Создаем виртуальную машину, либо подключаем диск к имеющейся ВМ и устанавливае винду. Стандартно, хотя сетевые устройства можно выкинуть из конфигурации, чтобы процесс занимал меньшее время.

Предупреждение: Ни в коем разе не устанавливаем дополнения гостевой ОС! Эта система всё равно будет работать на Вашем реальном железе, так что они и без надобности, и лишний повод для BSOD нам не нужен.

4. Настройка загрузчика grub4dos

В файле my_menu.lst пишем следующее (пример соотвествует моей конфигурации разделов на винте)

Этот код стартует загрузку винды из образа. Однако выполнив его без соотвествующей подготовки загружаемой ОС мы обязательно получим BSOD с кодом 0x7B - ошибка ввода/вывода связанная с обращением к дисковой подсистеме. Попросту говоря загрузчик и ядро не увидят образа диска и расположенных на нем файлов.

5. Установка драйвера WinVBlock

При загрузке совсем старых, версий винды ветки win9x никаких дополнительных действий не требуется - эти частитчно 16-разрядные системы обращаются к диску на начальном этапе загрузки используя прерывание BIOS 13h. 32-битные ОС семейства NT используют драйвера защищенного режима. Тоже самое касается и современного ядра Linux и FreeBSD. Поэтому для обеспечения загрузки из VHD-образа необходимо наличие в загружаемой системе соотвествующего драйвера, позволяющего ОС обращатся к образу как к блочному устройству.

Таковой драйвер имеется в win7 (vhdmp.sys) и такой проблемы нет (зато есть другие, пока не решенные мной проблемы. ). Для рассматриваемых нами систем подобный драйвер написан человеком с ником Sha0, исходники расположены тут. Однако собрать их у меня не вышло, так что я выцарапал готовые сборки из пакета VHD_XP_Setup, и выкладываю вот тут. Внутри архива имеется интсрукция по установке, она довольно проста.

Устанавливаем данный драйвер в систему на образе. И остался последний штрих

6. Подготовка к запуску на реальном железе


Мы помним, что наша система инсталирована в ВМ, а поэтому некоторые устройства определены на этапе установки и система подсунула для них соотвествующие драйвера. При запуске на Вашем реальном компьютере с вероятностью в 99% снова получится BSOD 0x7b. Это связано с тем, что VirtualBox эмулирует контролер IDE следующим образом

и этот драйвер, работая в загружаемой системе конфликтует с реально установленным на мат. плате контроллером, при попытке системы прочесть файл образа с диска.

Решается просто - выбираем "Обновить драйвер", говорим, что не надо искать а мы сами укажем нужный драйвер и выберем "Стандартный двухканальный контролер IDE". После этой процедуры система будет "бсодить" уже при запуске в VirtualBox, а вот на реальной машине - заведется )

Теперь можно перезагрузить машину и выбором пунктов в меню Grub2 и Grub4dos загрузить нашу систему. После загрузки система яростно начнет определять реальные железки, может быть проблема с USB-шиной, так что надо запастись хотя бы мышью с интерфейсом PS/2. Оталось достать порядком заброшенные диски, шедшие в комплекте с железками и установить необходимые драйвера в системе.

Выводы

Описанные действия - это довольно простой и элегантный вариант установки ОС Windows параллелено с Linux без затрагивания разделов hdd и загрузочной записи. В общем это то, чего не хватало лично мне.

Эксперимент дал положительный результат с системами WinXP SP3 и Win2k3 Server SP2 Enterprise. 64-разрядная экспи хоть и не "бсодила", но задумчиво бегала ползунком на заставке без шевеления HDD и так и не стартовала.

Благодарности

Отдельное спасибо форумчанину с ником denchik за предоставленные для экспериментов образы и конфиги загрузчика )

Всем привет в моих видео на ютубе я показывал как записать игру в оперативку или как закинуть файл подкачки в оперативную память или как увеличить производительность браузера гугл хрома с помощью заброски его кеша в оперативку. Многие задали вопрос можно ли установить Windows в оперативку и будит ли от этого толк? Сейчас я все расскажу.


Как установить Windows в оперативку?

Для этого нам понадобится набор инструментов:

  • 16 гб RAM, или больше. Хотя можно попробовать и на 8. 4 хватит только для XP
  • Grub4Dos
  • Wincontig
  • BootIce
  • Partition Wizard или что-то подобное для клонирования разделов
  • драйвер Firadisk
  • образ Windows желательно x64 (можно и x32, но свободной памяти будет макс 3.2гб).
  • установленная и работающая винда от 7 до 10

Grub4Dos — это менеджер загрузки, для организации мультизагрузочных систем. он так же может создавать виртуальные диски - VHD и работать с ними так же как и с обычными дисками. VHD может быть смонтирован в память что нам и нужно. При монтировании в память содержимое файла-источника копируется в память и дальнейшая работа ведется уже оттуда. Как источник можно использовать файлы .ima (образы дискет), .iso (образы CD/DVD) а также .img (RAW образы HDD). Родные для Windows файлы .vhd (фиксированного размера, не динамические и не дифференциальные) представляют собой те же .img, но с небольшим заголовком и их тоже можно подключать.

Созданные при помощи Grub4Dos виртуальные диски доступны в реальном режиме. Windows сможет работать с ними только при наличии специального драйвера - Firadisk (работает с дисками в памяти) и WinVBlock (работает с образами в файлах). При наличии в Windows Firadisk она сможет работать с дисками, созданными в Grub4Dos. К сожалению, драйверы не подписаны и для их работы нужно отключить проверку подписей драйверов. Делаем так: создаем VHD с установленной Windows, где отключаем проверку подписей, устанавливаем Firadisk, затем подгружаем VHD еще до загрузки Windows через Grub4Dos и загружаемся уже в виндовс которая записана целиком в оперативную память.

Устанавливаем Grub4dos. Запускаем BootIce, выбираем диск, с которого будем загружатся, ставим Grub4dos в MBR, кладем в корень любого раздела файлы grldr и menu.lst.

В menu.lst пишем:

Потом через управление компьютером - управление дисковыми устройствами создаем в корне нашего рабочего раздела файл VHD фиксированного размера гигабайт этак на 10 (можно больше, при наличии большого количества оперативки), форматируем в NTFS, отключаем диск и дефрагментируем его файл при помощи Wincontig.

Нужно из этого VHD получить образ диска с готовой к работе Windows, драйверами для вашего оборудования и поддержкой загрузки из VHD, а еще такой образ можно просто скачать. Если качать образ то только с отвязаными драйверами, так как ваш компьютер может отличаться. После загрузки инсталлятора жмем Shift-F10, и выполняем:

Загружамем виндовст и создаем родной загрзчик так:

Отключаем в загрзчике проверку цифровых подписей так:

И в том загрузчике с которого мы загрузились тоже отключаем:

Перезагружаем компьютер для включения тестового режима и устанавливаем драйвер Firadisk: hdwwiz, установливаем все устройства в ручную с файлов .inf

Сжимаем VHD до размера что бы влез в опеартивку можно накинуть пару лишних гигов если оперативки много, я вообще сделал диск на 32 гига.

Грузимся в предыдущую винду, монтируем win10.vhd, создаем еще один vhd уже конечного размера и копируем один в другой через редактор разделов вроде Partition Expert. Заменяем тот файл на новый, опять дефрагментируем через Wincontig. Попробуем загрузиться в новый VHD. Все должно быть норм.

Наконец таки пришло время загружать винду в оперативку, прописываем в грубе так:

Загружамемся, после копирования винды в оперативку запустится Windows которая целиком и полностью будет находится в оперативке. Можно проверить скорость диска и вы будуите крайне приятно удевлины, посмотрите сами это сюрприз!

Что бы ввсе изменения в windows сохранялись нам нужно сделать кое что еще, прописываем груб:

Таким образом все из Windows в ОЗУ будет сохранятся в файл VHD на диске или флешке вашего ПК. Теперь ты установил Windows в оперативку! Знаешь еще способы пиши о этом комментариях.

Читайте также: