1

Я пытаюсь реализовать какую-то необычную идею на моем ПК.

Всего у меня 6 разделов:

  • Первый для Windows 7 (моя основная ОС)
  • 2-й для Ubuntu
  • 3-й и 5-й - разделы хранения Windows
  • 4-й дом для Ubuntu
  • и 6-й - раздел восстановления с некоторыми инструментами крайнего случая.

Моя идея выглядит так:

  • Windows - это вариант загрузки по умолчанию
  • Ubuntu является загрузочным как внутри, так и внутри виртуальной машины под управлением Windows
  • GRUB2 может запустить некоторые инструменты из последнего раздела

Пока это работает просто отлично. Мой MBR и первая BS - нетронутые сектора Windows по умолчанию. На втором BS установлена GRUB2, которая используется для запуска Ubuntu. На последнем разделе также находятся GRUB4DOS и memdisk, загруженные из Grub2win. Виртуальная машина имеет виртуальный диск, связанный с GRUB, поэтому раздел Ubuntu является загрузочным.

Итак, загрузка выглядит так:

  • Windows: MS BootMgr -> Windows 7 (по умолчанию)
  • Ubuntu: MS BootMgr -> Grub2win -> GRUB2 -> Ubuntu
  • Инструменты: MS BootMgr -> Grub2win -> GRUB4DOS -> (некоторые другие инструменты)

Чего я хочу добиться, так это сделать (некоторые) GRUB2 практически первым загрузочным менеджером, предпочтительно текущим Grub2win. Идеальный сценарий будет:

  • Windows: статическая GRUB2 -> MS BootMgr -> Windows 7 (по умолчанию)
  • Ubuntu: статический GRUB2 -> Ubuntu's GRUB2 -> Ubuntu
  • Инструменты: статические GRUB2 -> GRUB4DOS -> (инструменты)

Проблема в том, что я понятия не имею, как установить другой независимый GRUB2 или как сделать Grub2win моим менеджером загрузки по умолчанию (если я правильно понял, это даже невозможно).

Установка времени ожидания BootMgr на 0 и установка Grub2win в качестве опции загрузки по умолчанию сделает Grub2win практически первым, но тогда будет невозможно запустить Windows. Решением было бы запустить Windows напрямую (без BootMgr), но, насколько я знаю, это невозможно.

Тем не менее, Ubuntu, похоже, делает это с GRUB2 - он просто пропускает BootMgr и загружает Windows. Я попытался скопировать эту запись из /boot/grub/grub.cfg в конфигурацию Grub2win, но тогда это не сработало - просто запустил BootMgr.

Причина, по которой я не хочу использовать GRUB в Ubuntu, заключается в том, что каждый раз, когда update-grub запускается внутри виртуальной машины, Windows исчезает из списка. Это происходит потому, что виртуальная машина имеет доступ только к двум разделам Linux, поэтому для виртуализированной Ubuntu нет видимого раздела Windows.

Итак, сейчас моя цель - запустить Windows напрямую из Grub2win, как это делает Ubuntu GRUB2. Ребята, вы можете мне помочь?

Изменить: еще несколько вещей, чтобы рассмотреть:

  • GRUB4DOS является неотъемлемой частью некоторого набора инструментов, поэтому он в принципе неприкосновенен. Я не хочу делать никакой дополнительной работы над каждым обновлением набора инструментов.
  • Мне нужен какой-то способ загрузки с ISO-образов - в настоящее время я использую Grub2win + memdisk.
  • Меню Ubuntu GRUB точно такое же, как при загрузке по цепочке, так и на виртуальной машине. Поскольку к виртуальной машине подключено только 2 раздела Ubuntu, в этом меню мне нужны только параметры, связанные с Ubuntu.

2 ответа2

3

Я вижу, что вы пытаетесь сделать (одноуровневое загрузочное меню вместо двух отдельных меню) и хотел бы предложить альтернативное решение с тем же эффектом:

Оставьте bootmgr в главном меню, не устанавливайте таймаут на ноль. Используйте EasyBCD для добавления двух отдельных записей: записи Ubuntu и записи GRUB4Dos (EasyBCD имеет свою собственную копию Grub4Dos под названием NeoGrub).

Убедитесь, что вы удалили все, кроме Ubuntu, из меню Ubuntu GRUB. Настройте меню NeoGrub в EasyBCD, чтобы имитировать существующее меню Grub4Dos.

У вас будет одноуровневое меню, в котором вы можете загрузиться в Windows, Ubuntu или GRUB4Dos.

Вам никогда не придется обновлять Grub4Dos/NeoGrub, и ваша загрузка будет работать через обновления Ubuntu и ядра без необходимости что-либо менять.

