GRUB всемогущий, или Делаем загрузочную флешку. Grub2 на флешку


GRUB всемогущий, или Делаем загрузочную флешку / Хабр

Про сам grub, загрузочные флешки и особенно специальные утилиты для создания дисков написано уже не мало, но выглядят они узко направленными. Например только для создания флешки Windows 7, различные PEtoUSB, есть более универсальные как в этом топике. Куча утилит по сути устанавливают загрузчик grub, isolinux (реже BCDW или lilo, еще реже свой как Win7), и затем раскладывают предложенные ему файлы (Windows7,WindowsXP, Ubuntu и т.д.) по папкам. От сюда и требовательность к образам (как писали в комментариях к этому топику).

А между тем абсолютное большинство выложенных в интернете дисков (особенно USB) как раз и используют isolinux и grub, что мешает их просто объединять? да ничего!

Я постараюсь с примерами рассказать, как сделать загрузочную, установочную и просто Live флешку, причем все в одном без заточенных под конкретный дистрибутив утилит. И иметь возможность, при необходимости, легко добавить на флешку еще что-то, без очередного ее переформатирования. (С) Картинка оттуда

Демонстрация
Для пользователей Linux нет необходимости объяснять, как пользоваться командой grub-install /dev/sdb, да и преимущества grub им очевидны. Предвидя комментарии типа dd, хочу сказать, что статья нацелена в первую очередь на Windows пользователей. Пользователям Windows я постараюсь объяснить преимущества grub, и надеюсь смогу убедить, что grub нужно держать если не первым, то вторым загрузчиком точно (флешку с grub иметь точно необходимо). Для начала можно попробовать без затирания MBR. Достаточно прописать grub в boot.ini: Нам понадобятся файлы из архива GRUB4DOS, копируем их в корень C:\, не обязательно что бы это был FAT, у меня работает и на NTFS:default grldr grldr.mbr menu.lst

Для Windows XP в boot.ini добавляем c:\grldr="GRUB4DOS". Все. Либо запустить GRUB\install.bat из файла в приложении (файл install.bat взят из установщика xPUD ©, и только добавляет grub, ничего не копирует).

Для пользователей Vista и 7 установка несколько сложнее, чем в XP — делается это чрез bcdedit:

делаем резервную копию bcdedit.exe /export "C:\BCD.bak"bcdedit.exe /create /d "GRUB4DOS" /application bootsector запоминаем GUID вида "{1a5b5afd-0469-110d-9a85-000103005000}", и далее заменяем в команде GUID на эту строку

bcdedit.exe /set GUID device boot bcdedit.exe /set GUID device partition=%SYSTEMDRIVE% bcdedit.exe /set GUID path \grldr.mbr bcdedit.exe /displayorder GUID /addlast Либо так же запустить GRUB\install.bat из файла в приложении.

В общем то на этом установка закончена, и можно уже перезагружаться и поиграться с командной строкой (нажать С после появления меню grub).

Например, можно начать загрузку с дисковода:chainloader (fd0)+1 rootnoverify (fd0) boot

С привода компакт дисков: cdrom --init map --hook chainloader (cd0) boot

Перезагрузиться:reboot

Выключить компьютер:halt

Можно загрузиться с заранее вставленной флешки (если конечно там есть какой то загрузчик):map (hd1) (hd0) map (hd0) (hd1) root (hd1,0) chainloader +1 boot

А можно начать установку Windows 7, образ которой до этого просто разархивировали на флешку (и сама флешка не загрузочная):root (hd1,0) chainloader /bootmgr boot

Напомню, что все это мы делали из режима командной строки. Но 1 в 1 (удалив только последнюю команду boot), эти команды можно прописать и в menu.lst, и они будут работать из меню.

Случай из жизни: Cлетел MBR первого диска, и по этому BIOS загрузил сразу grub со второго диска. Увидев привычный синий экран, я смекнул что MBR, после очередных экспериментов, повреждена и требуется восстановление. Все что потребовалось мне, это перейти в режим командной строки ( С ) и ввести:root (hd0,0) chainloader /bootmgr boot

И началась загрузка Windows7 После загрузки выполнил bootsect /nt60 c: /mbr И все (!) Никакого безопасного режима или режима восстановления, ни каких 2-3 перезагрузок, и тем более ни каких дисков восстановления (да и нет у меня CD привода на нетбуке). После процедуры даже не понадобилось лишний раз перезагружаться, Windows загрузилась уже в штатном режиме (одно время я неделю ее так запускал, забывал восстановить MBR после загрузки). Так же в архиве GRUB4DOS есть примеры автоматического поиска Windows XP и Windows 7/Vista, и даже если вы не знаете где у вас установлена Windows — все равно можно загрузиться при слетевшей MBR.

