Grub 2 + VHD: установка и загрузка ОС Windows 7 Ultimate

Введение


Ни для кого уже не секрет, что начиная с версии Windows 7 Ultimate, операционные системы от Майкрософт умеют загружаться будучи установленными на образ жесткого диска формата VHD. Однако, данная возможность «из коробки» доступна только пользователям этой самой Windows 7 Ultimate.

У меня же, убежденного пользователя Arch Linux, потребность в применении этой технологии возникла из-за необходимости иметь винду под рукой в дуалбуте и именно в реальном окружении. 90% процентов задач, для которых нужен Windows, разумеется решаются путем виртуализации, и мощности современного железа, и возможности виртуальных машин, позволяют даже в игры играть в виртуальной среде. Однако, возникла необходимость в использовании пакета «Универсальный механизм», который под вайном работает криво (допускаю и что руки у меня кривые), а в виртуальной среде, понятное дело, безбожно теряет прыть. В общем понадобилась Windows, но таскать разделы на винте и менять его разметку страшно не хотелось ради установки одной программы под винду.

Решение нашлось в реализации загрузки из VHD-образа с использованием загрузчика Grub2, ставшего стандартом де-факто во многих популярных дистрибутивах Linux. Об этом собственно и пойдет речь.

Какие преимущества перед стандартной установкой Windows в дуалбут с линуксом дает такая методика:

  • Весь процесс установки и настройки выполняется в среде OS Linux, с использованием менеджера виртуальных машин VirtualBox
  • Раздел, где хранятся образы может быть любого типа: первичный или логический. Он не обязательно должен быть активным
  • Количество устанавливаемых систем ограничено лишь размерами NTFS раздела. Все системы изолированы друг от друга
  • Не происходит перезапись MBR, линукс-загрузчик остается нетронутым
  • При замене HDD можно просто скопировать Linux (содержимое всех разделов, подробнее об этом здесь) на новый винт, рекурсивно с сохранением атрибутов, установить Grub 2 на новый винт и вуаля — Ваши Windows- системы перенесутся как ни вчем не бывало. Это удобно


Итак, перейдем к описанию метода.


1. Подготовка почвы


Для хранения образов нам таки потребуется NTFS-раздел, который может быть как первичным, так и логическим, и не обязательно активным. Его можно создать с помощью gparted, там же и отформатировав в NTFS. У меня на НDD была зарезервирована неразмеченная область для разного рода экспериментов с осями, её я и отдал под данный раздел



Далее делаем этот раздел доступным для виртуальных машин VirtualBox

$ VBoxManage internalcommands createrawvmdk -filename ~/<Путь к файлу>/win7.vdmk -rawdisk /dev/<раздел>


то есть создаем виртуальный диск в виде файла-ссылки на раздел реального HDD. Этот диск подключаем к виртуальной машине с Windows 7 Ultimate — она пригодится нам для решения поставленной задачи



2. Создаем VHD-образ с системой


Теперь надо создать VHD-образ HDD. Его придется создавать средствами, предоставляемыми Windows 7 Ultimate, ибо диски, создаваемые тем же VirtualBox вызывают последующий вывал загружаемой винды в BSOD.

Загружаем вирутальную машину с виндой. Идем в панель Панель управления -> Система и безопасность -> Администрирование -> Управление компьютером -> Управление дисками. С правой стороны окна имеется меню, где мы выбираем создание виртуального диска



после чего указываем путь к нему и задаем его параметры



Лучше всё же выбрать фиксированный размер образа — это будет работать быстрее.

Щелкаем ОК и пока идет процесс, выполним

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


Сам загрузчик bootmgr и каталог с его конфигом boot банально копируем с установочного DVD Windows 7 в корень раздела NTFS, туда же, где размещается папка с VHD-дисками.



Удаляем файл \boot\bcd, ибо этот контейнер хранит конфигурацию с загрузочного DVD, и создаем новый контейнер. Для этого используем крохотную утилитку bootice. Запускаем её, выбираем вкладку “BCD edit”.



Далее жмем “Create new BCD”, выбираем путь по которому будет расположен файл конфигурации и создаем его с именем BCD. Далее выбираем этот файл и жмем “Easy mode” – запуск редактора в упрощенном режиме.



Файл конфигурации откроется в режиме редактирования, нажимаем кнопку “Add” и выбираем вариант “New VHD boot entry”. Редактор сосздаст шаблон загрузочной записи и нам остается лишь вписать путь к нашему образу.



Путь к VHD-файлу от корня раздела с образами прописываем в поле “File”. После этого жмем “Save current system” и выходим из программы.

Дожидаемся пока закончится процесс создания VHD-образа и покидаем виртуальную семерку.

