Наверняка практически у каждого пользователя ОС Linux и ОС Windows, а я имею в виду именно тех, у кого по ряду причин установлены обе системы, время от времени возникал вопрос: «Нельзя ли, блин, придумать с помощью какого способа кто мог устанавливать эти системы в любом порядке? Не повреждая настройки загрузчика? Ведь если мы сначала ставим Windows, а потом Linux, то все нормально — загрузчик 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. Если бы существовала альтернатива *nix утилитам bcdedit.exe и BootICE, весь процесс развертывания системы можно было бы выполнить в среде Linux. Предположим, у вас есть компьютер с установленным на жестком диске загрузчиком GRUB2 и свободным разделом, отформатированным в NTFS. Мы установим Windows 7 Ultimate SP1. Для этого вам понадобится:
- Установочный диск с Windows
- Пустая флешка емкостью > = 4 Гб
- Архиватор 7-молния соответствующая разрядность
- Утилита BootICE желательна, но вовсе не обязательна; можно обойтись bcdedit.exe, входящим в дистрибутив Windows
Дело в том, что семерка не хочет устанавливаться в режиме EFI с DVD. Это все, чего он не хочет. Кроме того, на установочном носителе нам потребуются дополнительные утилиты, которые нужно туда поместить, причем в случае с флешкой это несколько проще, чем в случае с DVD.
Монтируем установочный образ с виндой, допустим он у нас /home/$USER/установить С именем win7-setup.iso $ mkdir ~/iso
$ sudo mount -t udf ~/install/win7-setup.iso ~/iso
Вставьте флешку в USB-порт. Допустим, она получила имя устройства /dev/СДБ .
Давайте разметим это в формате MBR. $ sudo fdisk /dev/sdb
Давайте создадим один единственный раздел на флешке.
Потом форматируем в FAT $ sudo mkfs.vfat /dev/sdb1
Копирование содержимого дистрибутива Windows на флэшку $ 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 Windows. Его придется удалить из раздачи.
Это легко сделать с помощью архиватора 7-zip, который доступен в репозитории.
экстра/p7zip .
Все содержимое дистрибутива Windows сжимается в образ формата wim, расположенный на установочном DVD в файле источник/install.wim .
Обычно это изображение имеет следующую структуру
Каталоги с названиями в виде цифр 1-4 содержат разные редакции Windows. Чтобы выбрать тот, который вам нужен, вам нужно заглянуть внутрь файла с именем [1].
xml. Давайте распакуем его в /tmp $ cd /tmp
$ 7z e ~/iso/sources/install.wim \[1\].
xml
и давайте посмотрим в каком-нибудь браузере, потому что в текстовом редакторе это выглядит ужасно, а специального XML-редактора у меня не было.
Каждая редакция Windows описывается структурой типа
где находится узел ИДЕНТИФИКАТОР ИЗДАНИЯ указывает редактор.
Параметр ИНДЕКС - просто каталожный номер, в котором завалялось нужное издание.
Итак, мне нужен Ultimate, а это индекс 4. Соответственно выбираем оттуда загрузчик $ 7z e ~/iso/sources/install.wim 4/Windows/Boot/EFI/bootmgfw.efi
Ок, теперь перенесем полученный файл на флэшку $ mv bootmgfwm.efi /tmp/flash/efi/boot/bootx64.efi
Хорошо, теперь у нас есть загрузочная флешка для установки Windows. Теперь добавим в него необходимые для установки утилиты — Windows-версию архиватора 7-zip и утилиту BootICE. Скачайте архиватор с официального сайта и распакуйте его на флешку в директорию utils. $ mkdir -p /tmp/flash/utils/7-Zip/
$ cd /tmp/flash/utils/7-Zip/
$ 7z x ~/downloads/7z1602-x64.exe
Туда же мы положили ботинок $ cp ~/install/BOOTICEx64.exe /tmp/flash/utils
Уф, все, давайте монтировать флешку.
$ cd ~
$ sudo umount /tmp/flash/
Давайте перезагрузимся.
Если у вас система с EFI и съемные диски являются приоритетом загрузки, то компьютер автоматически загрузится в установку Windows. Если появилось меню GRUB, все в порядке, нажмите «C» и введите в консоли команду выхода.
Вас кинет в меню EFI, где выбираем загрузку с флешки.
Если в вашей системе есть биос, то тут немного сложнее, поскольку настройкой MBR на флешке мы не заморачивались.
Затем в консоли GRUB вводим команду ls — появится список всех дисков и разделов.
Находим нашу флешку, она будет отображаться в виде (hdX, msdosY), где X, Y — номера диска и раздела соответственно.
Теперь вводим команды в консоль grub> set root=hdX,Y
grub> ntldr /bootmgr
grub> boot
Установщик Windows начнет загрузку.
Он загрузится, но нам это не нужно — сделаем все вручную.
Чтобы было понятно, что к чему, нам придется рассмотреть некоторую теорию.
2. О развертывании Windows из WIM-образа и капризности Sysprep Начиная с Windows 7, установка Windows состоит из следующих шагов.
- Разбиение диска на разделы в соответствии с архитектурой системы инициализации оборудования.
Если это BIOS, то установщик разметит диск в MBR. Если EFI активен, разметка будет GPT.
- Распаковка образа install.wim в выбранный для установки раздел
- Установка загрузчика и перезагрузка
- Инициализация оборудования.
Перезагрузить
- Локализация, ввод ключа, завершение настройки системы
Наш диск уже размечен.
И автоматическая установка загрузчика нам не нужна – мы установим его вручную.
Разметка диска должна соответствовать следующим требованиям
- Если система с EFI, на диске должен быть раздел FAT с типом 0xEF. Если у нас уже установлен Linux с загрузчиком EFI, то такой раздел уже существует.
- Если система с биосом, то раздел, в котором находится загрузчик, и есть наш NTFS-раздел должен быть активным .
Это очень важно! Почему будет объяснено ниже.
После того, как мы распакуем все системные файлы и установим загрузчик, система перезагрузится.
После перезагрузки запустится утилита Sysprep, которая, помимо прочего, настраивает оборудование и проверяет конфигурацию системы.
Итак, если в режиме EFI Sysprep не находит загрузчик и его конфигурацию в разделе EFI по пути EFI/microsof/boot, а в системе с BIOS каталог \Boot и bootmgr находится в неактивном разделе, то Sysprep завершится неудачно.
с ошибкой sysprep генерализовать ошибку, и в журнале, расположенном в \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
и никакие танцы с бубном нам не помогут. Windows требует, чтобы загрузчик находился в загрузочном разделе.
В случае с биосом мы просто делаем активным раздел NTFS, в котором находится Windows, и помещаем туда же загрузчик.
Мы по-прежнему будем загружаться с помощью GRUB, и ему не важно, какой раздел будет активным.
В случае EFI загрузчик необходимо разместить рядом с GRUB в разделе EFI. 3. Распаковка системы Итак, давайте определимся, куда мы хотим установить Windows. Вы можете поместить его в раздел 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
На этом диске нет Linux, на EFI-разделе установлен только GRUB. Если ставим систему напрямую в 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
Теперь такой порядок, диск, на который мы будем устанавливать Windows, стал диском 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 не простит нам этой ошибки.
Если на вашем компьютере уже стоит Linux, то настройки будут правильными.
Теперь распакуйте дистрибутив на диск C: X:\sources> E:
E:\> utils\7-Zip\7zFM.exe
Откроется графический интерфейс архиватора 7-zip. В нем откройте каталог E:\sources, найдите там файл install.wim
Щелкните правой кнопкой мыши по этому файлу, чтобы вызвать контекстное меню, и перейдите в 7-zip -> Открыть архив.
Появится содержимое изображения.
Заходим в папку 4 - там Ultimate
Выделяем все Ctrl+A и нажимаем кнопку «Извлечь».
Появится окно с просьбой указать путь распаковки.
Укажите корень диска C: и нажмите «ОК».
Ну а теперь, как говорится: «Откиньтесь назад и…»
4. Установка и настройка загрузчика
Итак, после некоторого ожидания, распаковка закончена.
И вот в этом месте Windows обычно делает что-то плохое, а именно портит 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.
Ну, кажется, это все.
Закройте все окна и перейдите к перезагрузке.
Флешку можно вынуть из компьютера.
5. Скрестим пальцы и вознесем молитвы к тебе, о Великий и Ужасный Сиспреп.
! Мы еще не настроили GRUB как пункт меню для Windows. Как только появится меню GRUB, нажмите «C».
В консоли набираем grub> set root=hdX,Y
grub> chainloader /EFI/Microsoft/Boot/bootmgfw.efi
grub> boot
X, Y — соответственно диск и раздел, где находится загрузчик.
Это касается EFI. В случае с биосом делаем так grub> set root=hdX,Y
grub> ntldr /bootmgr
grub> boot
X, Y — диск и раздел с NTFS. Где распакована Windows и находится ее загрузчик.
В режиме EFI вместо логотипа Windows я увидел черный экран, так как не нашел в раздаче библиотеки bootres.dll, которую следует поместить в папку EFI\Mictosoft\Boot\Resources. В случае с биосом все в порядке — знакомый логотип «семерки».
И тогда в обоих случаях мы увидим это
Сиспреп работает. Экран моргает на 57% - идет настройка видеосистемы.
И если мы все сделали правильно, то довольно долго будет висеть сообщение «Применение системных настроек», затем система сообщит, что установка продолжится после перезагрузки.
Если мы где-то накосячили с установкой загрузчика - неправильный раздел EFI или неактивный NTFS, то будет ошибка :( Но мы молодцы и у нас все получится, и после следующей перезагрузки мы это увидим
и наконец это
Дальше все так же, как и при обычной, стандартной установке.
6. Настройка GRUB Мы заметили это каждый раз, когда загружаем систему из консоли GRUB вручную.
Это очень хорошо — значит ни MBR, ни NVRAM не были перезаписаны коварным Microsoft. Пришло время загрузить Arch и добавить новый пункт в меню GRUB. menuentry 'Windows 7 Ultimate SP1 (EFI)' {
set root=hdX,Y
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
в случае ЭФИ.
Или menuentry 'Windows 7 Ultimate SP1' {
set root=hdX,Y
ntldr /bootmgr
}
в случае с биосом.
Применяем настройки GRUB и перезагружаемся и видим систему в пункте меню загрузки
после выбора которого у нас загружается Windows
Заключение
Предвидя гнев профессиональных победителей-администраторов, скажу сразу - я знаю о ДИСМ .
Именно информация об этой системе привела меня к описанному решению.
Цель была только одна — узнать, сколько возможностей самой Windows необходимо для установки Windows. Оказалось, что для установки Windows ее среда нужна только для одного — настройки BCD-хранилища.
Все.
Остальное можно сделать из среды любой другой операционной системы.
Если написать аналог bcdedit.exe для Linux, то можно будет установить Windows с носителя Linux Live. Теги: #Системное администрирование #BIOS #efi #GPT #mbr #grub2 #VHD #Установка Windows без повреждения GRUB #установка Windows без повреждения mbr #установка Windows без повреждения nvram #bootmgr
-
Что Вы Делаете Со Скучными Проектами?
19 Oct, 24 -
Мобильная Телематика: Классика Или Авангард?
19 Oct, 24 -
Стратегический План На Год
19 Oct, 24 -
Подводные Камни Кэша Appfabric
19 Oct, 24 -
Firefox 3.0 Стал Хуже
19 Oct, 24