GRUB:猜测我要启动的操作系统编号是多少

GRUB:猜测我要启动的操作系统编号是多少

过去,grub-reboot用于启动到另一个操作系统猜测时很容易选项编号在 GRUB 的列表中,例如:

luis@VirtuKali:~$ more /boot/grub/grub.cfg | grep menuentry --color
menuentry 'Debian GNU/Linux, with Linux 3.14-kali1-amd64' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 3.14-kali1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {

...所以我知道选项 0(第一个)启动到正常的 Kali Linux,选项 1(第二个)启动到恢复模式,我可以很高兴地这样做:

# grub-reboot 1

但在现代版本的 GRUB,并且当有多种操作系统,事情没那么容易。
例如,看看这个混乱的情况:

luis@balanceador:~$ more /boot/grub/grub.cfg | grep menuentry --color
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d795f672-83d4-451e-bea4-0db5c70512b8' {
submenu 'Opciones avanzadas para Ubuntu' $menuentry_id_option 'gnulinux-advanced-d795f672-83d4-451e-bea4-0db5c70512b8' {
        menuentry 'Ubuntu, con Linux 3.13.0-39-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-39-generic-advanced-d795f672-83d4-451e-bea4-0db5c70512b8' {
        menuentry 'Ubuntu, with Linux 3.13.0-39-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-39-generic-recovery-d795f672-83d4-451e-bea4-0db5c70512b8' {
        menuentry 'Ubuntu, con Linux 3.13.0-32-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-32-generic-advanced-d795f672-83d4-451e-bea4-0db5c70512b8' {
        menuentry 'Ubuntu, with Linux 3.13.0-32-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-32-generic-recovery-d795f672-83d4-451e-bea4-0db5c70512b8' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {
menuentry 'Microsoft Windows XP Professional (en /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-1D8E45A744914BEC' {
menuentry 'Ubuntu 14.04.1 LTS (14.04) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-45d94105-0a37-49fb-8b14-e201b807d493' {
submenu 'Opciones avanzadas para Ubuntu 14.04.1 LTS (14.04) (en /dev/sda6)' $menuentry_id_option 'osprober-gnulinux-advanced-45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic--45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu, con Linux 3.13.0-39-generic (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic--45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu, with Linux 3.13.0-39-generic (recovery mode) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic-root=UUID=45d94105-0a37-49fb-8b14-e201b807d493 ro recovery nomodeset-45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu 14.04.1 LTS (14.04) (en /dev/sda7) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic--45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu (en /dev/sda7) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic--45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu, con Linux 3.13.0-39-generic (en /dev/sda7) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic--45d94105-0a37-49fb-8b14-e201b807d493' {
        menuentry 'Ubuntu, with Linux 3.13.0-39-generic (recovery mode) (en /dev/sda7) (en /dev/sda6)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-3.13.0-39-generic-root=UUID=d795f672-83d4-451e-bea4-0db5c70512b8 ro recovery nomodeset-45d94105-0a37-49fb-8b14-e201b807d493' {

过去我只是简单地数了数实例数menuentry(从 0 开始),但现在对应关系不一样正如我在计算机启动时在 GRUB 菜单中看到的那样。我现在唯一的解决方法是输入以下内容:

# grub-reboot "Microsoft Windows XP Professional (en /dev/sda1)"

问题不大,但需要复制粘贴。数字更容易、更容易编写脚本。

有没有任何其他技巧?也许我的 grep 命令必须更新?

谢谢。

答案1

即使这个提议的解决方案适用于原始问题 (对应于Kali Linux),某些实现(即:Ubuntu v14)可能在行的开头 grub.cfg没有。TABs这里是一个更加独立于平台解决方案,它可以(希望)适用于任何 GRUB 安装。

这是解决方案(我将其用作别名):

alias GRUB-ListMenuOptions='more /boot/grub/grub.cfg | grep -e "^menuentry" -e "submenu" --color'

menuentry在行开头命名的条目加上名为 的条目submenu

已使用 GRUB 2.02~beta2-9ubuntu1 进行测试。谢谢@muru 的想法。

相关内容