Установка
И так, Вы прониклись и хотите сделать себе такую флешку, но у Вас уже есть флешка на 16Гб и форматировать ее крайне не желательно, а большинство распространенных утилит (и инструкций) для изготовления бут-флешек предлагают ее предварительно отформатировать, что бы, полагаю, убедиться, что на создаваемой флешке точно файловая система FAT32. А потом устанавливают туда опять же grub или isolinux.

Установить grub можно без форматирования (при условии, конечно, что у вас уже FAT32, коих абсолютное большинство). Есть утилитка Winrub (любителям GUI), а в архиве GRUB4DOS есть bootlace.com. Рассмотрим вариант WinGrub. Раньше это был sfx архив, который сам себя распаковывает в %programfiles% и создавал ярлык на рабочем столе, что мне не нравилось. Достаточно было его самостоятельно распаковать, запустив потом grubinst_gui.exe. Когда писал статью, скачал последнюю версию, там уже инсталятор более менее полноценный. Качаем, ставим. Либо смотрим приложенный файл в конце статьи, я выложу свой комплект для сборки архивом. Запускаем, далее выбираем флешку (ориентируясь по размеру), и в partition list выбираем MBR или Whole disk. Жмем Install. Появляется окно консоли "The MBR/BS has been successfully installed", с предложением нажать Enter, После нажатия которого — оно закрывается. В случае если написал "grubinst: Should be a disk image" поставьте галочку «Floppy image» и повторно нажмите Install

Теперь GRUB4DOS прописан в MBR. После (хотя можно и ДО), копируем файлы из архива GRUB4DOS в корень флешки:default grldr grldr.mbr menu.lst И редактируем menu.lst по желанию, параллельно наполняем флешку (часть пунктов уже можно посмотреть в статье выше, да и сам архив содержит примеры).

Наполняем
1. Alkid live В полной раздаче есть архив multiboot.7z, где есть пример файла для grub, от туда его и возьмем, а сам ISO просто разархивируем в корень. Переименовываем i386 в minint, если забудем то не запустится, но скажет что не найден minint (что и стало столь не очевидной подсказкой). Добавляем в menu.lsttitle Alkid Live CD root (hd0,0) chainloader (hd0,0)/minint/setuplns.bin

В папке programs можно удалить лишнее, если флешка не сильно большая. А так же обновить базы антивирусов до актуального состояния.

2. Hiren's BootCD Открываем ISO и видим, что в папке HBCD лежит конфиг загрузчика isolinux. Разархивируем папку HBCD в корень флешки, открываем isolinux.cfg:menu label Start BootCD kernel /HBCD/memdisk append initrd=/HBCD/boot.gz

что легко преобразуется в синтаксис grubtitle Start BootCD root (hd0,0) kernel /HBCD/memdisk initrd /HBCD/boot.gz

добавляем и его в menu.lst Установка закончена.

3. Некоторые мелкие утилиты уже есть готовые в интернете. обычно это образ дискеты с memtest, Ghost, DOS, PQMagic. Грузиться с них так же не составляет труда. Прописываем в menu.lst:title Ghost 11 map --mem /Ghost.ima (fd0) map --floppies=1 map --hook chainloader (fd0)+1 rootnoverify (fd0)

У меня EEEPC без CD привода и когда вдруг встала необходимость восстановить его, я даже не задумался где взять внешний привод. Переписал Ghost образ с DVD дсика на флешку на «большом» компе, загрузился с флешки и восстановил.

4. Запуск дистрибутива. Возьмем для примера образ Parted Magic. Качаем образ для USB. Он уже на grub и имеет очень большое меню различных вариантов загрузки. Для его установки распаковываем архив, папка pmagic должна оказаться в корне, и из boot\grub файл menu.lst копируем в \pmagic, а в наш груб добавляем:title PМagic configfile /pmagic/menu.lst

Эта команда загрузит меню из родного menu.lst от pmagic, и нам не придется вообще ничего изобретать. Разве что добавить в \pmagic\menu.lst пункт для возврата обратно в наше:title <<main menu configfile /menu.lst

В последней версии PМagic добавилась еще куча утилит, в т.ч. memtest, восстановление grub, hardware analyzer. Рекомендую самостоятельно потренироваться в «переселении» их на свою флешку, подглядывая в п.3 или menu.lst.

5. Запуск Live Ubuntu. У меня лежал "ubuntu-9.10-desktop-i386.iso", на его примере и рассмотрим. Так же, разархивируем в корень. В папке isolinux (ее после можно удалить), в файле text.cfg находм как запускается Live режим, и соответственно добавляем свои строки в menu.lst (сравните что там было и что получилось)title Try Ubuntu without any change to your computer root (hd0,0) kernel /casper/vmlinuz file=/preseed/ubuntu.seed boot=casper initrd /casper/initrd.lz

6. Установка Debian (точно так же ставится и Ubuntu): Для этого нам понадобится файлы HD-Media (или графический инсталятор) из репозитория, и ISO образ DVD1. Складываем все это в корень, а в grub добавляем:title Debian Install kernel /vmlinuz init /initrd.gz

