grub2 无法在双启动中加载 Ubuntu

grub2 无法在双启动中加载 Ubuntu

从 Windows 启动管理器运行的双启动设置存在问题。我可以从 Windows 启动管理器成功加载到 grub2,但是 grub2 似乎无法定位到内核或其他东西,因为它直接将我带入 shell,并显示以下输出:

[ Minimal BASH-like line editing is suported. For the First word, TAB
list the posible command completion. Anywhere else tab list the posible
completions of a device/filename,]

grub>

我以前使用过 Easybcd 并成功地通过 Windows 引导加载程序加载了 Linux grub,但这是当两个操作系统都在同一个分区上时,但由于我的操作系统安装现在位于不同的分区上,因此 EasyBcd 似乎无法发挥其魔力。

值得鼓励的是,如果我使用 Neo grub 引导加载程序并使用以下命令编辑 confg,我就能够让 Easybcd 加载可运行的 Grub:

title Ubuntu 14.04
find --set-root /boot/vmlinuz-3.19.0-61-generic
kernel /boot/vmlinuz-3.19.0-61-generic ro root=/dev/sdc
initrd /boot/initrd.img-3.19.0-61-generic

然而,这在 Grub4DOS 中加载非常慢,并且从今天起,这种方法已经停止工作了。这个帖子了解详情)。

以下是我尝试过的所有不同方法安装 Ubuntu 14.04 的 EasyBcd 设置的输出:

Default: Windows 7
Timeout: 30 seconds
Boot Drive: C:\

Entry #1
Name: Windows 7
BCD ID: {current}
Drive: C:\
Bootloader Path: \Windows\system32\winload.exe

Entry #2
Name: Ubuntu 14.04 Legacy
BCD ID: {a4f127cf-3150-11e6-8aaf-408d5cb9e442}
Drive: C:\
Bootloader Path: \NST\nst_linux.mbr

Entry #3
Name: Ubuntu 14.04 Grub2
BCD ID: {a4f127d0-3150-11e6-8aaf-408d5cb9e442}
Drive: C:\
Bootloader Path: \NST\AutoNeoGrub0.mbr

Entry #4
Name: Ubuntu Neo Grub
BCD ID: {a4f127d1-3150-11e6-8aaf-408d5cb9e442}
Drive: C:\
Bootloader Path: \NST\NeoGrub.mbr

*似乎上面看到的所有路径都没有指向我的 dev/sdc2/ 分区,该分区在我的 Windows 卷管理器上被视为 DISK1。


编辑- 在尝试获取适用于 Ubuntu/Windows 的可用启动管理器时,您会发现 grub 和 Windows 启动管理器都安装在多个位置。以下是所有启动管理器和 Grub 安装的当前位置和内容:

dev/sdb Windows7 驱动器

/dev/sdb1- 512 MB fat32 分区,目前为空

/dev/sdb2- 110 GB ntfs 分区包含 Windows7 安装。此分区包含一个“Boot”文件夹,其中包含 BCD 文件和一大堆语言文件夹。这是 Windows 引导加载程序使用的文件夹。

/dev/sdb4- 121.53 ntfs 分区包含媒体存储


dev/sdd-Ubuntu 驱动器

dev/sdd1- 512 MB 分区包含一个“EFI”文件夹,其中有两个文件夹“grub”和“Ubuntu”,它们都包含完全相同的文件(grub.cfg、grubx64.efi、MokManager.efi、shium64.efi)

dev/sdd2- 48.83 GB ext4 分区,包含“/”文件夹和 Ubuntu 安装。

开发/sdd3- 69.91 GB ntfs 分区包含媒体存储空间

我需要做什么才能让 Grub shell 加载 Ubuntu?我怎样才能让这台机器从 Grub 双重启动?

答案1

您有两个选择 - 使用 GRUB 引导加载程序(我推荐)或 Windows 加载程序。首先删除您之前在 Windows BCD 存储中创建的所有 Ubuntu 或 GRUB 条目。要列出所有标识符,请以管理员身份打开命令提示符,执行:bcdedit /enum all /v

