0,1
рейтинг
4 июля 2014 в 11:58

Администрирование → 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. Теперь они мирно уживаются друг с другом и не портят друг другу жизнь.
Дмитрий Притыкин @maisvendoo
карма
161,5
рейтинг 0,1
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (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
        Спасибо! Кажется действительно в этом дело, насколько помню. Завтра проверю.

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