4. Установка Windows 7 Ultimate на VHD-образ


Выполнена средствами VirtualBox. Для этого:

  • Смонтирован NTFS-раздел с образом в хост-системе Linux
  • Создана виртуальная машина, причем в качестве образа диска выбран созданный нами образ
  • Установлена винда, стандартно, без ухищрений


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



и этот драйвер, работая в загружаемой системе конфликтует с реально установленным на мат. плате контроллером, при попытке системы прочесть файл образа с диска. Решается просто – выбираем “Обновить драйвер”, говорим, что не надо искать а мы сами укажем нужный драйвер и выберем “Стандартный двухканальный контролер IDE”



После этого выключаем нашу виртуальную машину и делаем её «реальной»

5. Настройка загрузчика Grub2


В конфиг Grub2 необходимо добавить загрузочную запись такого вида

menuentry “Windows 7 Ultimate SP1″ {
   set root=’hd0,msdos4′
   ntldr /bootmgr
}


где (hd0,msdos4) — NTFS-раздел, где размещены VHD-образы.

После этого можно перезагружаться и пробовать…

Заключение


После загрузки устанавливаем драйвера на наше реальное железо и радуемся жизни:



Изображенное на скринах – это полноценная ОС, работающая на реальном железе. Но она – всего лишь файл на Вашем жестком диске. Этот файл может быть скопирован, удален, перемещен, архивирован и прочее. К тому же, такой метод решает извечную проблему конфликта Windows vs Linux на одном HDD. Теперь они мирно уживаются друг с другом и не портят друг другу жизнь.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Реклама

