Наверняка почти у каждого пользователя ОС 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, а в лог, расположенный по адресу WindowsPanthersysperr.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:WindowsSystem32spbcd.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:vhdwin7.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:> utils7-Zip7zFM.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 EFImicrosoftboot
F:> xcopy C:WindowsBootEFI* F:EFImicrosoftboot /s /e
F:> mkdir EFImicrosoftbootFonts
F:> xcopy C:WindowsBootFonts* F:EFImicrosoftbootFonts /s /e
F:> copy C:WindowsSystem32configBCD-Template F:EFImicrosoftbootBCD
Отлично, загрузчик скопирован. Теперь настроим его
F:> E:utilsBOOTICEx64.exe
Открываем файл F:EFIMicrosoftBootBCD. В случае установки на раздел, его параметры задаются так
Если же мы устанавливали систему на VHD, то настройки будут такими
Важно! Имя вторичного загрузчика для EFI-системы winload.efi, для BIOS-системы — winload.exe.
В случае, если мы устанавливаем BIOS-систему установка загрузчика будет выглядеть так
F:> mkdir C:Boot
F:> xcopy C:WindowsBootPCAT* C:Boot /s /e
F:> mkdir C:BootFonts
F:> xcopy C:WindowsBootFonts* C:BootFonts /s /e
F:> copy C:Bootbootmgr C:bootmgr
F:> copy C:WindowsSystem32configBCD-Template C:BootBCD
Важно! Раздел, смонтированный к 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, которую надо поместить в папку EFIMictosoftBootResourses. В случае с 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-носителя.
Перейти к контенту
После установки OpenSuSe 12.3 на компьютер с Windows 7 из при запуске Linux отсутствовал пункт альтернативной загрузки с диска Windows.
Немного погуглив, нашел решение, как добавить в GRUB2 пункт меню ля загрузки Windows 7.
Моя конфигурация:
/dev/sda1/ — Windows
/dev/sdb4/ — OpenSuse
Для добавления пункта загрузки Windows 7 к меню GRUB2 надо сделать следующее:
1. Чтобы узнать uuid раздела с Windows выполняем команды
ls -la /dev/disk/by-uuid / grep sda1
Получаем: lrwxrwxrwx 1 root root 10 окт 26 20:31 F26A40AF6A407281 -> ../../sda1
где F26A40AF6A407281 и есть искомый uuid.
2. Редактируем файл /etc/grub.d/40_custom и добавляем в него строки
menuentry «Windows 7» {
insmod part_msdos
insmod ntfs
set root='(hd0,1)’
search —no-floppy —fs-uuid —set F26A40AF6A407281
chainloader +1
}
3. После редактирования вышеназванного файла выполняем команду:
grub2-mkconfig -o /boot/grub2/grub.cfg
Перезагружаемся и можем загрузиться в старую Windows 7.
Как добавить пункт загрузки Windows 7 в Grub2 ?
В этом мне помогли вот эти источники:
http://habrahabr.ru/qa/3772
http://ask.fedoraproject.org/question/136/how-to-update-grub2-on-fedora-16
http://ru.wikibooks.org/wiki/Grub_2
Как-то, сидя грустным вечером за компом, мне захотелось поиграть во что-нибудь. Но тут я вспомнил, что после того, как поставил на новый винт свеженькую Fedora 17, я так и не удосужился в загрузчик добавить пунт загрузки для винды. Винда 7 у меня стоит на отдельном жёстком диске, чтобы иногда поиграть. И лишь для этого, бо для остального есть линух и виртуальные машины.
Всё бы ничего, но в новой федоре и загрузчик тоже новый. Поэтому пришлось чуток погуглить. Для начала, нужно узнать обозначение диска, на котором стоит винда. В моём случае, это был диск sdd (4-ый жёсткий диск на компе). Затем, надо узнать номер раздела, с которого грузится винда. Обычно, если винда установлена штатно, то в ней есть так называемый раздел «Зарезервировано системой». В линухе же он у меня имел обозначение sdd1. Нам понадобится узнать uuid этого раздела. Делаем команду:
ls -al /dev/disk/by-uuid
И у себя я вижу вот такой вывод:
.................
lrwxrwxrwx. 1 root root 10 июля 28 21:49 82FE2760FE274BAB -> ../../sdd1
.................
Всё, теперь есть вся нужная информация, чтобы создать дополнительный пункт загрузки в grub2. Находим файл /etc/grub.d/40_custom и в его конец добавляем вот такую конструкцию:
menuentry "Win7" { insmod part_msdos insmod ntfs set root='(hd3,msdos2)' search --no-floppy --fs-uuid --set 82FE2760FE274BAB chainloader +1 }
Где hd3 — это диск sdd (четвёртый). Именно так, бо в грубе исчисление дисков начинается с нуля: hd0, hd1, hd2 и т.д. Ну и uuid сами видите, где нужно было вставить.
После редактирования вышеназванного файла делаем команду:
grub2-mkconfig -o /boot/grub2/grub.cfg
И перезагружаем комп. Загружаемся под виндой и шпилим в игрухи на здоровье!
You have no rights to post comments
- Печать
Страницы: [1] Вниз
Тема: Как в GRUB2 добавить Windows 7? (Прочитано 17649 раз)
0 Пользователей и 1 Гость просматривают эту тему.
alexandr-makukhin
Здравствуйте!
Как самому прописать в GRUB 2 загрузку Семёрки?
У меня по записи Windows 7 (loader) on /dev/sda2 грузится Windows XP.
alexander@alexander-Linux-Kubuntu-1204:~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-32-generic
Found initrd image: /boot/initrd.img-3.2.0-32-generic
Found linux image: /boot/vmlinuz-3.2.0-31-generic
Found initrd image: /boot/initrd.img-3.2.0-31-generic
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
Found Windows 7 (loader) on /dev/sda2
done
Windows 7 установлена на /dev/sda3 UUID: 0C66CFC066CFA8B2
Windows XP установлена на /dev/sdb3 UUID: A8F816ABF8167830
« Последнее редактирование: 14 Октября 2012, 15:44:40 от alexandr-makukhin »
Artif
Если совсем руками вписывать, то начать надо с цитированного выше «/boot/grub/grub.cfg». Сделать копию на флешку, оригинал править руками и перегружаться, _никаких_ grub-update не надо на этом этапе. grub-update затрёт «/boot/grub/grub.cfg».
«/boot/grub/grub.cfg» генерируется скриптами из «/etc/grub.d/». Если в них ошибка, то патчить надо «30_os-prober», оттуда возникает часть конфига с Вендами при update-grub. Но это путь не верный. Правильно прописать собственное нужное в «40_custom». Что прописывать — а должно быть было уже найдено в пробах с «/boot/grub/grub.cfg».
А что, пункт из секции /etc/grub.d/40_custom разве не приводит к загрузке нужного?
« Последнее редактирование: 15 Октября 2012, 21:58:40 от Artif »
alexandr-makukhin
Спасибо,Artif! С Windows разобрался. У них есть свой загрузчик, стартующий после выбора в GRUB 2 строки с Windows и по ней можно выбрать разные версии установленных у меня XP/7/8.
peach
Вопрос, у меня установлено:
Ubuntu 12.04
Windows 7
Windows 8
GRUB сконфигурирован верно, все работает, кроме одно вещи.
Выбирая запуск Windows 7, я получаю фигу, ругается на BOOT/BCD
Выбирая запуск Windows 8, я получаю загрузчик Win8 метро стиле и предлагающий выбрать запуск Win7 или Win8.
Это слегка неудобно, поэтому вопрос? что мне нужно сделать, чтобы при выборе в меню GRUB Win7 стартовал Win7?
Мне дорога к виндовой консоли и утилитам bootrec.exe /fixmbr и bootrec.exe /fixboot ?
« Последнее редактирование: 06 Января 2013, 03:25:36 от peach »
oermolaev
… Это слегка неудобно …
но так и должно быть.
Очередность запуска windows настраивается уже в самой винде. Где это делается в восьмёрке — надо искать на соответствующих форумах
peach
не понимаю, разве я не могу:
— на раздел с Win8 установить загрузчик для Win8 в метро стиле
— на раздел с Win7 установить загрузчик Win7
— на /dev/sda/ — основной загрузчик GRUB, где я выбираю какому ядру/загрузчику передаем управление?
Изначально была установлена Win7 и ее загрузчик, затем на другой раздел Win8 и ее загрузчик затер загрузчик Win7. Затем была установлена Ubuntu 12.04 + Grub который увидел ядро Ubuntu и загрузчик Win8
затем я добавил в файле /etc/grub.d/40_custom
menuentry «Windows 7 (loader) (on /dev/sda1)» —class windows —class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos2)’
search —no-floppy —fs-uuid —set=root 7693F8C528DC7239 ## UUID раздела где стоит Win7
drivemap -s (hd0) ${root}
chainloader +1
}
но, так как Win8 затерла загрузчик Win7, то после выбора этого пункта в GRUB, я получаю сообщение от Windows Boot Manager
« Последнее редактирование: 06 Января 2013, 15:35:35 от peach »
- Печать
Страницы: [1] Вверх
Customizing the /etc/default/grub
file
There are two ways of doing this using editing a grub file. These are described in the Ubuntu Community Documentation Grub2 page
The two ways are:
- Boot which ever operating system you booted last time, the «saved method»
- This is the one I use. It lets me decide which one I going to use and will allow me to reboot into that system, handy when I’m updating.
- Boot a specific operating system by default.
- The answer to your exact question.
Finding the menuentry to set as the new default
To start we need to find out what we are booting or want to boot. Open a terminal with Ctrl+Alt+t and type in
sudo grep menuentry /boot/grub/grub.cfg
user@YourComputer:~$ grep menuentry /boot/grub/grub.cfg
[sudo] password for user:
menuentry 'Ubuntu, with Linux 2.6.35-31-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-31-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-30-generic' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry 'Ubuntu, with Linux 2.6.35-30-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
menuentry "Memory test (memtest86+)" {
menuentry "Memory test (memtest86+, serial console 115200)" {
menuentry "Windows NT/2000/XP (loader) (on /dev/sda1)" {
menuentry "Ubuntu, with Linux 2.6.32-34-generic (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-34-generic (recovery mode) (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-33-generic (on /dev/sdb1)" {
menuentry "Ubuntu, with Linux 2.6.32-33-generic (recovery mode) (on /dev/sdb1)" {
menuentry "Windows Vista (loader) (on /dev/sdc1)" {
You can see that the «saved» method can come in handy when booting multiple operating systems. Save the name of the entry you want e.g. Windows NT/2000/XP (loader) (on /dev/sda1)
, we need it later.
Editing the /etc/default/grub
file
Type in the terminal
sudo nano -B /etc/default/grub
and your password if asked. The nano editor will open.
A. Saved method — In my preferred way, I made the following changes from the standard grub file.
-
I changed the value of
GRUB_DEFAULT
tosaved
:GRUB_DEFAULT=saved
-
I enabled the SAVEDEFAULT functionality by adding the following line:
GRUB_SAVEDEFAULT=true
B. Specific menuentry — In the way you are asking for
-
Change the value of
GRUB_DEFAULT
to the name of the Windows system you want to always boot. The name of the corresponding Grub menuentry can be found as described in the previous section. -
I wanted to have Window XP always set as default at boot, I would set
GRUB_DEFAULT
to"Windows NT/2000/XP (loader) (on /dev/sda1)"
:GRUB_DEFAULT="Windows NT/2000/XP (loader) (on /dev/sda1)"
Note: Some versions of Ubuntu require single quote (‘) vice double quote («).
You could also set GRUB_DEFAULT
to the line number in the menu entry list (with 0 being the first), but when the kernel in Ubuntu is updated grub adds the new kernel to the top of the list, you would have to change the number, since Windows is the last one in the menu entry list. You can see this in my menu entry list.
Update the boot configuration
Now you have to run
sudo update-grub
to update the system generated grub.cfg
file in the /boot/grub/
directory.
user@YourComputer:~$ sudo update-grub
Generating grub.cfg ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-2.6.35-31-generic
Found initrd image: /boot/initrd.img-2.6.35-31-generic
Found linux image: /boot/vmlinuz-2.6.35-30-generic
Found initrd image: /boot/initrd.img-2.6.35-30-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows NT/2000/XP (loader) on /dev/sda1
Found Ubuntu 10.04.3 LTS (10.04) on /dev/sdb1
Found Windows Vista (loader) on /dev/sdc1
done
Addendum
Notes on nano
nano
is especally easy to use in the terminal. Move around with the arrow keys. Type in you addtions, delete the unwanted.
The -B
or --backup
option backs up the previous version of it to the current filename suffixed with a ~
. Very handy in case of the dreaded Fat pfinger effect.
When you are through, Ctrl+o will allow you to save your edits by hitting Enter and Ctrl+x will close. These and other options are shown at the bottom of the terminal screen with the ^
indicating Ctrl.
^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell
Notes about nano, sudoeditor and other editors
Some in the Ubuntu community suggest sudoedit
instead of nano
. I recommend nano
— which is the default sudoedit editor in later distributions of Ubuntu — instead of sudoedit
, because the default can be overridden in non-obvious ways, unless you are an administrator. sudoedit
is safer in that it automatically saves a backup copy of the edited file, but the -B
command line option in nano
does the same thing. nano
is more intuitive than editors like vi
or emacs
, which are very flexible but require learning a lot of commands, shortcuts or different modes.
If you prefer not to use the nano
editor and prefer the Gnome Text Editor, instead of sudo nano -B
use gksu gedit
. I generally do this for large files, and /etc/default/grub
could easily be considered a large file. Thus type in gksu gedit /etc/default/grub
instead of sudo nano -B /etc/default/grub
. Note that the Gnome text editor does not automatically make a backup!
Notes on my grub file
I made some changes to grub for my personal needs. Such as the background picture of the moon launch. How to do these are discussed at the Ubuntu Community Documentation page on Grub2, recommended.
Good luck!
Обычно граб сам способен определять винду, но нужно поставить пакет os-prober.
- Показать ответ
- Ссылка
Ответ на:
комментарий
от post-factum 30.12.12 17:50:51 MSK
уже пробовал, безрезультатно
Warlock
(30.12.12 17:55:17 MSK)
- Ссылка
Ответ на:
комментарий
от vik24rus 30.12.12 17:56:59 MSK
кхм, а зачем мне загрузочная область винды, если я ставлю граб и он, по идее, должен сам обнаружить все ОС и добавить. Так было в первом грабе, может сейчас что-то изменилось?
Warlock
(30.12.12 18:00:11 MSK)
- Ссылка
Ответ на:
комментарий
от anonymous 30.12.12 17:59:59 MSK
писал это в /etc/grub.d/40_cutsom # (2) Windows 7 menuentry «Windows 7» { set root=(hd0,3) chainloader +1 } потом написал:grub-mkconfig -o /boot/grub/grub.cfg всё равно никак(
Warlock
(30.12.12 18:04:28 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от Warlock 30.12.12 18:04:28 MSK
А просто в grub.cfg запиши, если будет грузиться потом разберешся.
anonymous
(30.12.12 18:11:17 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от Warlock 30.12.12 18:04:28 MSK
Ответ на:
комментарий
от anonymous 30.12.12 18:11:17 MSK
А что там писать? И вообще на вики не рекомендуют его править.
Warlock
(30.12.12 18:16:58 MSK)
- Ссылка
Ответ на:
комментарий
от post-factum 30.12.12 18:12:16 MSK
Ответ на:
комментарий
от Warlock 30.12.12 18:17:29 MSK
Хочешь сказать, что после grub-mkconfig не появилась запись винды в меню? А покажи вывод команды ls -lh /etc/grub.d, пожалуйста.
- Показать ответ
- Ссылка
Ответ на:
комментарий
от post-factum 30.12.12 18:25:54 MSK
Ответ на:
комментарий
от Warlock 30.12.12 18:37:46 MSK
Ответ на:
комментарий
от Warlock 30.12.12 18:37:46 MSK
Всё, проблема решена. Просто заново поставил арч по http://www.youtube.com/watch?v=swIVamdCUis инструкции и перед конфигурацией граба установил os-prober. Граб автоматически нашёл вЕнду
Warlock
(31.12.12 14:23:00 MSK)
- Ссылка
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Если grub
не принципиален и хочется простоты работы с установочными образами, рекомендую обратить внимание на Ventoy для того чтобы создать загрузочную флешку, необходимо всего лишь установить программу на флешку и скопировать обычным способом ISO образы на эту флешку, работает с разными системами.
Компромиссное решение
Для наиболее полного ответа проделал эксперимент.
К сожалению 32gb флешки не было под рукой, но хватило и 8gb
C помощью GParted
разбил ее на 3 раздела:
На второй раздел обычным способом скопировал файлы из iso
(win10) Третий оставил пустым так как предположил если сработает со вторым то и с третьим заработает (по принципу индукции).
На первый раздел установил grub
, у меня в системе он второй версии поэтому соответственно устанавливал ее:
- смонтровал первый раздел
mkdir /mnt/USB && mount /dev/sdb1 /mnt/USB
- поставил:
grub-install --force --removable --no-floppy --target=i386-pc --boot-directory=/mnt/USB/boot /dev/sdb
- скачал конфиг:
cd /mnt/USB/boot/grub
wget pendrivelinux.com/downloads/multibootlinux/grub.cfg
- внес изменения
# This Menu entry brought to you courtesy of https://www.pendrivelinux.com/boot-multiple-iso-from-usb-via-grub2-using-linux/
set timeout=60
set default=0
menuentry "Windows 10" {
insmod part_msdos
insmod ntfs
insmod ntldr
set root='hd0,msdos2'
ntldr ($root)/bootmgr
}
menuentry "Reboot" {
reboot
}
menuentry "Shut Down" {
halt
}
Значение для рута получил командой search -u UUID
из под grub
, для этого после загрузки с флешки можно нажать c
после чего появится ожидание ввода команд grub>
где и следует ввести комманду поиска.
Сам UUID
глянул в GParted
:
Таким образом распаковывая iso
в разные разделы и находя их по UUID
можно создать флешку с разными версиями Windows
.
На заключительном этапе очень помог kvm
, устанавливал так для KDE
:
sudo apt-get install qemu-kvm
Для теста под linux достаточно ввести команду:
sudo kvm -boot c -drive file=/dev/sdb,cache=none -m 1024
Опция -m 1024
отвечает за оперативку, меньше делать не стоит, лучше больше.
В финале я добрался до приветствия, пришлось подождать минут 10.
Для выбора и запуска операционной системы во время загрузки компьютера используется специализированная программа — загрузчик. Самый популярный загрузчик — Grub. При установке нескольких операционных систем, например, Linux поверх Windows, в меню загрузчика первой будет последняя установленная ОС.
Это не вызовет проблем у пользователей, которые пользуются Linux как основной системой, для них это даже более предпочтительный вариант. Но если вы еще новичок, и хотите использовать Linux второй системой, а Windows пока еще основной, до тех пор, пока не освоитесь, то наверное захотите чтобы первой была Windows. В этой статье мы рассмотрим как сделать загрузку Windows первой в Grub. Рассмотрим два способа: с помощью программы Grub Customizer и вручную, через файлы конфигурации загрузчика Grub.
Grub Customizer
Grub Customizer — это программа, позволяющая настраивать различные параметры загрузчика Grub. В том числе и положение и очередность пунктов загрузки. Установить программу можно из официальных репозиториев. Например, в Ubuntu нужно использовать ppa:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
Для запуска программы откройте терминал (Ctrl + Alt + T) и наберите grub-customizer:
grub-customizer
Для работы программы необходимы права root, в некоторых системах возможно придется использовать такую команду:
gksu grub-customizer
Также программу можно запустить из главного меню. Главное окно выглядит вот так:
Несколько секунд после запуска программа будет сканировать установленные операционные системы, затем в этом же окне мы сможем перенести загрузку Windows на первое место. Для этого кликните на нужном пункте правой кнопкой чтобы открылось контекстное меню:
В меню выберите пункт Переместить вверх. Это действие нужно будет повторить несколько раз, пока Windows не будет первой в списке. Теперь будет выполняться загрузка windows по умолчанию grub.
Если потом вы захотите опустить Windows обратно вниз, есть обратное действие — Переместить вниз.
Для сохранения настроек просто нажмите кнопку Сохранить. Готово. Можете перезагружать компьютер и смотреть что получилось.
Но я хочу затронуть еще пару настроек, которые могут быть полезны. Вместо того чтобы делать загрузку Windows первой в Grub, можно изменить пункт запускаемый по умолчанию. Перейдите на вкладку Основные настройки:
Здесь для выбора пункта по умолчанию используемого по умолчанию есть список Задействовать:
Кроме того, можно загружать по умолчанию последнюю загруженную ОС, для этого есть галочка:
Не забудьте снова нажать кнопку сохранить.
Как я и обещал, теперь рассмотрим как сделать загрузку WIndows первой в Grub с помощью конфигурационных файлов. Конфигурация Grub находится в файле /boot/grub/grub.cfg.
sudo gedit /boot/grub/grub.cfg
Как правило, строки меню выглядят вот так:
menuentry имя_пункта --опции {
...
}
Например пункт Windows:
menuentry 'Windows 8 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprob
er-chain-FC324E26324DE66C' {
....
}
Теперь чтобы изменить порядок пунктов меню достаточно вырезать все до обратной закрывающей скобочки, вместе с этой строкой, и вставить перед всеми другими пунктами. Затем можно сохранить файл и готово. Перезагружайте и смотрите. Загрузка Windows выполняется по умолчанию. Только минусом данного способа является то, что при обновлении конфигурации Grub все настройки собьются.
Аналогично тому как мы настраивали пункт, загружаемый по умолчанию в Grub Customizer, это можно сделать и в терминале. Откройте файл /etc/default/grub.
gksu gedit /etc/default/grub
Здесь нас интересует строчка:
GRUB_DEFAULT=0
Замените 0, на нужный пункт для загрузки, также вместо цифры можно указать имя пункта, например:
GRUB_DEFAULT="Windows 8 (loader) (on /dev/sda1)"
Посмотреть доступные пункты загрузки не открывая файл конфигурации можно командой:
sudo grep menuentry /boot/grub/grub.cfg
Еще можно настроить загрузку последней загруженной системы, для этого добавьте строчку
GRUB_SAVEDEFAULT=true
А в GRUB_DEFAULT укажите saved:
GRUB_DEFAULT=saved
Очевидным плюсом этого способа есть то, что настройки во время обновления конфигурации Grub не собьются, так как во время обновления информация берется из этого файла. Теперь давайте обновим конфигурацию и сохраним настройки командой:
grub-update
Не во всех системах работает такой вариант, поэтому можно использовать другую команду:
grub2-mkconfig -o /boot/grub/grub.cfg
Вот и все. Теперь вы знаете как сделать загрузку Windows первой в Grub. Но представленную в этой статье информацию можно использовать в более широких целях. Она будет полезна не только для Windows, но и для любых других нескольких систем, очередностью загрузки которых нужно управлять.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .