如果没有插入 USB 拇指驱动器,系统将无法启动

如果没有插入 USB 拇指驱动器,系统将无法启动

我以前试用 Linux Mint 时也遇到过这个问题,但无法获得任何帮助。然后我被引导相信这是与 Mint 有关的问题,而不是 grub。

今晚,我在 Windows 7 旁边的第二个分区上安装了 Ubuntu 12.04。我通过 USB 记忆棒进行安装,一切顺利,直到我重新启动时没有将记忆棒放入我的塔中。现在显示:

error: no such device: 20cec6ca-4024-4237-84c3-2dba3c851497
grub rescue >

我已经通过ls -l /dev/disk/by-uuid以下方式验证,安装 Ubuntu 的驱动器与应该不存在的 UUID 匹配。插入时我的拇指驱动器的 UUID 恰好是 06B3-9C68。

/boot/grub/grub.cfg 中没有任何地方提及我的 USB 驱动器的 UUID

我还尝试在启动系统、移除记忆棒并运行后重新安装 GRUB grub-install /dev/sda。这种情况仍然会发生,并且如果不将 USB 驱动器插入计算机,我无法启动。真正让我恼火的是,我的系统的启动顺序是 CDROM>硬盘驱动器>USB。它甚至无法到达 USB 并尝试从中启动,那么它不在那里有什么关系呢?

编辑:另外,我运行了未插入棒的 grub-config,然后又运行了一次 grub-install。仍然不行。

仅供参考,这是我的 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
set default="0"
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 recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
  insmod vbe
  insmod vga
  insmod video_bochs
  insmod video_cirrus
}

insmod part_msdos
insmod ext2
set root='(hd1,msdos5)'
search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  insmod part_msdos
  insmod ext2
  set root='(hd1,msdos5)'
  search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
  set locale_dir=($root)/boot/grub/locale
  set lang=en_CA
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ]; then
  set timeout=-1
else
  set timeout=10
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
if background_color 44,0,30; then
  clear
fi
### 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
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 3.2.0-25-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    linux   /boot/vmlinuz-3.2.0-25-generic-pae root=UUID=20cec6ca-4024-4237-84c3-d2ba3c851497 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-25-generic-pae
}
menuentry 'Ubuntu, with Linux 3.2.0-25-generic-pae (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    echo    'Loading Linux 3.2.0-25-generic-pae ...'
    linux   /boot/vmlinuz-3.2.0-25-generic-pae root=UUID=20cec6ca-4024-4237-84c3-d2ba3c851497 ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.2.0-25-generic-pae
}
submenu "Previous Linux versions" {
menuentry 'Ubuntu, with Linux 3.2.0-23-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=20cec6ca-4024-4237-84c3-d2ba3c851497 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-23-generic-pae
}
menuentry 'Ubuntu, with Linux 3.2.0-23-generic-pae (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    echo    'Loading Linux 3.2.0-23-generic-pae ...'
    linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=20cec6ca-4024-4237-84c3-d2ba3c851497 ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.2.0-23-generic-pae
}
}
### END /etc/grub.d/10_linux ###

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

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
    insmod part_msdos
    insmod ext2
    set root='(hd1,msdos5)'
    search --no-floppy --fs-uuid --set=root 20cec6ca-4024-4237-84c3-d2ba3c851497
    linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 9014706714705268
    chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### 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  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

答案1

您的问题似乎是 hd1 出现在您的 grub.cfg 中。对于单磁盘系统,我预计应该是 hd0。假设您的 UUID 正确,使用记忆棒启动,将 /boot/grub/grub.cfg 上的权限更改为包含 w(sudo chmod +w grub.cfg),编辑文件(sudo vi grub.cfg)并将每个 hd1 更改为 hd0。保存,关机,移除记忆棒并重新启动。在 grub 菜单中,您可以检查可用的磁盘 - 输入 c 进入 grub 命令行,然后键入“set root=”,然后按 tab 进行自动完成。如果有多个选项,将提供多个选项,但如果只有 hd0 可用,它将被填写为“set root=hd0”,另一个选项卡将提供分区选项,其中应该包括您想要的选项。也许将 hd1 编辑为 hd0 的修复可以直接从 grub 菜单中进行,键入 e 进行编辑,然后将 hd1 更改为 s,然后按 F10(或 ctrl X)重新启动。如果有效,请使用 sudo update-grub 永久修复问题。

答案2

您的引导加载程序似乎指向安装时 USD 驱动器所在的地址。

我以前也遇到过这个问题,并且能够通过使用以下方法解决问题:

启动修复

Boot-Repair 是一个简单的工具,用于修复您在 Ubuntu 中可能遇到的常见启动问题,例如在安装 Windows 或其他 Linux 发行版后无法启动 Ubuntu,或者在安装 Ubuntu 后无法启动 Windows,或者 GRUB 不再显示,某些升级会破坏 GRUB 等。


我用来修复此类情况的另一种方法是使用超级 Grub2 磁盘允许我在 Linux 分区内启动,然后使用管理工具修复我的引导加载程序:

超级 Grub2 磁盘

Super GRUB2 Disk 的主要目的是帮助您启动引导加载程序已损坏的操作系统。

相关内容