2

Проблема в том, что я понятия не имею, как установить другой, независимый GRUB2.

Установка независимого GRUB2 проста (см. Мой вопрос, чтобы всегда указывать на текущее ядро Linux/Ubuntu).

Сделайте достаточно резервных копий (дд ваш друг), прежде чем начать!

[Я хочу, чтобы этот пост был простым и понятным, поэтому каждый, кто не знаком с конфигурацией GRUB, может использовать его для установки независимого GRUB. Если у кого-то есть предложения по улучшению этого поста, сообщите мне.]

Создайте отдельный загрузочный раздел, где вы будете устанавливать GRUB2 и больше ничего. Он не будет подключен ни к одной из установленных вами операционных систем, он используется только для выбора первой системы. Возможно, в конечном итоге вам придется выполнить некоторые перестановки (перемещая разделы вокруг, чтобы освободить место или, возможно, даже уничтожить и воссоздать их в другом порядке). Мне нравится, чтобы мой раздел GRUB был первым разделом на диске (или вторым, после раздела BIOS, если используется GPT), размером 50 МБ (может быть 5, но hdds большие). Сначала установите все операционные системы, потому что они перезаписывают MBR. НЕ используйте /dev /sda1 в любой операционной системе.

Загрузите живую систему с инструментами GRUB2. Я рекомендую Parted Magic (которую вы также можете использовать для всех ваших разделов).

  • Будьте осторожны, чтобы не вводить sda2 вместо sda1 или что-то еще. Вы можете легко стереть ваш жесткий диск с одной опечатки (конечно, у вас есть полная резервная копия, так что ничего не будет потеряно).
  • Формат /dev /sda1 с ext2.

mkfs.ext2 /dev /sda1

  • Смонтируйте раздел GRUB и установите GRUB2:

кд / минт

mkdir sda1

mount / dev / sda1 sda1

grub-install --boot-directory = / mnt / sda1 / dev / sda

  • Msgstr "Установка завершена, ошибок нет."

cd sda2

Ls

  • "grub/ lost+found/"
  • Создайте новую конфигурацию меню вручную (также возможно, чтобы GRUB сгенерировал ее).

vi grub/grub.cfg

пункт меню "Windows 7 (загрузчик)" --class windows --class os {

insmod    part_msdos

insmod    ntfs

set       root='(hd0,msdos2)'

chainloader +1

}

menuentry 'Debian (или Ubuntu)' {

insmod    part_msdos

insmod    ext2

set       root='(hd0,msdos3)'

echo      'Loading Linux...'

linux     /boot/vmlinuz root=/dev/sda6 ro quiet <- current vmlinuz file name

echo      'Loading initial ramdisk...'

initrd    /boot/initrd.img <- current initrd.img file name

}

menuentry 'Fedora (просто еще один пример)' {

insmod    part_gpt

insmod    ext2

set       root='(hd0,msdos3)'

echo      'Loading Linux...'

linux     /boot/vmlinuz-3.7.3-101.fc17.x86_64 root=UUID=[UUID of /dev/sda3] ro rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True  KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8

echo      'Loading initial ramdisk...'

initrd    /boot/initramfs-3.7.3-101.fc17.x86_64.img

}

  • Я пробовал это с Parted Magic 11.11.11 (счастливый номер версии), инструменты GRUB там создали только каталог "grub" в /dev /sda1. Другая версия может создать каталог "grub2". В любом случае, вы помещаете туда свой конфигурационный файл GRUB2 (GRUB2 выглядит как скрипт Shell, в GRUB1 это был простой menu.lst, но это очень далеко).
  • Замените «[UUID of /dev /sda3]» на что ls -l /dev /disk /by-uuid | grep sda3 говорит вам.
  • Замените "/boot /vmlinuz" реальным именем файла (в /dev /sda3, ваш раздел Linux).
  • Замените "/boot/initrd.img" таким же образом.
  • Размонтировать и перезагрузить. Ваш компьютер загрузит простой GRUB2, в котором перечислены указанные вами записи («Windows 7 (загрузчик)», «Debian (или Ubuntu)»). Если вы все сделали правильно, вы сможете загружать как Windows, так и Linux напрямую с этого независимого GRUB.
  • Опять же, запись Linux указывает на конкретную версию ядра. Его нужно будет обновить вручную (mount /dev /sda1 и изменить grub /grub.cfg), что является серьезным недостатком. Снова, посмотрите мой другой вопрос о настройке GRUB для этого.

(смеется, суперпользователь удалил каждый экземпляр слова "иметь")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .