Время на прочтение9 мин
Количество просмотров128K
Наверняка почти у каждого пользователя ОС 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. Для этого потребуются:
- Установочный диск с виндой
- Чистая флешка объемом >= 4 Gb
- Архиватор 7-zip соответствующей разрядности
- Утилита BootICE, желательна, но совершенно не обязательна, можно обойтись и bcdedit.exe, входящим в дистрибутив винды
1. Создаем загрузочную флешку
Дело в том, что семерка не хочет устанавливаться в 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
Начнется загрузка установщика винды. Он то загрузится, но нам он и не нужен — мы всё будем делать руками. Чтобы стало понятно, что к чему, придется рассмотреть некоторую теорию
2. О развертывании Windows из WIM-образа и капризном нраве Sysprep
Начиная с семерки установка Windows заключается в следующих этапах
- Разметка диска в соответствии с архитектурой системы инициализации оборудования. Если BIOS — установщик размечает диск в MBR. При наличии активной EFI — разметка будет GPT.
- Распаковка образа install.wim в выбранный для установки раздел
- Установка загрузчика и перезагрузка
- Инициализация оборудования. Ребут
- Локализация, ввод ключа, окончание настройки системы
Это стандартный путь. У нас же диск уже размечен. И нам не нужна автоматическая установка загрузчика — мы поставим его вручную. Разметка диска должна удовлетворять следующим требованиям
- Если система с 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-разделе.
3. Распаковка системы
Итак, определимся, куда мы хотим ставить винду. Можно поставить в 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: и жмем ОК.
Ну и теперь, как говорится: «Откиньтесь на спинку кресла и…»
4. Установка и настройка загрузчика
Итак, после некоторого время ожидания распаковка окончена. И вот тут, вот в этом месте винда обчно делает бяку, а именно портит 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. Скрестим пальцы да вознесем молитвы тебе, о Великий и Ужасный Sysprep…!
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, то тогда будет ошибка Но мы молодцы и у нас все получится, и после очередной перезагрузки мы увидим это
а потом, наконец вот это
Дальше все как при обычной, штатной установке.
6. Настраиваем GRUB
Обратили внимание на то, что каждый раз мы грузим систему из консоли 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-носителя.
Иногда бывает ситуация, когда есть несколько накопителей с установленными операционными системами. Одна из них, допустим, Linux, которая установлена на GPT раздел и, соответственно, загружается в UEFI режиме. И есть Windows, но установленная на диск с MBR. Это начальные условия. Теперь можно поговорить про проблему загрузки Windows из grub, которая заключается в том, что при установке Linux, не добавляется опция загрузки Windows в меню grub.
По разным источникам в интернете было выяснено, что загрузчик может загружать только те системы, которые находятся в том же режиме, что и сам загрузчик. Но при этом legacy загрузчик не сможет загрузить UEFI систему, потому что о ней он естественно не знает.
Для того, чтобы UEFI загрузчик смог загрузить legacy систему, в legacy системе нужно сформировать загрузочную конфигурацию. В Windows это делается так
bcdboot C:\Windows /s C: /f uefi
, где /s — параметр, определяющий букву тома, назначенную целевому системному разделу, в который копируются файлы среды загрузки. По умолчанию используется системный раздел, который определяется микропрограммой,
/f uefi — в сочетании с командой /s, это указание типа встроенного ПО целевого системного раздела.
Команда создаст EFI папку на диске C: и поместит туда файлы, необходимые для успешного чтения UEFI загрузчиком
Теперь осталось добавить пункт меню в grub. Раз через os-prober это не получается, то пишем в файл /etc/grub.d/40_custom следующую конфигурацию:
menuentry "Windows 10" --class windows --class os {
insmod ntfs
insmod chain
set root='hd0,2'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
где «set root=’hd0,2′» — выбор раздела на диске с Windows
chainloader — грузит загрузчик из выбранного раздела, а уже он будет грузить legacy систему.
После этого в списке выбора систем появится пункт про Windows 10 и при выборе этого пункта загрузиться система.
Adding Windows to GRUB
If you’re dual-booting Windows and Linux, you’ll need to use GRUB to select which operating system to boot into. By default, GRUB will only list the Linux kernel, but you can easily add Windows to GRUB so that you can choose between the two operating systems at boot time.
Adding Windows to GRUB is a relatively simple process, but there are a few things you need to know before you get started. In this article, I’ll walk you through the steps of adding Windows to GRUB, so you can have both operating systems on your computer and easily choose between them at boot time.
What is GRUB?
GRUB is a boot loader that is used to load the operating system kernel. When you turn on your computer, the BIOS will look for a boot loader to load the operating system. If GRUB is installed, it will be loaded and will display a menu of operating systems that you can choose to boot into.
How to add Windows to GRUB
To add Windows to GRUB, you’ll need to:
1. Find the Windows installation media.
2. Boot from the Windows installation media.
3. Select Install now.
4. At the Where do you want to install Windows? screen, select Custom.
5. Select the Drive 0 Partition 1 (or whichever partition you installed Windows to) and click Format.
6. Click Next.
7. Click Install.
8. When the installation is complete, reboot your computer.
Once your computer has rebooted, you should see the GRUB menu. Use the arrow keys to select Windows and press Enter to boot into Windows.
Adding Windows to GRUB is a relatively simple process, but it’s important to follow the steps carefully to avoid any problems. By following the steps in this article, you can have both Windows and Linux on your computer and easily choose between them at boot time.
Step | Instructions | Notes |
---|---|---|
1 | Boot into the live environment of your Linux distribution. | |
2 | Open a terminal window. | |
3 | Install the grub-efi package. | This package provides the GRUB bootloader for EFI systems. |
4 | Create a new entry for Windows in the GRUB configuration file. | The following is an example of a GRUB configuration entry for Windows:
menuentry “Windows 10” { You can find more information about creating GRUB configuration entries in the GRUB documentation. |
5 | Reboot your system. | When your system boots, you should see the GRUB menu. Use the arrow keys to select the Windows entry and press Enter to boot into Windows. |
GRUB is a boot loader that can be used to select the operating system that will be booted when a computer is turned on. GRUB can be used to boot multiple operating systems from a single hard drive, or to boot from a USB drive or CD-ROM. GRUB is configured using a text file called `/etc/grub.conf`.
What is GRUB?
GRUB is a free and open-source boot loader that can be used to select the operating system that will be booted when a computer is turned on. GRUB can be used to boot multiple operating systems from a single hard drive, or to boot from a USB drive or CD-ROM. GRUB is configured using a text file called `/etc/grub.conf`.
GRUB was originally developed by Erich Stefan Boleyn in 1995. It was originally called GRand Unified Bootloader, but the name was later shortened to GRUB. GRUB is now maintained by a team of developers under the auspices of the GNU Project.
GRUB is a very versatile boot loader. It can be used to boot a wide variety of operating systems, including Linux, Windows, macOS, and FreeBSD. GRUB can also be used to boot from a USB drive or CD-ROM.
GRUB is configured using a text file called `/etc/grub.conf`. This file contains a list of all the operating systems that GRUB can boot, as well as the options that are used to boot each operating system.
How to add Windows to GRUB
To add Windows to GRUB, you will need to know the location of the Windows boot loader. The Windows boot loader is located in the `\boot\bcd` directory.
To add Windows to GRUB, you will need to edit the `/etc/grub.conf` file. You can do this using any text editor.
To add Windows to GRUB, you will need to add a new entry to the `/etc/grub.conf` file. The new entry should look something like this:
menuentry “Windows 10” {
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
Once you have added the new entry to the `/etc/grub.conf` file, you will need to save the file and then reboot your computer.
When your computer reboots, you will be presented with a GRUB menu. You can use the arrow keys to select the Windows entry and then press Enter to boot into Windows.
GRUB is a powerful and versatile boot loader that can be used to boot multiple operating systems from a single hard drive. Adding Windows to GRUB is a relatively simple process, and it can be done by following the steps outlined in this article.
Additional Resources
- [GRUB documentation](https://www.gnu.org/software/grub/manual/grub.html)
- [GRUB tutorial](https://www.howtogeek.com/howto/13055/how-to-add-windows-to-the-grub-boot-loader/)
- [GRUB FAQ](https://www.gnu.org/software/grub/faq/)
Adding Windows to GRUB
GRUB is a boot loader that can be used to select the operating system that will be booted when a computer is turned on. By default, GRUB only lists Linux operating systems, but it can be configured to also list Windows operating systems.
To add Windows to GRUB, you will need to:
1. Install the GRUB boot loader on your Windows system.
2. Create a GRUB configuration file that lists the Windows operating system.
3. Update the GRUB configuration file.
Installing the GRUB boot loader on Windows
The GRUB boot loader can be installed on Windows using the GRUB2Win32 tool. To install GRUB2Win32, follow these steps:
1. Download the GRUB2Win32 tool from the GRUB2Win32 website.
2. Extract the downloaded file to a location on your Windows system.
3. Open the GRUB2Win32 tool.
4. Click the “Install” button.
The GRUB boot loader will be installed on your Windows system.
Creating a GRUB configuration file
The GRUB configuration file is a text file that lists the operating systems that GRUB will boot. To create a GRUB configuration file, follow these steps:
1. Open a text editor.
2. Type the following code into the text editor:
menuentry “Windows” {
insmod part_msdos
insmod ext2
set root=(hd0,gpt1)
search –no-floppy –fs-uuid –set=root 55AA55AA-55AA-55AA-55AA-55AA55AA55AA
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
The code above lists the Windows operating system and specifies the location of the Windows boot loader.
Updating the GRUB configuration file
Once you have created the GRUB configuration file, you need to update the GRUB configuration file. To update the GRUB configuration file, follow these steps:
1. Open a terminal window.
2. Change to the directory where the GRUB configuration file is located.
3. Run the following command:
grub-mkconfig -o /boot/grub/grub.cfg
The GRUB configuration file will be updated.
Booting Windows from GRUB
Once you have added Windows to GRUB, you can boot Windows from GRUB by following these steps:
1. Turn on your computer.
2. Press the F12 key or the ESC key to open the boot menu.
3. Select the Windows entry from the boot menu.
Windows will be booted from GRUB.
Troubleshooting GRUB problems
If you are having problems with GRUB, there are a few things you can check:
- Make sure that the Windows boot loader is located in the correct directory. The Windows boot loader is usually located in the `\EFI\Microsoft\Boot` directory.
- Make sure that the `/etc/grub.conf` file is correct. The `/etc/grub.conf` file contains the configuration information for GRUB. You can use the `grub-editenv` command to view the `/etc/grub.conf` file.
- Try reinstalling GRUB. You can reinstall GRUB using the `grub-install` command.
Tips for using GRUB
GRUB can be used to do more than just select the operating system that will be booted. You can also use GRUB to:
- Change the boot order of your operating systems.
- Boot into a recovery environment.
- Create a bootable USB drive or CD-ROM.
To change the boot order of your operating systems, you can use the `set default` command. To boot into a recovery environment, you can use the `recovery` command. To create a bootable USB drive or CD-ROM, you can use the `grub-mkrescue` command.
GRUB is a powerful tool that can be used to manage the boot process on your computer. By adding Windows to GRUB, you can easily boot Windows from your Linux system.
Q: How do I add Windows to GRUB?
A: To add Windows to GRUB, you will need to:
1. Boot into the Linux operating system.
2. Open the terminal.
3. Type the following command:
sudo grub-install –target=i386-pc –recheck /dev/sda
This will install GRUB to the master boot record (MBR) of the hard drive where Windows is installed.
4. Reboot the system.
5. When the GRUB boot menu appears, use the arrow keys to select the Windows operating system and press Enter.
Q: What if I get an error message when I try to install GRUB?
A: If you get an error message when you try to install GRUB, it may be because the Windows operating system is not installed on the first hard drive. To fix this, you can try the following:
1. Boot into the Linux operating system.
2. Open the terminal.
3. Type the following command:
sudo parted /dev/sda
This will open the parted utility.
4. Use the following commands to move the Windows partition to the first hard drive:
p
1
t
2
n
p
1
5. Press Enter to save the changes.
6. Reboot the system.
7. Try to install GRUB again.
Q: What if I want to remove Windows from GRUB?
A: To remove Windows from GRUB, you will need to:
1. Boot into the Linux operating system.
2. Open the terminal.
3. Type the following command:
sudo grub-editenv list
This will list all of the operating systems that are currently configured in GRUB.
4. Find the entry for Windows and note the name of the kernel file.
5. Type the following command to remove the Windows entry from GRUB:
sudo grub-editenv delete
6. Reboot the system.
Q: What if I want to change the order of the operating systems in GRUB?
A: To change the order of the operating systems in GRUB, you will need to:
1. Boot into the Linux operating system.
2. Open the terminal.
3. Type the following command:
sudo grub-editenv list
This will list all of the operating systems that are currently configured in GRUB.
4. Find the entry for Windows and note the number of the entry.
5. Type the following command to change the order of the Windows entry:
sudo grub-editenv set
6. Reboot the system.
In this tutorial, we have discussed how to add Windows to GRUB. We first discussed the prerequisites for adding Windows to GRUB, then we showed you how to add Windows to GRUB using the terminal. Finally, we showed you how to add Windows to GRUB using a graphical user interface.
We hope that this tutorial has been helpful. If you have any questions, please feel free to leave a comment below.
Author Profile
-
Hatch, established in 2011 by Marcus Greenwood, has evolved significantly over the years. Marcus, a seasoned developer, brought a rich background in developing both B2B and consumer software for a diverse range of organizations, including hedge funds and web agencies.
Originally, Hatch was designed to seamlessly merge content management with social networking. We observed that social functionalities were often an afterthought in CMS-driven websites and set out to change that. Hatch was built to be inherently social, ensuring a fully integrated experience for users.
Now, Hatch embarks on a new chapter. While our past was rooted in bridging technical gaps and fostering open-source collaboration, our present and future are focused on unraveling mysteries and answering a myriad of questions. We have expanded our horizons to cover an extensive array of topics and inquiries, delving into the unknown and the unexplored.
Latest entries
In this article, Let’s learn how to boot windows from grub rescue screen. Linux is the best platform available on the planet, it offers great customization. A highly customizable platform like Linux offers enormous benefits but has only one downside that it can potentially break your system and you can eventually land up in Linux grub rescue screen. If you are looking to boot Linux from grub rescue you can refer to this article.
Steps for how to boot windows from grub rescue.
Step 1 — Listing Partitions from Grub Rescue:
First, we need to find out our EFI partition or the partition where your boot files are stored. In order to find that we need to see the available partition, so simply execute the ls
command.
ls
Step 2 — Listing EFI Partition from Grub Rescue
In the first step, we have got our directory listing. Now, we need to find the appropriate partitions where our boot files reside. Typically it resides in a partition that is very small in size (typically less than 1GB) and having an EFI/ partition in it. So, In order to find that you can simply execute the ls (hdx,gpty)/
one by one.
Note: You need to replace x with the hard disk number, and y with the partition number.
ls (hdx,gpty)/
For me, the same is found in (hd0,gpt1)
Step 3 — Select the EFI Partition
Since we have found the partition, now we need to select the partition. So simply execute the below command.
set root=(hdx,gpty)
Step 4 — Chainloading the Windows EFI File.
Now, we have selected the partition in which our boot files are present, now we need to execute the command chainloader
for loading a boot file, so we can boot from that.
chainloader /efi/Microsoft/Boot/bootmgfwi.efi
Step 5 — Boot Windows from Grub rescue:
Finally, you are all set to boot windows from grub rescue. Just we need to execute the below command.
boot
Conclusion — Boot windows:
ls
ls (hdx,gpty)/
set root=(hdx,gpty)
chainloader /efi/Microsoft/Boot/bootmgfw.efi
boot
That’s it for this article, If you have any queries or suggestion please write down in comment section below.
Check out our Latest Best Linux Picks
Как вернуть меню выбора ОС после установки Windows рядом с Linux? Рассказываем о двух способах восстановления загрузчика GRUB — для новичков (с утилитой boot-repair) и для продвинутых пользователей (с помощью chroot).
Поставили Windows рядом с Ubuntu, и теперь можете запустить только ОС от Майкрософт? Рассказываем, как восстановить загрузчик GRUB после установки Windows 10 или 11 — вам хватит 20 минут, даже если вы новичок в администрировании VPS.
Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой
Представьте: вы установили Ubuntu, настроили систему, а потом решили поставить Windows рядом. Но после перезагрузки вместо привычного меню GRUB (grand unified bootloader) вы увидите только загрузчик Windows. Это происходит потому, что Windows не дружит с альтернативными загрузчиками: при установке она перезаписывает главную загрузочную запись (MBR) или заменяет файлы в разделе EFI. И если GRUB, стандартный загрузчик для Linux, может работать с несколькими ОС, то загрузчики NTLDR (Windows 11) и Bootmgr (Windows 10) не умеют. Когда вы ставите Windows после Ubuntu, они просто «не видят» ОС, установленную первой.
Что нужно знать перед восстановлением GRUB
Прежде всего разберёмся с базовыми понятиями — это поможет избежать ошибок и сэкономит время.
UEFI или BIOS
Современные компьютеры используют два типа firmware (микропрограммы для управления железом):
- BIOS — это устаревший стандарт, загрузчик записывается в первый сектор диска (mbr);
- UEFI — современная замена BIOS, работает с разделом EFI (fat32), где хранятся файлы загрузчиков в формате .efi.
Чтобы проверить, какой режим на вашем компьютере, зайдите в bios/uefi (нажмите клавишу del, f2 или f12 при запуске). Если в настройках есть пункты Secure Boot, UEFI Mode — значит, у вас используется UEFI.
Или выполните в Linux:
ls /sys/firmware/efi
Если директория существует — система загрузилась через UEFI.
Live USB с Linux
Чтобы восстановить GRUB, понадобится загрузочная флешка с любым дистрибутивом (Ubuntu, Fedora, Mint).
Как создать Live USB:
- Скачайте iso-образ с официального сайта ОС.
- Создайте Live USB с помощью специальных программ:
- Rufus (на Windows) — выберите «GPT для UEFI» или «MBR для BIOS» в зависимости от прошивки вашего компьютера;
- BalenaEtcher (на Linux/Mac).
- Проверьте целостность образа после записи (в некоторых программах есть опция «verify»).
Как восстановить GRUB из-под Windows: два способа
Восстановление через boot-repair (для новичков)
Если вы не хотите работать в терминале, воспользуйтесь утилитой boot-repair. Она автоматизирует 90 % работы.
Шаг 1. Загрузка с Live USB
- Вставьте флешку, перезагрузите компьютер.
- Нажмите клавишу выбора загрузочного устройства (обычно f12, ESC или f8).
- Выберите флешку в меню.
Если у вас UEFI, загружайтесь в режиме UEFI, а не в Legacy! Иначе раздел EFI не будет обнаружен.
Шаг 2. Установка boot-repair
- Откройте терминал в Live-системе.
- Добавьте репозиторий и установите утилиту (далее все команды выполняются в режиме суперпользователя):
add-apt-repository universe # добавляйте репозиторий в Ubuntu до версии 22.04
apt update
apt install -y boot-repair
Шаг 3. Запуск и настройка
- Запустите boot-repair:
boot-repair
- Выберите «recommended repair».
- Следуйте инструкциям на экране: утилита сама определит установленные ОС, восстановит GRUB и обновит конфигурацию.
Если возникли ошибки:
- проверьте подключение к Интернету (boot-repair иногда скачивает дополнительные пакеты);
- убедитесь, что live-система загружена в правильном режиме (uefi/bios).
Ручное восстановление через chroot (для продвинутых пользователей)
Если первый метод не сработал или вы хотите понять процесс изнутри, восстановите GRUB вручную.
Шаг 1. Определение разделов
- Загрузитесь с Live USB.
- Откройте терминал и узнайте список дисков:
fdisk -l
или
lsblk -f
Команда lsblk -f показывает типы файловых систем и точки монтирования.
- Пример вывода lsblk:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs Windows ABCD-1234
├─sda2 ext4 Ubuntu 5678-90AB
└─ sda3 vfat ESP CDEF-1234
Обратите внимание на:
- корневой раздел Linux (ext4, btrfs и т. д.) — нам нужен именно он;
- раздел EFI (vfat) — если система на UEFI;
- раздел подкачки (swap) — не нужен для восстановления.
Шаг 2. Монтирование разделов
- Создайте точку монтирования:
mkdir /mnt/Linux
- Примонтируйте корневой каталог с Ubuntu:
mount /dev/sda2 /mnt/Linux
Для UEFI примонтируйте каталог EFI:
mount /dev/sda3 /mnt/Linux/boot/efi
Если у вас отдельный раздел /boot, монтируйте его:
mount /dev/sdaX /mnt/Linux/boot
Шаг 3. Вход в chroot
Chroot (change root) — это команда, которая изменит видимый корневой каталог, чтобы вы вошли в систему из live-окружения.
- Привяжите системные директории:
mount --bind /dev /mnt/Linux/dev
mount --bind /proc /mnt/Linux/proc
mount --bind /sys /mnt/Linux/sys
- Войдите в среду chroot:
chroot /mnt/Linux
Шаг 4. Установка GRUB
- Если прошивка BIOS (MBR):
grub-install /dev/sda # здесь sda — диск, а не раздел
update-grub
- Если прошивка UEFI (GPT), убедитесь, что пакет grub-efi установлен:
apt install grub-efi-amd64
Перед grub-install нужно обновить загрузочный список в efibootmgr, иначе в некоторых UEFI-системах GRUB не будет загружаться:
efibootmgr -c -d /dev/sda -p 1 -L "GRUB" -l "\EFI\GRUB\grubx64.efi"
Здесь -d /dev/sda — диск, -p 1 — номер EFI-раздела (уточните их с помощью lsblk).
Установите GRUB в раздел EFI:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
- Обновите конфигурацию:
update-grub
- После update-grub в выводе должны появиться строки «found Windows» или «found os probe entries».
Шаг 5. Выход и перезагрузка
- Выйдите из chroot:
sync # запись данных
exit
- Отмонтируйте разделы:
sudo umount -R /mnt/Linux
- Перезагрузите компьютер.
Возможные проблемы и их решение
Даже если вы всё сделали правильно, могут возникнуть проблемы.
GRUB не видит Windows
Причина: os-prober не активирован (утилита для автоматического обнаружения установленных ОС).
Решение. В /etc/default/grub раскомментируйте строку:
GRUB_DISABLE_OS_PROBER=false
Установите os-prober:
apt install os-prober
Обновите загрузчик (update-grub).
Ошибка «grub-install: error: cannot find efi directory»
Причина: неправильно указан путь к разделу EFI.
Решение. Проверьте, примонтирован ли раздел EFI в /boot/efi. Проверьте тип раздела: он должен быть vfat (FAT32).
Загрузчик установился, но система не загружается
Причина: неверный порядок загрузки в uefi/bios или повреждённые файлы GRUB. Также включённый Secure Boot может блокировать работу GRUB.
Решение. Зайдите в настройки UEFI/BIOS и выберите GRUB в качестве первого загрузочного устройства. Отключите Secure Boot в UEFI. Если это не помогло — переустановите GRUB через chroot.
Как избежать проблем в будущем
- Если планируете устанавливать две операционные системы, то сначала установите Windows, потом Linux.
- Создайте резервную копию EFI/MBR.
Для BIOS:
dd if=/dev/sda of=backup.mbr bs=512 count=1
Для UEFI — просто скопируйте содержимое раздела EFI в место для хранения.
- Создайте отдельный раздел EFI для Linux. Это минимизирует конфликты с Windows.
Заключение
Восстановить загрузчик GRUB после установки Windows — задача, которая кажется сложной только на первый взгляд. Даже если вы новичок, boot-repair справится за пару кликов. Для тех, кто хочет глубже разобраться в процессе, подойдёт ручной способ через chroot.
Наши технические специалисты помогут вам определиться с конфигурацией и настроят ваш VPN-сервер под ключ, если это будет необходимо.
Читайте в блоге:
- Как поменять TTL для раздачи Интернета: настройка Default TTL и изменение значения на 64 или 65
- Что такое директория в Linux
- Как сменить владельца папки и изменить права доступа в Linux