После начала установки будет найден образ ISO DVD1 и продолжится установка без сети, без CD приводов.

7. Установка на флешку Антивирусов сильно сложнее, например установку Dr.Web Live CD я расписывал тут.

Образы антивирусов не все удалось нормально «подселить» на флешку, если кто то сможет и поделится опытом буду рад (сам давно их не качал, возможно в последних версиях это уже делается сильно проще). В образе от Dr.Web, например, лежит даже инструкция по установке на флешки. Для справки Live образы антивирусов:Dr.WebBitDefenderAvast! уже платный :(Symantec NAVPandaAvira

8. DOS. Тут стоит разделить, если нам нужен ДОС для какой то серьезной работы, то имеет смысл найти DOS-Live образы, например этот, и грузить как в п.3. Мы же запускаем DOS что бы потом из него запустить установку Windows XP. От ДОСа нам понадобятся:AUTOEXEC.BAT COMMAND.COM CONFIG.SYS EMM386.EXE HIMEM.SYS IO.SYS SMARTDRV.EXE

желательно, но не обязательно:Mouse.com MOUSE.INI OAKCDROM.SYS

Копируем все это в корень флешки, а в menu.lst добавляем title DOS (Install WinXP?) root (hd0,0) makeactive chainloader /io.sys Тут можно либо насладиться DOS, либо заранее в AUTOEXEC.BAT прописать (файл ответов конечно по желанию):smartdrv cd \WinXP\i386 winnt /U:\WinXP\i386\winnt.sif

9. Установка Windows 7. Как уже писал выше достаточно разархивировать ISO в корень флешки, а в menu.lst добавить (уже с hd0,0)root (hd0,0) chainloader /bootmgr boot

10. Ну и для ровного счета расскажу еще об одном типе утилит. Некоторые (не все!) ISO образы могут быть загружены прямо из grub. Среди таких у меня нашлись: Acronis True Image, Acronis Disk Director, Active Password Changer. Это особым образом подготовленные образы (не простой слепок с CD), их загружать следующим образом:title Active Password Changer map (hd0,0)/Pwdchanger.iso (hd32) map --hook chainloader (hd32)

Удаление
Что делать если случайно установили grub в MBR основного диска, а не флешки, либо нужно удалить с флешки? Можно воспользоваться утилитой bootsect.exe как я писал выше. В случае если еще не перезагрузились (если перезагрузились, то при помощи grub загрузите Windows, способом описанным выше), и запустите bootsect.exe Для восстановления Windows XP bootsect /nt52 c: /mbr Для восстановления Windows Vista/7 bootsect /nt60 c: /mbrbootsect находится в папке boot диска Windows, а так же есть в моем выложенном архиве в конце статьи. Флешку же достаточно просто отформатировать.
Заключение
Надеюсь что примеры помогут кому то разобраться, а кому то заинтересоваться данным загрузчиком, а утилиты для создания загрузочных флешек будут вызывать улыбку (ни кого не хочу обидеть, уважаю всех разработчиков, больше того сам с таких утилит начинал). Ну и конечно же очень рекомендую изучить подробнее сам grub, и GRUB4DOS, например вот русское руководство по последнему. Перед добавлением очередного дистрибутива или утилитки, следите что бы папки не совпадали. Часть Linux дистрибутивов, при определенной сноровке и хорошем владении grub, позволяет безболезненно переименовать свою папку. Особенно не большие, на подобии pmagic, puppy, xpud. В общем, не бойтесь экспериментировать, и удачи!

Так же ресурсы, которые могут быть полезны тем, кто хочет создать свою загрузочную флешку:greenflash.suflashboot.rulexapass.narod.ru

Приложение — мой архивчик со всем необходимым: bootsect, DOS, grub install скипт, WINGRUB, grub4dos. А так же список файлов на моей флешке c описаниями (некоторые просили).

UPD:

  • Форум где обсуждают варианты создания и загрузки ISO-образов.
  • В этой статье, от savvateev, он расказывается как решить некоторые возникающие проблемы, в том числе и фрагментацию образов ISO.
  • Статья «Программа для быстрого теста загрузочных дисков». С помощью описанной в статье утилиты загрузочную флешку можно тестировать мгновенно и без перезагрузки компьютера.
  • Скрипт для создания LiveLinux из любого дистрибутива.

habr.com

Рассеянный админ: Установка grub2 на USB-flash

Последнее время загрузочные CD|DVD уже уходят в историю (что уж говорить о Floppy). Все чаще для этого используются USB-накопители. Есть множество утилит как под #Windows системы, так и под #GNU/Linux, которые позволяют в почти автоматическом режиме создавать подобные флэшки. Но как всегда возникают случаи когда автоматики нам становится мало и мы хотим перейти в режим ручного пилотирования. Я выбрал один из самых распространенных загрузчиков, используемых в открытых системах - grub2
Короткий перечень действий:
#mkdir /mnt/flash#mount /dev/sdx1 /mnt/flash#grub-install --root-directory=/mnt/flash /dev/sdx#wget -P /mnt/flash/boot/grub/ https://dl.dropbox.com/u/11914045/grub.cfg
Ниже тоже самое только с комментариями.

Для начала нам необходима флэшка с загрузочным разделом. Как это сделать, описано тут.Затем создаем папку и подключаем туда наш раздел. Можно воспользоваться стандартной папкой подключения, и первые два пункта пропустить.#mkdir /mnt/flash#mount /dev/sdx1 /mnt/flash

Затем устанавливаем grub2 на нашу флэшку. Не забываем, что для этого он должен быть установлен в систему. --root-directory= указывает куда наша флэшка подключена и в конце указываем раздел на который устанавливается загрузчик#grub-install --root-directory=/mnt/flash /dev/sdxПосле этого необходимо добавить файл настроек /mnt/flash/boot/grub/grub.cfg . Его либо самому писать, либо можно взять у меня и подправить для загрузки тех образов, что нужны.#wget -P /mnt/flash/boot/grub/grub.cfg https://dl.dropbox.com/u/11914045/grub.cfg

О параметрах в файле настроек: 
set timeout=10 -  Время ожидания выбора, в секундахset default=0 - Какой пункт будет выбираться по умолчанию. Нумерация с 0.

submenu title [--class=class ...] [--users=users] [--unrestricted] [--hotkey=key] { menu entries ... }  -создает подменю, для группировки загружаемых систем.

menuentry title [--class=class ...] [--users=users] [--unrestricted] [--hotkey=key] - создает пункт меню для загрузки конкретной системы.
  • title - любой заголовок, как будет отображаться в меню образ|подменю
  • --class <имя класса> - позволяет объединить несколько пунктов в один класс и применить единое форматирование. 
  • --users - позволяет задать пользователей, которые будут иметь доступ к этому пункту.
  • --unrestricted - позволяет любому пользователю получить доступ к этому пункту.
  • --hotkey=key -  задает клавишу быстрого доступа. Может быть просто символом или "delete", "backspace", "tab"

 loopback [-d] device file - создает устройство из образа диска

  • -d -удаляет ранее созданное устройство
  • device - имя создаваемого устройства
  • file - путь к образу диска

linux file .... - загружает ядро Linux из указанного файла. После указания файла идут параметры ядра для этой системы.

 initrd file - загружает initrd файл нашей Linux-системы. Используется только после команды linux.

Данных опций хватит для организации загрузки Linux-системы. Как подключить образы со всевозможными установщиками и Windows буду рассматривать чуть позже.

Полный список опций можно посмотреть тут

jesterantik.blogspot.com

Как поделить флешку на два раздела с grub2 и ntfs? — Toster.ru

1.На сколько я знаю в прошлых версиях винды скрытие разделов происходило просто указанием их в таблице разделов не на первом месте, т.е. с флэшки отображался только первый раздел (о чем по ссылке Ezhyg то же пишут). В ВИн10 после какого-то большого обновления это убрали и теперь на флэшке видны все разделы. 2.В логических разделах нет смысла, когда на диске до 4 разделов. 3.Загрузка UEFI и Legacy BIOS осуществляется с помощью разных механизмов. 3.1.UEFI для загрузки использует EFI раздел на диске и размещенные в этом разделе загрузочные *.efi файлы. EFI раздел - это раздел с файловой системой FAT16 или FAT32. Загрузочные efi файлы должны лежать в строго определенном месте в файловой системе, где их ищет UEFI. 3.2.Legacy boot - использует старый механизм MBR (master boot record). MBR - это нулевой сектор на диске. Для того что бы это работало нужно какой-то из разделов сделать активным, этот раздел не может быть логическим, только основным. Именно с активного раздела происходит дальнейшая загрузка ОС. Кроме этого на диск нужно записать MBR - некий код, который осуществляет дальнейшую загрузку. MBR записывается в 0 сектор диска, он не является частью файловой системы (т.е. его нельзя записать скопировав куда-нибудь файл), для его записи необходим спец. софт. У груба есть свой MBR, у винды - свой, и т.д. 4.Загрузку с флэшки и в UEFI и в legacy режиме успешно решают многие. Например есть диагностическая сборка WinPE, где это решено. Для разбиения диска, записи MBR и т.п. действий там используется утилита bootice. Можете скачать архив с adminpe, там есть инструкция как сделать загрузочную флэшку с несколькими разделами и там по моему то же используется grub. Кстати, в bootice было удобно скрывать разделы - там это реализовано одной кнопкой - она просто переписывавет таблицу разделов, где разделы указаны в нужном порядке. Правда сейчас это уже не актуально.

toster.ru

GRUB2 на USB флешке, часть 2

После прочтения предыдущей статьи вы можете спросить, “зачем grub2 если есть syslinux или unetbootin?”

А вот зачем:

I. grub2 умеет загружать системы из iso-образов! это означает, что можно просто скачать на флешку свежий образ системы, немного поправить grub.cfg –  и можно пробовать!  Ложкой дегтя здесь является то, что образ iso не является полной эмуляцией cdrom, так что загружаемая система должна уметь найти себя в iso-образе. Точно умеют это делать Ubuntu и SystemRescueCD (см параметры ядра в примерах), про остальные надо гуглить.

для Ubuntu/Xubuntu/итп:

set iso=”/xubuntu-16.10-desktop-linuxium.iso”loopback loop $isoset root=(loop)

menuentry “Try Xubuntu without installing” {set gfxpayload=keeplinux /casper/vmlinuz.efi iso-scan/filename=$iso file=/cdrom/preseed/xubuntu.seed boot=casper zswap.enabled=1 zswap.compressor=lz4 splash —initrd /casper/initrd.lz}

для SystemRescueCD:

set loop1=”/systemrescuecd-x86-4.8.2-beta001.iso”insmod loopbackloopback loop $loop1set root=(loop)set kernel32=”/isolinux/rescue32 scandelay=3 isoloop=$loop1”set kernel64=”/isolinux/rescue64 scandelay=3 isoloop=$loop1”set initrd=”/isolinux/initram.igz”

menuentry “SystemRescueCd (64bit, default boot options)” {linux    $kernel64initrd    $initrd}

… другие опции из файла isolinux.cfg (там наиболее полный список)

II. Единый /grub.cfg для всех вариантов загрузки – существенно упрощает жизнь

III. Grub2 понимает не только fat, но и другие системы. Значит, можно загружать системы, файлы которых расположены не на usb, а на жестком диске компьютера. Например, можно сложить все файлы RemixOS прямо на диск C: (где windows), и загружать remix из меню нашей флешки:

#на диске с windows создаем папку C:/RemixOS, сливаем туда файлы и добавляем пустой файлик remix-hd для удобства поиска. Data.img будет создан в той же папке /RemixOS. DEBUG добавлен на этапе тестирования.

menuentry ‘HD mode ‘  {insmod ntfsinsmod part_msdossearch –file –no-floppy –set=root /RemixOS/remix-hdlinux /RemixOS/kernel root=/dev/ram0 androidboot.selinux=permissive SERIAL=random logo.showlogo=1 DATA=/data.img USB_DATA_PARTITION=1 CREATE_DATA_IMG=1 SRC=/RemixOS DEBUG=1initrd /RemixOS/initrd.img}

IV. Наконец, зная grub, вам не придется забивать голову другими загрузчиками )

