Grub 菜单未出现

Grub 菜单未出现

我的 lenovo z570 中安装了 Windows 8.1。我从使用创建的 USB 安装了 linux mint 17由美软件。安装后,grub菜单不会出现,Windows会自动启动。我也关闭了Windows中的快速启动。我读到我也应该关闭安全启动。但在msinfo32中它显示安全启动:不支持。我也尝试过从 live cd 进行 grub-repair。我仍然无法获得 grub 启动菜单。会出现什么问题?

答案1

这个问题的答案是多方面的。

UEFI !=BIOS

您必须做的第一件事就是尝试忘记您可能拥有的任何与 BIOS 相关的启动知识 - 它不适用于此处。没有MBR,没有第二阶段引导加载程序,没有启动分割。值得庆幸的是,这些东西很快就会像四分之一世纪前的 16 位 BIOS 一样过时INT-13H它们旨在支持实模式磁盘接口。

启动过程

接下来您需要考虑启动执行。当您的计算机启动时,固件在调用 EFI 可执行文件之前会执行一些操作 - 您的操作系统内核或指示调用您的操作系统内核的某些冗余链加载程序。

快速启动

它将首先检查电源和中断,然后检查视频。它要么调用旧的实模式视频 BIOS oprom 并等待其完成,要么检测保护模式 GOP 视频 rom,抛出一个开关,然后继续。这在很大程度上就是快速启动在大多数界面中。固件必须使用其处理实模式位CSM (兼容性支持模块)或者它可以自动实现一些 GOP 标准,并将视频初始化的其余部分留给它将很快调用的操作系统。显然,您拥有 GOP 兼容视频卡。充分利用此功能并不是 Windows 特有的选项。

仍然不是 BIOS

它还会加载 OEM 存储在主板闪存中的任何 UEFI 驱动程序,但在大多数情况下,我们可以忽略这一点,主要例外是 FAT 文件系统驱动程序。正如我之前提到的,没有 MBR 或启动分区,但是有一个EFI系统分割。两者有根本的不同,前者是一个分区,BIOS 固件将从该分区读取原始磁盘的第一个扇区并执行在那里找到的任何代码,而后者是一个由 UEFI 固件作为分区挂载的分区。文件系统并从中执行文件。

ESP

最多有一个特别是每个 GPT 格式磁盘的标记分区。您已经拥有 GPT 格式的硬盘,否则您永远不会拥有快速启动首先是窗户。目前我还不知道您的 USB 磁盘的格式类型。对于某些 UEFI 固件,可移动磁盘是特殊情况,因为它们不需要被标记特别是如果它们根本没有分区表 - 换句话说,通常可以从从未分区且使用 FAT 文件系统整体格式化的 USB 磁盘启动。这不一定是可靠的功能,但很常见。

启动0000

当固件挂载时特别是分区它加载已存储在内存中的路径。内存模块是一个板载 NVRAM 芯片,固件在其上存储启动之间所需的信息 - 例如Boot0000-{GUID}多变的。在你的情况下,这个变量的内容很可能是${ESP-GUID}\EFI\BOOT\BOOTx64.efi它几乎总是指向微软自己的启动管理器 -(这是不是 BOOTMGR.efi,顺便说一句 - 它出现在 MS 的启动过程中)

引导x64.efi

通常你可以:

mv ${ESP}/EFI/BOOT/BOOTx64.efi ${ESP}/EFI/BOOT/BOOTx64.efi.bak
mv ./${mybootmgr}.efi ${ESP}/EFI/BOOT/BOOTx64.efi

...根本不需要编辑 NVRAM 变量。

NVRAM

当以 EFI 模式启动时,Linux 内核应自动加载其efivarfs内核模块并将 NVRAM 内容挂载在/sys/firmware/efi/efivars.您可以ls在该目录中查看所有 efi 变量的名称。这是我的变量的内容Boot0002-{GUID}

 printf %b $(
     od -An -t o1 -w1 -v \
         /sys/firmware/efi/efivars/Boot0002-* | 
     sed 's/ */\\0/'
 )
 #OUTPUT �^��~�J�3K��8���0\EFI\BOOT\BOOTX64.EF�AMBO

那里的无意义字符是 UEFI 的 UTF-16 编码的结果,而不是我的 Linux 系统的 UTF-8 编码。无论如何,想象一下那些废话是我的尤斯普的GUID。我想我不再有Boot0000-{GUID}变量 - 我一定在某个时候删除了它。

efibootmgr

如果我这样做了,我可能是使用该程序来完成的efibootmgr。如果您不带任何参数调用它,它将打印您的启动顺序。

efibootmgr
#OUTPUT
BootCurrent: 0002
Timeout: 3 seconds
BootOrder: 0002,000F,000D
Boot0002* UEFI: KINGSTON SV300S37A120G
Boot000D* Hard Drive 
Boot000F* CD/DVD Drive 

这是其页面的片段man

man efibootmgr 2>/dev/null | 
sed '/^ *DESCRIPTION/,/^ *OPTIONS/!d;//c\\'
#OUTPUT
   efibootmgr is a userspace application used to  mod‐
   ify  the  Intel Extensible Firmware Interface (EFI)
   Boot Manager.   This  application  can  create  and
   destroy boot entries, change the boot order, change
   the next running boot option, and more.
   Details on the EFI Boot Manager are available  from
   the  EFI  Specification,  v1.02 or later, available
   from:
    <URL:http://developer.intel.com>
          Note: efibootmgr requires  that  the  kernel
          support access to EFI non-volatile variables
          through      /sys/firmware/efi/vars       or
          /sys/firmware/efi/efivars/.

UEFI:学习它

我个人的建议是你从现在开始遵循我的另一个答案从那里到rodsbooks.com正如那里也链接的那样,您grub完全放弃了 - 这对您的情况来说是不必要的复杂化,我希望您很快就会看到。但无论您是否选择grub固件在启动时调用的 EFI 可执行文件,您都应该阅读 rodsbooks.com

构建 UEFI 可启动 USB

下面的 shell 部分(在 Mint 安装过程中给出默认选择)应该能够将您的 MBR 闪存驱动器转换为具有自己的 EFI 系统分区和启动管理器的 UEFI 可启动 GPT 格式驱动器。您可以轻松地将其他安装添加到同一根棒中 - 甚至是 Windows 安装,只需稍加小心即可 - 并且从长远来看,维护起来要容易得多。我承认我对此有点怀疑,tar因为我觉得我应该指定一些命令行选项来保留文件系统权限(希望有人更了解?)。尽管如此,它似乎对我来说工作得很好qemu- 我从可启动的 USB Mint Live 磁盘变成了可启动的 USB Mint Live 磁盘。

但您应该注意,如果您要使用令人满意的启动管理器(例如 rEFInd)配置主可启动分区,您可能会可以启动传统格式的启动盘,例如您现在拥有的启动盘。

如果您运行以下命令,请注意填写以下BIG_LONG_TAR_BACKUP_LOCATION_VAR_PATH路径:不是位于/tmp/usbwd它创建的目录路径中,因为它将也删除当它通过时这个目录。你会需要至少unzip为其工作而安装的、targdiskwget和软件包coreutils——所有这些都可能已经安装在您想尝试的任何 Linux 实时可启动磁盘上,但也可以通过我能想到的任何软件包管理器获得。

mkdir -p /tmp/usbwd/mintmnt; cd /tmp/usbwd; mkdir esp
wget -qO ./refind.zip \
    'http://sourceforge.net/projects/refind/files/0.8.3/refind-bin-0.8.3.zip/download'
unzip -qq ./refind.zip
sudo sh -se -- "/dev/${USBDISK}" \
    "${PATH_TO_A_DIR_WHERE_YOU_CAN_SAVE_A_BACKUP_OF_MINT_INSTALL}" \
<<\SUDO
    mount "${1}1" ./mintmnt
    tar -C ./mintmnt -czf "$2" ./; umount ./mintmnt
    printf %s\\n o y n '' '' \+750M ef00 n 2 '' '' '' w y |
        gdisk "${1}" || :
    mkfs.vfat -n USBESP "${1}1"
    ./refind*/install.sh --usedefault "${1}1"
    mkfs.${YOUR_FS_OF_CHOICE=ext4} -L MINTROOT "${1}2"
    mount "${1}1" ./esp; mount "${1}2" ./mintmnt
    mkdir ./esp/EFI/mintboot
    >./esp/EFI/mintboot/refind_linux.conf \
        printf %s\  \
            '"Linux Mint"' \
            '"root=/dev/disk/by-label/MINTROOT quiet splash"'
    cd ./mintmnt && tar -xzf "$2"
    >>./etc/fstab \
        printf %s\\n \
            '/dev/disk/by-label/USBESP /esp vfat defaults 0 1' \
            '/esp/EFI/mintboot /boot none bind,defaults 0 0'
    cp -T ../esp/EFI/mintboot ./boot/vmlinuz* ./boot/init*
    cd ..; umount ./mintmnt; umount ./esp
SUDO
    cd ~; rm -rf /tmp/usbwd

答案2

只需使用hiren软件启动到实时窗口(无论哪个版本),然后将其关闭即可。所有新设置都将写入磁盘中,您可以轻松挂载在 Windows 中创建的磁盘。

相关内容