要删除 Ubuntu 条目,bcdedit /delete {*}请对每个 Ubuntu 条目执行 :。将 * 替换为要删除的 Ubuntu 标识符 - 小心不要删除 Windows 条目。此外,我建议卸载 EasyBCD,以避免 BCD 操作出现进一步的问题。

方法 1:GRUB 引导加载程序

从 Ubuntu 安装介质启动并选择“无需安装即可试用 Ubuntu”,进入 Live 桌面后,打开 GParted 以识别安装操作系统的磁盘和分区。在大多数情况下,磁盘是,即分区表sda上的 Windows 分区。 msdossda1

现在安装 GRUB 引导加载程序,您可以从中以传统 BIOS(分区表)模式将 Ubuntu 和 Windows 引导到磁盘msdos- 因此打开终端并执行以下命令:

sudo mount /dev/sd** /mnt  
sudo grub-install --boot-directory=/mnt/boot /dev/sd*

用您识别的字母和数字 替换sd*(磁盘)和(Ubuntu 分区)。sd**

如果系统以 UEFI BIOS 模式安装...则以 EFI 模式安装 GRUB 引导加载程序。

sudo mount /dev/sd*** /mnt
sudo mount /dev/sd** /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sd*
update-grub  

用您已识别的内容替换sd*(磁盘)、sd**(efi 分区)、 (Ubuntu 分区)。sd***

启动到 BIOS 并在 UEFI 设置中更改启动顺序 - 选择 Ubuntu 作为默认操作系统。

方法 2:Windows 启动加载程序

从 Ubuntu 安装介质启动并选择“无需安装即可试用 Ubuntu”,进入 Live 桌面后,打开 GParted 以识别安装操作系统的磁盘和分区。在大多数情况下,磁盘是,即分区表sda上的 Windows 分区。msdossda1

首先挂载Windows分区,打开终端,执行:将(Windows分区)sudo mount /dev/sd*** /mnt
替换sd***为您之前确定的字母和数字。

复制 Ubuntu 的前 512 个字节:用您之前识别过的字母和数字dd if=/dev/sd** of=/mnt/linux.bin bs=512 count=1
替换(Ubuntu 分区)。sd**

启动 Windows,以管理员身份打开命令提示符并执行以下命令:

bcdedit /create /d Ubuntu /application bootsector
bcdedit /set {identifier} device partition=c:
bcdedit /set {identifier} path \linux.bin
bcdedit /displayorder {identifier} /addlast  
bcdedit /timeout X  

将“标识符”替换为执行第一个命令时返回的字符、字母和数字,并将“X”替换为您希望看到 Windows 引导加载程序菜单的秒数(例如 10) - 在此之前它将自动启动默认操作系统。

答案2

我最终能够让 grub2 在启动时通过 Windows 7 条目加载,但这需要反复试验。

我所做的是从安装在各个驱动器上的不同位置的所有 Grub 条目删除所有 EasyBcd Grub 条目。

之后,我启动了启动修复磁盘并恢复了 MBR,以便 Windows 正常启动,然后重新启动进入启动磁盘修复,然后重新安装 Grub2(在所有驱动器上)。然后我进入 BIOS,更改启动磁盘并启动 Ubuntu,然后输入sudo update-grub

只有在执行此命令后,Grub2 引导加载程序才会识别 Windows。但这并没有结束,因为在 Grub2 菜单中选择 Windows 后,Windows 引导加载程序仍会出现(本质上增加了另一个步骤),因此我使用 EasyBCD 禁用 Windows 引导加载程序菜单,这样 Grub 就可以直接加载到 Windows 中,而无需等待 WIndows 引导加载程序的输入。

然后我可以使用 grub-customizer 更改 Grub2 中的启动顺序

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

我将奖励第一个答案,因为这是唯一的答案,而且我很高兴作者花时间彻底解释。

相关内容