Хотел написать отдельный пост о Remix под NTFS, но в пункте III собственно все и сказано.

ЗЫ: не делайте submenu в grub.cfg: submenu не наследует переменных! (баг или фича сложно сказать)

Like this:

Like Loading...

Related

sae762.wordpress.com

Ручная установка Windows 7/8/8.1/10 в систему с загрузчиком GRUB2 / Хабр

Наверняка почти у каждого пользователя ОС Linux и ОС Windows, а я имею в виду именно тех, у кого, в силу ряда причин, установлены обе системы, время от времени возникал вопрос: «А нельзя ли, черт возьми, придумать способ, с помощью которого можно было бы устанавливать эти системы в произвольном порядке? Без порчи настроек загрузчика?» Ведь если ставим сначала Windows а потом Linux всё хорошо — линуксовый загрузчик (например GRUB) обычно подхватывает bootmgr. Если ставить в обратном порядке то увы. Даже с использованием GPT + EFI. В случае с EFI нет опасности перезаписи MBR, зато таки есть один нюанс, который лично мне не нравится — установщик Windows в режиме EFI хоть и не перезаписывает сектора диска своим кодом, но зато переопределяет NVRAM, подсовывая туда путь к своему загрузчику. Так что функционал GBUB всё равно приходится восстанавливать. В настройках штатного установщика нет опций для кастомизации процесса установки загрузчика. А что если… не использовать стандартный установщик?! Ну, или почти не использовать…

