Как я могу заставить grub2 загружать другую опцию только при следующей загрузке?

19

Я устанавливаю безголовую машину с Linux / Windows с двойной загрузкой. В основном я хочу, чтобы машина всегда загружалась в Ubuntu, за исключением случаев, когда мне нужно что-то проверить в Windows.

Я установил Windows и Ubuntu, и в настоящее время он загружается в Ubuntu каждый раз. Я хотел бы иметь возможность сказать ему, чтобы он загружался в Windows только при следующей загрузке, а затем, когда я перезагружаюсь из Windows, система возвращается к загрузке Ubuntu.

Я нашел Grub Legacy - раздел 4.3.1 - Загрузка выполняется только один раз, но я использую сервер Ubuntu 14.04, на котором установлена ​​более новая версия grub. Из того, что я прочитал, мне нужно внести некоторые изменения /etc/default/grubи использовать, sudo grub-set-defaultкогда я хочу загрузиться в Windows.

Я думаю, что эти изменения начинаются с добавления этого к /etc/default/grub:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=false

Каждый раз, когда вносятся изменения, /etc/default/grubя знаю, что мне нужно запустить,
sudo update-grubчто приводит к:

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-43-generic
Found initrd image: /boot/initrd.img-3.13.0-43-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done

Поскольку Windows является 7-ой опцией в этом списке, я полагаю, что я бы запустил sudo grub-set-default 6(отсчет на основе 0) - это правильно, и есть ли другой способ получить нумерованный список вариантов загрузки после того, как система уже загружена?

Кроме того, достаточно ли линий /etc/default/grubдля достижения этого поведения или мне нужно добавить дополнительную конфигурацию?

УХО
источник

Ответы:

19

Вы должны убедиться, что GRUB_DEFAULT=savedв вашем конфиге grub (который генерируется автоматически, вы изменяете эту часть, редактируя / etc / default / grub). sudo update-grubсделать изменения активными, а затем использовать sudo grub-reboot $1.

grep -i "menuentry '" /boot/grub/grub.cfg

Предоставит вам пункты меню, которые вы можете вырезать-вставить за 1 доллар. Или, как вы заметили, параметры индексируются с нулевым индексом, поэтому n-й пункт меню можно получить, передав (n-1) grub-reboot.

См. Например

Не проверено мной, так как у меня нет установки Windows 7.

pbhj
источник
спасибо, я думаю, что это то, что мне нужно (с дополнительными деталями, которые я нашел на help.ubuntu.com/community/Grub2 )
cwd
Если вам довелось попробовать это без изменения строки на GRUB_DEFAULT=saved, вам придется сделать это позже вручную, как описано здесь во втором абзаце для Grub2, а затемgrub-set-default 0; grub-reboot 0
rubo77
1
команда для отображения номеров записи:grep -i "menuentry '" /boot/grub/grub.cfg|sed -r "s|--class .*$||g"|nl -v 0
rubo77
1
Согласно askubuntu.com/questions/838704/grub-reboot-to-specific-kernel , menuentryс под submenuин /boot/grub/grub.cfgдолжен быть передан в grub-rebootкачестве SUBMENU>MENUENTRY. Так, например, используя некоторое bash-fu, похожее на @ rubo77, я хотел загрузить menuentry7, однако эта запись находилась в разделе, submenuкоторый был второй записью в меню верхнего уровня, поэтому мне нужно было '1>6'вместо этого пройти (одиночные кавычки, чтобы избежать интерпретация оболочки>).
Трент Нельсон
1
ВНИМАНИЕ: Это не работает, если вы загружаетесь с раздела BTRFS. Grub должен иметь возможность писать в grubenv, поскольку он загружает Windows, он не может писать в BTRFS. Файл обычно хранится в / boot / grub и может быть просмотрен с помощью grub-editenv. Я исправил мою систему, подключив BTRFS в /, раздел EXT4 в / boot, а затем раздел EFI в / boot / efi.
Натан
-2

Попробуйте установить grub-customizer (руководство по установке ниже) в вашу систему Ubuntu. Этот инструмент с графическим интерфейсом предоставит вам хороший набор опций, с помощью которых вы сможете настроить параметры GRUB, включая имена и порядок параметров загрузки, систему по умолчанию, разрешение экрана, шрифты, фон и т. Д.
Я не уверен, что он имеет возможность установить, что вы хотите, но, по крайней мере, он может показать вам номера ОС. Я думаю, что на них тоже можно ссылаться по имени.

Как установить grub-customizer:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

(источник: панель запуска - Даниэль Рихтер )

Byte Commander
источник
Я видел этот инструмент, но я использую сервер Ubuntu 14.04 (без графического интерфейса), поэтому я хотел бы иметь решение для командной строки.
cwd
Ох, не знал этого. Я использую стандарт 14.10 (Unity), и лично я предпочитаю GUI для таких работ. Вы знаете этот сайт? Он описывает, что вы написали в своем вопросе, но если он отличается от вашего первого источника, возможно, там вы найдете то, что именно вам нужно.
Byte Commander
-1 - Я не одобряю ваш ответ, потому что мне интересно, прочитали ли вы вопрос вообще. Я могу понять, что вы, возможно, пропустили там «сервер Ubuntu», но вы только что опубликовали ту же ссылку, которую я включил в мой вопрос в вашем последнем комментарии ...
cwd
К сожалению. Но как вы думаете, каждый раз, когда я пишу новый комментарий или ответ, я перечитываю весь вопрос и предыдущие сообщения, проверяя каждую ссылку !? Кроме того, вы также можете установить DE на серверные дистрибутивы! Я признаю, что я не эксперт (пока), но, по крайней мере, я стараюсь помогать другим, где могу, даже если ответы не всегда на 100% правильные или полезные. Вы должны быть рады, что есть кто-то, кто пытается помочь вам решить эту проблему, но если вы хотите разозлить меня, вам это удалось. И последнее: вы говорили GRUB_SAVEDEFAULT=false, но я не могу найти это по нашей ссылке. И вы забыли другие упомянутые там строки!
Byte Commander