Как мы уже писали, сейчас уже совершенно нормально держать даже на ноутбуке несколько систем, и мы всегда пытаемся сделать так, чтобы с РОСой это было удобно.

Правда если вариант с двумя системами («для игр и реальной жизни») прост и очевиден, то если держать на своем компьютере в порыве энтузиазма или по работе несколько линуксов, возникали юзабилити проблемы, из-за ответственности основной системы, поставляющей загрузчик, за загрузку всей остальной семейки:

Соответственно, мы неоднократно получали пожелания — нельзя ли оставить дополнительные системы[1] в своих разделах, вместе с собственными загрузчиками и меню загрузки (тогда внутри своих разделов они бы обновлялись своими силами), а из главного меню загрузки GRUB-а делать только ссылки на эти меню?

Наконец-то мы сделали и это[2], и теперь РОСА отлично подходит[3] на роль старшей жены в гареме сестры в семье, которая заботится о порядке и надежной загрузке остальных.

Было
Стало

На пути к решению

Предположим, что у нас уже есть возможность установки загрузчика в раздел, и представим себе, как будет выглядеть для пользователя настройка основного загрузчика. Для начала ему придётся вручную создать пункт загрузочного меню, который будет ссылаться на целевой раздел, что уже достаточно проблематично для пользователя, не слишком знакомого со структурой grub-меню и механизмами загрузки. Но будем считать, что пункт успешно добавлен и корректно работает. Что увидит пользователь после очередного обновления? В списке окажутся сразу три пункта, относящиеся к этой вторичной системе: прямая загрузка с использованием последней версии ядра, подменю с перечислением всех версий ядер, и, наконец, тот самый вручную добавленный пункт для перенаправления на загрузчик из раздела. Немножко избыточно, как вы считаете?

Что же мы можем здесь улучшить? На самом деле, пользователю совершенно необязательно передавать управление на загрузчик. Grub прекрасно умеет загружать свои конфигурационные файлы из произвольных мест. То есть если пользователя устраивает вышеописанная схема, то с нашей стороны и не потребуется ничего делать. Просто в том самом вручную созданном пункте надо будет вместо команды chainloader, передающей управление другому загрузчику, вписать команду configfile с путём к целевому grub.cfg.

И всё же избыточность раздражает. Да, в грабе[4] есть возможность отключить генерацию дополнительных пунктов меню для вторичных систем, но тонкая настройка отсутствует напрочь: либо всё, либо ничего. Так что если установлено более двух систем, то прописывать вручную придётся их все (кроме основной, разумеется). Ну и, конечно, ручное создание всех этих пунктов меню не очень-то соответствует нашим представлениям о user-friendly.

Мы решили решить обе проблемы одним ударом. В Grub2 была добавлена новая опция GRUB_OS_PROBER_LINKED, при включении которой все вторичные системы добавляются в меню не как обычно (один пункт для загрузки последнего ядра плюс подменю «Advanced options» со списком ядер), а в виде одного пункта-ссылки, перенаправляющего пользователя прямо на целевой конфиг-файл, как если бы он был обычным подменю.

И при использовании новой опции, загрузочное меню изменится, как показано на картинках выше.


Хочу, хочу!

Сейчас нововведение проходит последние стадии тестирования и проверки, и скоро обновлённые пакеты будут доступны в репозиториях. Начиная с релиза R5 GNOME, который выйдет на днях, все это будет по умолчанию в новых образах.

Чтобы воспользоваться новой возможностью на уже установленных системах, нужно будет прописать в файле /etc/default/grub строчку:

GRUB_OS_PROBER_LINKED=true

и перегенеровать загрузочное меню командой update-grub2. Для установки же системы с нуля мы добавили соответствующую галочку в расширенные настройки инсталлятора:

Опция в инсталляторе

Чтобы вернуть меню к прежнему виду, удалите строчку с GRUB_OS_PROBER_LINKED или задайте этому параметру значение false и снова вызовите update-grub2.

Также в будущем мы планируем добавить поддержку этой опции в графические инструменты настройки загрузчика, чтобы не было необходимости править файлы вручную.


Что еще?

К решению этой задачи мы перешли получив множество пожеланий пользователей по поводу «установки загрузчика в раздел». Несмотря на то, что технически Grub2 поддерживает такой режим, он работает не для всех файловых систем, является крайне ненадёжным, и сами разработчики настоятельно рекомендуют его не применять, поэтому к идее добавления такой опции мы всегда относились весьма скептически. Мы предпочли подойти с другой стороны: понять, для чего вообще требуется установка загрузчика в раздел, и предложить альтернативные пути решения этих задач. Из отзывов пользователей мы смогли выудить следующие сценарии:

Эту проблему мы решили более логично, просто добавив в инсталлятор возможность отказа от установки загрузчика. При этом локальный grub.cfg целевой системы продолжает генерироваться и обновляться, так что обновление основного загрузочного меню будет происходить корректно.

Решению вот этой-то задачи и посвящена данная статья.


Надеюсь, эта новость вас…

Ввела в экстаз ^_^14
17%
Порадовала :)60
71%
Оставила равнодушным -_-6
7%
Огорчила :(4
5%
  1. Которыми кстати, тоже могут быть ROSA Desktopы, например других релизов
  2. Ну, почти это.
  3. Мы не обнаружили аналогичной возможности у других распространенных дистрибутивов
  4. Далее, в этой статье ради простоты, мы будем просто, без чинов, называть загрузчик GRUB2 — «грабом». Не «крабом», не «гробом», а именно «грабом».