И такой способ есть. И основан он на технологии установки Windows, которую мы имеем в её дистрибутивах начиная с «семерки». Способ работает для случая Windows версий 7/8/8.1/10, как в случае с MBR + BIOS системы, так в случае с EFI + GPT. Установить систему можно как в раздел HDD, так и на VHD. При этом функционал установщика нужен нам в общем-то для запуска программы настройки BCD-хранилища конфигурации загрузчика. Вместо установочного диска можно использовать загрузочный носитель на основе WinPE. Если бы утилитам bcdedit.exe и BootICE была *nix альтернатива, весь процесс развертывания системы можно было бы вообще выполнить в среде Linux.

Предположим у вас имеется компьютер, с установленным на HDD загрузчиком GRUB2 и свободным разделом, отформатированном в NTFS. Устанавливать будем Windows 7 Ultimate SP1. Для этого потребуются:

  1. Установочный диск с виндой
  2. Чистая флешка объемом >= 4 Gb
  3. Архиватор 7-zip соответствующей разрядности
  4. Утилита BootICE, желательна, но совершенно не обязательна, можно обойтись и bcdedit.exe, входящим в дистрибутив винды

Дело в том, что семерка не хочет устанавливаться в EFI-режиме с DVD. Вот не хочет и всё. К тому же, на установочном носителе нам понадобятся дополнительные утилиты, которые туда надо поместить, а в случае с флешкой это несколько проще, чем в случае с DVD.