Комментарии 33

  • НЛО прилетело и опубликовало эту надпись здесь
      0
      Получается что теперь можно поочередно образ и на VirtualBox и на реальном железе грузить?
        0
        На виртуалбокс может вылететь в BSOD из-за наличия драйверов на реальные железяки. Хотя, у меня так же и экспи установлена (с допилкой с помощью драйвера WinVBlock), и она грузилась в виртуалбоксе. Но это спорно
          0
          Upd: А нет, вот сейчас попробовал — загрузилась! Та винда, что на последнем скрине в статье
            0
            И она же после этого на реальном железе


            Так что да — можно!

            При загрузке на виртуалке выдает сообщение-предупреждение о том, что надо бы установить нормальные дрова на видео
              0
              Отлично, спасибо большое! Попытаюсь на днях проверить, уже достаточно давно была необходимость в чем-то похожем, а тут вдруг ваша статья.
                0
                Рекурсия
          –1
          Что-то до меня не дошёл основной посыл статьи. Хотим поставить винду, но не хотим создавать новых разделов — без проблем, поставим на образ, только для хранения образа сначала создадим новый раздел… Далее, с образов грузиться умеет только Win7 Ultimate — тоже не проблема, будем загружать через Grub2. Но для установки на образ возьмём ту же самую Win7 Ultimate…

          Если мы и так уже берём Ultimate и создаём новый раздел, почему бы не поставить сразу по-нормальному?
            0
            1. Раздел может быть первичным или логическим. Он может и не быть активным. Любой раздел в любом месте винта
            2. При установке не перезаписывается MBR, загрузчик линуксовый остается нетронутым.
            для установки на образ возьмём ту же самую Win7 Ultimate…

            3. Установка в образ производится с помощью VirtualBox, работающего в Linux. Винда использована только для создания образа и настройки bootmgr, и она опять таки работает на виртуальной машине в линуксе.

            Собственно речь идет о том, что сидя в линуксе мы устанавиваем Windows в файл VHD-образа, а потом используем по целевому назначению уже в реальном окружении
              0
              К тому же — я недавно менял HDD, новый купил, большего объема. Перенес систему со старого винта на новый, как описано тут. Все винды, что на образах установлены, перекопировались просто. Удобно.

              Чтобы перенести систему с виндой установленной в раздел по-настоящему надо приложить горазбо больше усилий. А тут обходимся просто копированием файлов с винта на винт рекурсивно с сохранением атрибутов
                +1
                Теперь более понятно, спасибо. Возможно, стоило перечислить во введении ключевые преимущества именно такого способа установки и работы. А то поначалу лично у меня, скажем, сложилось ощущение, что сейчас поставим не-Ultimate винду на образ, да ещё и находящийся на linux-разделе, и будем грузиться с него. С интересом начал читать, а в итоге схема оказалась совсем другой.
                  0
                  Учту, поправлю, спасибо за критику
                +1
                «Раздел может быть первичным или логическим»
                Давно пора забыть эти слова и переходить на GPT.
                  0
                  Пора, да только моя материнка на десктопе выпущена в 2011 году и не имеет UEFI и не понимает GPT. На ноуте, купленном в декабре 2013 таковые возможности уже канеш имеются
                    +1
                    Вы же используете Grub2, а он поддерживает загрузку в Legacy-режиме с GPT таблицы.

                    Вообще говоря, ни один BIOS не должен понимать ни GPT, ни MBR. Просто брать первый сектор с диска, загружать в память и передавать туда управление. Ну а там у нас может быть Grub, Lilo, Syslinux, загрузочный сектор Windows, всё что угодно.
                      0
                      То есть, если я использую grub2, я могу разметить свой диск в GPT и загружаться, даже не имея uefi?

                      Можно поподробнее об этом?
                        0
                        Да, нужно только создать дополнительный раздел размером пару мегабайт и пометить его флагом «bios_grub» (в gparted так флаг именуется). На этом разделе grub разместит загрузчик второй стадии (первой будет в первом секторе, т.к. там очень мало место, то его задача лишь в нахождении и загрузке второй стадии).
                        Установка ничем не отличается от MBR, только в качестве устройства нужно указать не активный раздел, а сам диск (sda).
                        en.wikipedia.org/wiki/BIOS_Boot_partition
              0
              Устанавливал точно так же 8-ку в VHD файл второй системой на ноут с 7-кой. Всё хорошо кроме двух моментов: не работает гибернация и нельзя обновить до 8.1
                0
                Есть небольшой вопрос, возможно ли такое провернуть с хакинтошом?
                  0
                  Ответ на него зависит от того, поддерживает ли Mac OS X работу на VHD. У ультимейта имеется родной драйвер, для WinXP/2k3 подобное осуществимо с использованием драйвера WinVBlock. Что касается мака — этот вопрос я не изучал, хотя интересно.

                  P. S.: Сам мак на VirtualBox у меня имеется установленный.
                0
                Интересная тема!
                А можете сделать тест HDD и индекс производительности показать?
                  0
                  надо попробовать. Сравнить с реальным HDD? Думается, если и будет замедление, то несущественное. Прослойка между ОС и устройством ненамного толще классического случая.
                    0
                    К сожалению вот

                    Оценка не удалась именно из-за способа запуска системы
                    0
                    Ну так это же фича виндового загрузчика. Grub 2, который тупо запускает ntldr с партиции, тут вообще не причем. Вот если б без нтфса, на замапленый бинарный образ…
                      0
                      Да, это фича виндового загрузчика. Grub2 реализует лишь chainload
                      Вот если б без нтфса, на замапленый бинарный образ…

                      Экспи так можно загрузить. Но без нтфс не пробовал

                      P.S.: а надо бы попробовать…

                      тупо запускает ntldr

                      bootmgr
                        0
                        Ага, где-то валяется EeePC 900, где в дополнение к FreeBSD стоит XP по подобной схеме. На FAT32 причем вроде даже с сд карты. Жаль, что WinVBlock под nt6.0+ не допилили
                          0
                          Жаль, что WinVBlock под nt6.0+ не допилили

                          О, да, я пробовал его на Win7 Proff. Она не умеет VHD, думал решить винвблоком. Не-а — падает из-за неподписанного драйвера, а даже если временно убрать подпись, всё равно валится
                      0
                      При загрузке через bootmgr «выбивало» ошибку 0xc000000e (ненайденный Boot\BCD), как при загрузке на реальной системе (через grub4dos и chainloader (hd2,2)/bootmgr), так и при загрузке из виртуалки с предоставлением доступа ко всему диску (не к vhd) и тем же grub4dos'ом.
                      image

                      Попрошенный у maisvendoo файл BCD результата не дал.

                      Решение: на GPT-диске отсутствовал hybrd MBR, был только protective;

                      gdisk /dev/sdX, p (вывести текущую таблицу разделов), r (опции восстановления/преобразования), h (создать hybrid mbr), указать раздел с .vhd, w (записать).

                      Осталось только заставить rEFInd загрузить эту радость с другого диска и другого раздела %).
                        0
                        bootmgr грузится, но дальше загрузка винды не проходит, ругается на отсутствующий \Windows\system32\winload.exe c ошибкой 0xc000000f, хотя файл внутри VHD образа конечно же есть
                          0
                          1. EFI или MBR?
                          2. Если EFI, вопрос этот я ещё не изучал. Если MBR, то было бы интересно взяглянуть на записи в /boot/BCD
                            +1
                            У Вас, вероятно, bootmgr ищет winload в текущем разделе, а надо указать ему искать в образе

                            Обратите внимание на поле «Disk»
                              0
                              Спасибо! Кажется действительно в этом дело, насколько помню. Завтра проверю.

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