如何在 Ubuntu 20.04 中向 grub.cfg 添加 USB 启动选项?

如何在 Ubuntu 20.04 中向 grub.cfg 添加 USB 启动选项?

我已经使用文件命令确认 USB 上有正确的可启动 Ubuntu ISO。USB
已插入笔记本电脑。
启动时,grub 菜单确实会自动显示。

问题是没有从 USB 启动的选项。

现在我想编辑grub.cfg它以使其包含 USB 启动选项。
我该怎么做?

另外,/boot/grub/grub.cfg:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${initrdfail}" = 2 ]; then
   set initrdfail=
elif [ "${initrdfail}" = 1 ]; then
   set next_entry="${prev_entry}"
   set prev_entry=
   save_env prev_entry
   if [ "${next_entry}" ]; then
      set initrdfail=2
   fi
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function initrdfail {
    if [ -n "${have_grubenv}" ]; then if [ -n "${partuuid}" ]; then
      if [ -z "${initrdfail}" ]; then
        set initrdfail=1
        if [ -n "${boot_once}" ]; then
          set prev_entry="${default}"
          save_env prev_entry
        fi
      fi
      save_env initrdfail
    fi; fi
}
function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
else
  search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_IN
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
    set timeout=5
  # Fallback normal timeout code in case the timeout_style feature is
  # unavailable.
  else
    set timeout=5
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
        set vt_handoff=vt.handoff=7
    else
        set vt_handoff=
    fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e860e8f0-912f-4874-8f0f-97e343371f12' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt2'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
    else
      search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
    fi
    linux   /boot/vmlinuz-5.13.0-27-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro  quiet splash $vt_handoff
    initrd  /boot/initrd.img-5.13.0-27-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-e860e8f0-912f-4874-8f0f-97e343371f12' {
    menuentry 'Ubuntu, with Linux 5.13.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-27-generic-advanced-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.13.0-27-generic ...'
        linux   /boot/vmlinuz-5.13.0-27-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro  quiet splash $vt_handoff
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.13.0-27-generic
    }
    menuentry 'Ubuntu, with Linux 5.13.0-27-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-27-generic-recovery-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.13.0-27-generic ...'
        linux   /boot/vmlinuz-5.13.0-27-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.13.0-27-generic
    }
    menuentry 'Ubuntu, with Linux 5.11.0-37-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.11.0-37-generic-advanced-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.11.0-37-generic ...'
        linux   /boot/vmlinuz-5.11.0-37-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro  quiet splash $vt_handoff
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.11.0-37-generic
    }
    menuentry 'Ubuntu, with Linux 5.11.0-37-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.11.0-37-generic-recovery-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.11.0-37-generic ...'
        linux   /boot/vmlinuz-5.11.0-37-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.11.0-37-generic
    }
    menuentry 'Ubuntu, with Linux 5.8.0-43-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-43-generic-advanced-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.8.0-43-generic ...'
        linux   /boot/vmlinuz-5.8.0-43-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro  quiet splash $vt_handoff
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.8.0-43-generic
    }
    menuentry 'Ubuntu, with Linux 5.8.0-43-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.8.0-43-generic-recovery-e860e8f0-912f-4874-8f0f-97e343371f12' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  e860e8f0-912f-4874-8f0f-97e343371f12
        else
          search --no-floppy --fs-uuid --set=root e860e8f0-912f-4874-8f0f-97e343371f12
        fi
        echo    'Loading Linux 5.8.0-43-generic ...'
        linux   /boot/vmlinuz-5.8.0-43-generic root=UUID=e860e8f0-912f-4874-8f0f-97e343371f12 ro recovery nomodeset dis_ucode_ldr 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-5.8.0-43-generic
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/10_linux_zfs ###
### END /etc/grub.d/10_linux_zfs ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
    fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

在此处输入图片描述

在此处输入图片描述

答案1

当您进入黑色 GRUB 屏幕时,按 C 或退出键 (ESC) 访问命令提示符,然后输入以下命令(这应该可以让您启动):

grub> root (hd0,0)   # first harddrive, first partition
grub> find /[tab]    # type the slash then press [tab], and it will try to list files on this partition
Error 17: Cannot mount selected partition   # Oops no file system here
grub> root (hd0,1)   # first harddrive, second partition
grub> find /[tab]
Possible files are: lost+found var etc media ...   # That was my hard drive with my linux install
grub> root (hd1,0)   # second hard drive usually is the USB drive if you have only one internal drive
grub> find /[tab]
Possible files are: ldlinux.sys mydoc myfile mystick syslinux.cfg  # Bingo, that's the USB stick

现在,通过输入以下命令启动驱动器:

chainloader +1
boot

为了方便起见,将这些命令添加到您的 GRUB 配置中(通常在/boot/grub/menu.lst):

# to boot from a USB device
title    Boot USB drive
root     (hd1,0)
chainloader +1
boot

来源:https://help.ubuntu.com/community/BootFromUSB#:~:text=The%20easiest%20way%20to%20boot,key%20to%20enter%20command%20mode

答案2

简而言之:这是 BIOS 的工作,而不是 GRUB 的工作。

一般电脑都会有进入BIOS(或UEFI)设置页面的方法,比如ThinkPad的ThinkVantage,在BIOS设置页面会有启动顺序更改的设置,把USB HDD放到上面,然后重启电脑。

如果没有 BIOS 设置页面(很少见,但并非没有),或者您的计算机无法检测到 USB 可启动磁盘,请使用上述答案。切勿修改您的 GRUB 配置文件来执行此操作。

如果你能提供你电脑的实际型号,我可以告诉你实际步骤。否则,你也可以查看有关如何更改启动顺序的手册。

相关内容