Цепные загрузчики для необычной настройки
Я пытаюсь реализовать какую-то необычную идею на моем ПК.
Всего у меня 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 ответа
Я вижу, что вы пытаетесь сделать (одноуровневое загрузочное меню вместо двух отдельных меню) и хотел бы предложить альтернативное решение с тем же эффектом:
Оставьте bootmgr в главном меню, не устанавливайте таймаут на ноль. Используйте EasyBCD, чтобы добавить две отдельные записи: запись Ubuntu и запись GRUB4Dos (EasyBCD имеет свою собственную копию Grub4Dos, называемую NeoGrub).
Обязательно удалите все, кроме Ubuntu, из меню Ubuntu GRUB. Настройте меню NeoGrub в EasyBCD, чтобы имитировать существующее меню Grub4Dos.
У вас будет одноуровневое меню, в котором вы можете загрузиться в Windows, Ubuntu или GRUB4Dos.
Вам никогда не придется обновлять Grub4Dos/NeoGrub, и ваша загрузка будет работать через обновления Ubuntu и ядра без необходимости что-либо изменять.
Проблема в том, что я понятия не имею, как установить другой, независимый 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
- "Установка завершена, ошибок не обнаружено."
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 для этого.
(смеется, суперпользователь удалил каждый экземпляр слова "иметь")