Монтируем установочный образ с виндой, допустим он лежит у нас в /home/$USER/install с именем win7-setup.iso

$ mkdir ~/iso $ sudo mount -t udf ~/install/win7-setup.iso ~/iso

Вставляем флешку в USB-порт. Допустим, она получила имя устройства /dev/sdb. Выполним её разметку в формате MBR

$ sudo fdisk /dev/sdb

Создем на флешке один единственный раздел. После чего форматируем её в FAT$ sudo mkfs.vfat /dev/sdb1

Копируем содержимое дистрибутива винды на флешку$ mkdir /tmp/flash $ sudo mount /dev/sdb1 /tmp/flash -o uid=1000,gid=100,fmask=113,dmask=002 $ cp -rv ~/iso/* /tmp/flash/

Скопируем конфиги EFI-загрузчика на уровень выше

$ cp -rv ~/tmp/flash/efi/microsoft/* ~/tmp/flash/efi/

Теперь нам нужен EFI-загрузчик винды. Его придется выцарапать из дистрибутива. Это легко сделать с помощью архиватора 7-zip, который имеется в репозитории extra/p7zip. Все содержимое дистрибутива винды сжато в образ wim-формата находится на установочном DVD в файле source/install.wim. Обычно этот образ имеет следующую структуру

В каталогах с именами в виде цифр 1-4 находятся разные редакции винды. Чтобы выбрать нужную надо посмотреть внутрь файла с именем [1].xml. Распакуем его в /tmp

$ cd /tmp $ 7z e ~/iso/sources/install.wim \[1\].xml

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

где нода EDITIONID указывает на редакцию. Параметр INDEX — как раз номер каталога, в котором валяется нужная редакция. Итак, мне нужна Ultimate, а это индекс 4. Соответсвенно выковыриваем загрузчик оттуда

$ 7z e ~/iso/sources/install.wim 4/Windows/Boot/EFI/bootmgfw.efi

Оки, теперь перенесем полученный файл на флешку

$ mv bootmgfwm.efi /tmp/flash/efi/boot/bootx64.efi

Порядок, теперь у нас в наличии загрузочная флешка для установки винды. Теперь добавим на неё необходимые для установки утилиты — виндозную версию архиватора 7-zip и утилиту BootICE. Архиватор качаем с официального сайта и распаковываем на флешку в каталог utils

$ mkdir -p /tmp/flash/utils/7-Zip/ $ cd /tmp/flash/utils/7-Zip/ $ 7z x ~/downloads/7z1602-x64.exe

Туда же помещаем и bootice

$ cp ~/install/BOOTICEx64.exe /tmp/flash/utils

Уф, всё, отмонтируем флешку$ cd ~ $ sudo umount /tmp/flash/

Перезагружаемся. Если у вас система с EFI и съемные диски стоят в приоритете загрузки, то компьютер загрузится в установку винды автоматом. Если же появилось таки меню GRUB, ничего страшного, жмем «С» и в консоли набиваем команду exit. Вас вывалит в меню EFI, где выбираем загрузку с флешки. Если же ваша система с BIOS, то тут чуть сложнее, ибо мы не стали заморачиваться с настройкой MBR на флешке. Тогда в консоли GRUB даем команду ls — появится список всех дисков и разделов. Находим нашу флешку, она отобразится в виде (hdX, msdosY), где X, Y — номер диска и раздела соответственно. Теперь вбиваем в консоли команды

grub> set root=hdX,Y grub> ntldr /bootmgr grub> boot

Начнется загрузка установщика винды. Он то загрузится, но нам он и не нужен — мы всё будем делать руками. Чтобы стало понятно, что к чему, придется рассмотреть некоторую теорию

Начиная с семерки установка Windows заключается в следующих этапах

  1. Разметка диска в соответствии с архитектурой системы инициализации оборудования. Если BIOS — установщик размечает диск в MBR. При наличии активной EFI — разметка будет GPT.
  2. Распаковка образа install.wim в выбранный для установки раздел
  3. Установка загрузчика и перезагрузка
  4. Инициализация оборудования. Ребут
  5. Локализация, ввод ключа, окончание настройки системы

Это стандартный путь. У нас же диск уже размечен. И нам не нужна автоматическая установка загрузчика — мы поставим его вручную. Разметка диска должна удовлетворять следующим требованиям

  • Если система с EFI на диске должен присутствовать FAT-раздел с типом 0xEF. Если у нас уже установлен линукс с EFI-загрузчиком, то таковой раздел уже имеется
  • Если система с BIOS, то раздел, в котором располагается загрузчик, а это наш NTFS-раздел должен быть активным. Это очень важно! Почему, будет объяснено ниже.

Таким образом, перед распаковкой системы мы должны убедится в том, что перечисленные требования выполнены. После того, как мы распакуем все файл системы и установим загрузчик, система перезагрузиться. После перезагрузки запустится утилита Sysprep, среди прочего настраивающая оборудования и проверяющая конфигурацию системы. Так вот, если в режиме EFI Sysprep не найдет загрузчик и его конфигурацию в EFI-разделе по пути EFI/microsof/boot, а в системе с BIOS каталог \Boot и bootmgr будут лежать в неактивном разделе, то Sysprep завершится с ошибкой sysprep generalize error, а в лог, расположенный по адресу \Windows\Panther\sysperr.log выплюнет что-то похожее на

2015-03-11 16:55:42, Error [0x0e00b3] TOOL Sysprep_Specialize_Bcd: There was an error opening the system store. Status=[0xC0000098] 2015-03-11 16:55:42, Error [0x0f0082] SYSPRP LaunchDll:Failure occurred while executing 'c:\Windows\System32\spbcd.dll,Sysprep_Specialize_Bcd', returned error code 1006 2015-03-11 16:55:42, Error [0x060435] IBS Callback_Specialize: An error occurred while either deciding if we need to specialize or while specializing; dwRet = 0x3ee

и никакие танцы с бубном нам уже не помогут. Винда требует, чтобы загручик лежал в загрузочном разделе и точка. В случае с BIOS просто делаем активным раздел NTFS в котором лежит винда и туда же кладем и загрузчик. Грузится будем всё равно с помощью GRUB, а ему все равно, какой раздел будет активным. В случае с EFI загрузчик придется положить рядом с GRUB в EFI-разделе.

Итак, определимся, куда мы хотим ставить винду. Можно поставить в NTFS-раздел, а можно и в VHD-диск. Это уж как вам хочется. Я буду показывать процесс на примере с виртуальной машиной EFI, имеющей следующую разметку

The protective MBR's 0xEE partition is oversized! Auto-repairing.

Partition table scan: MBR: protective BSD: not present APM: not present GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p Disk /dev/loop1: 104857600 sectors, 50.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 0D217C93-6699-435A-9BBB-61DFAA6F30B7 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 104857566 Partitions will be aligned on 2048-sector boundaries Total free space is 4029 sectors (2.0 MiB)

Number Start (sector) End (sector) Size Code Name 1 2048 206847 100.0 MiB EF00 EFI system partition 2 206848 104855551 49.9 GiB 0700 Basic data partition

На этом диске нет линукса, установлен только GRUB в раздел с EFI. Если мы ставим систему непосредственно в NTFS-раздел, то загружаемся с флешки, дожидаемся запуска программы установки и жмем Shift + F10, чтобы вызвать консоль. Запускаем утилиту diskpart и смотрим список подключенных томов

X:\sources> diskpart DISKPART> list vol

Видим, что флешка (объемом 8 Гб) подключена как диск C:, а раздел для установки вовсе не смонтирован. Непорядок. Делаем так

DISKPART> sel vol 3 DISKPART> remove DISKPART> assign letter=E DISKPART> sel vol 1 DISKPART> assign letter=C DISKPART> list vol DISKPART> sel vol 2 DISKPART> assign letter=F

Вот теперь порядок, диск на который будем ставить винду стал диском C:, флешка — диском E:, а EFI-раздел — диском F:

Если же мы хотим поставить систему на VHD, то делаем так

DISKPART> sel vol 3 DISKPART> remove DISKPART> assign letter=E DISKPART> sel vol 1 DISKPART> assign letter=G DISKPART> exit

Для порядка создаем каталог с образамиX:\sources> md G:\vhd X:\sources> diskpart

Создаем виртуальный диск, создаем на нем разметку GPT и раздел NTFS и монтируем его к C:

DISKPART> create vdisk file="G:\vhd\win7.vhd" maximum=25600 type=fixed DISKPART> attach vdisk DISKPART> clean DISKPART> convert gpt DISKPART> create part primary DISKPART> format fs=ntfs quick DISKPART> assign letter=C

EFI-раздел монтируем к F:

DISKPART> sel vol 2 DISKPART> assign letter=F

Получаем такую картину

Очень важно! Убеждаемся в том, что EFI-раздел отформатирован именно в FAT, а не в FAT32. Иначе Sysprep не простит нам этой ошибки. Если на компе уже есть линукс, то настройки будут верны.

Теперь распаковываем дистрибутив на диск C:

X:\sources> E: E:\> utils\7-Zip\7zFM.exe

Откроется GUI архиватора 7-zip. В нем открываем каталог E:\sources, находим там файл install.wim

Правой кнопкой на этом файле вызываем контектстное меню и переходим по 7-zip -> Открыть архив. Появится содержимое образа.

Лезем в папку 4 — там лежит Ultimate

Выделяем всё Ctrl + A и жмем кнопку «Извлечь». Появится окно, где нам предложат указать путь распаковки

Указываем корень диска C: и жмем ОК.

Ну и теперь, как говорится: «Откиньтесь на спинку кресла и...»

Итак, после некоторого время ожидания распаковка окончена. И вот тут, вот в этом месте винда обчно делает бяку, а именно портит MBR или перенастраивает NVRAM. Но мы не дадим ей этого сделать — мы установим загрузчик вручную.

В случае с EFI, переходим на раздел EFI, смонтированный к F: и создаем необходимые пути и копируем файлы загрузчика

E:\> F: F:\> mkdir EFI\microsoft\boot F:\> xcopy C:\Windows\Boot\EFI\* F:\EFI\microsoft\boot /s /e F:\> mkdir EFI\microsoft\boot\Fonts F:\> xcopy C:\Windows\Boot\Fonts\* F:\EFI\microsoft\boot\Fonts\ /s /e F:\> copy C:\Windows\System32\config\BCD-Template F:\EFI\microsoft\boot\BCD

Отлично, загрузчик скопирован. Теперь настроим его

F:\> E:\utils\BOOTICEx64.exe

Открываем файл F:\EFI\Microsoft\Boot\BCD. В случае установки на раздел, его параметры задаются так

Если же мы устанавливали систему на VHD, то настройки будут такими

Важно! Имя вторичного загрузчика для EFI-системы winload.efi, для BIOS-системы — winload.exe.

В случае, если мы устанавливаем BIOS-систему установка загрузчика будет выглядеть так

F:\> mkdir C:\Boot F:\> xcopy C:\Windows\Boot\PCAT\* C:\Boot /s /e F:\> mkdir C:\Boot\Fonts F:\> xcopy C:\Windows\Boot\Fonts\* C:\Boot\Fonts /s /e F:\> copy C:\Boot\bootmgr C:\bootmgr F:\> copy C:\Windows\System32\config\BCD-Template C:\Boot\BCD

Важно! Раздел, смонтированный к C: (там где размещен загрузчик) обязан быть активным! Убедитесь в этом перед перезагрузкой!

Настройку выполняем так же точно, используя BootICE.

Ну, вроде все. Закрываем все окна и идем в ребут. Флешку можно вытащить из компа.

GRUB у нас еще не настроен пункта для винды в меню нет. Как только появится меню GRUB жмем «C». В консоли набираем

grub> set root=hdX,Y grub> chainloader /EFI/Microsoft/Boot/bootmgfw.efi grub> boot

X, Y — соответственно диск и раздел, где лежит загрузчик. Это в случае EFI. В случае с BIOS делаем так

grub> set root=hdX,Y grub> ntldr /bootmgr grub> boot

X, Y — диск и раздел с NTFS. Там где распакована винда и лежит её загрузчик.

В режиме EFI вместо логотипа винды я увидел черный экран, так как не нашел в дистрибутиве билиотеки bootres.dll, которую надо поместить в папку EFI\Mictosoft\Boot\Resourses. В случае с BIOS всё в порядке — знакомая эмблема «семерки». А потом в обоих случаях увидим это

Это работает Sysprep. На 57% моргнет экран — настраивается видяха. И если мы все сделали верно, то надпись «Применение параметров системы» повисит довольно долго, потом система сообщит, что установка будет продолжена после перезагрузки. Если мы где-то напортачили с установкой загрузчика — неправильный EFI раздел или неактивный NTFS, то тогда будет ошибка :( Но мы молодцы и у нас все получится, и после очередной перезагрузки мы увидим это

а потом, наконец вот это

Дальше все как при обычной, штатной установке.

Обратили внимание на то, что каждый раз мы грузим систему из консоли GRUB руками. Это очень хорошо — значит ни MBR ни NVRAM не перезаписаны коварным майкрософтом. Настало время грузится в арч и добавить в меню GRUB новый пункт

menuentry 'Windows 7 Ultimate SP1 (EFI)' {

set root=hdX,Y chainloader /EFI/Microsoft/Boot/bootmgfw.efi }

в случае EFI. Или

menuentry 'Windows 7 Ultimate SP1' {

set root=hdX,Y ntldr /bootmgr }

в случае BIOS. Применяем настройки GRUB и перезагружаемся и видем систему в пункте меню загрузки

после выбора которого получаем загруженную Windows

Упреждая гнев профессиональных win-админов, скажу сразу — я знаю о DISM. Именно информация об этой системе и привела меня к описанному решению. Цель была одна — выяснить сколько нужно возможностей собственно Windows для установки Windows.

Оказалось вот что — для установки Windows её среда необходима только для одного — настройки BCD-хранилища. Всё. Остальное можно сделать из среды любой другой операционной системы.

Если написать аналог bcdedit.exe под Linux, то установить Windows можно будет с линуксового Live-носителя.

habr.com