最近在我的笔记本电脑上安装了 Ubuntu 15.04 和 Windows 7。它安装在三星 SSD 的一个分区上,一切似乎都安装得很好。分区似乎正确,一切看起来都很好,但不知何故,当我启动计算机时,它直接启动到 Windows,而不加载 GRUB 菜单。
我尝试过 Live CD 中的 Boot-Repair 工具多次,但这个问题并没有得到解决。我还尝试过使用终端进行一些手动修复,如网上建议的那样,但也没有用。我是 Ubuntu 新手,因为这是我第一次安装,我正在寻求帮助。
我真的很喜欢 Ubuntu,而且我非常熟悉 Linux 命令,所以我并不是一个完全的初学者,但我确实需要一些帮助来弄清楚如何正确设置我的系统。
可以找到我当前设置的启动信息摘要这里
提前感谢任何帮助。
答案1
根据您的启动信息摘要
=> Windows 7/8/2012 安装在 /dev/sda 的 MBR 中。
您已将 Windows 引导程序安装到 MBR 中,并将 grub 安装到分区 /dev/sda6 中。因此,您的计算机将直接启动到 Windows 引导程序,而该程序对您的 grub、linux 等一无所知。
您需要将 grub 直接安装到 sda,而不是分区(sda6)。
为此,使用任何方式启动你的 Linux(你可以使用扑通启动管理器从 CD 或任何 CD 中),然后在控制台中执行sudo grub-install /dev/sda
(这会将其安装在 mbr 中),然后sudo update-grub
(这会更新 grub 菜单)。
根据在 sda6 上找到的 grub.conf 判断,update-grub 会自动将 Windows 启动项添加到菜单中。
然后您可以启动任何已安装的操作系统和 Linux(似乎这将是默认选项)。
答案2
经过多次尝试,我终于通过各种来源的一些提示解决了这个问题。首先,我感谢大家在尝试解决这个问题时提供的帮助。虽然没有一个答案能直接解决问题,但它们都帮助我找到了解决问题的方法,所以谢谢你们。
直接将 GRUB 安装到 /dev/sda 的 MBR 中是行不通的,因为我认为 Windows 和 Sony 很好地掩盖了 Windows 在我的计算机上的实际启动方式。最后,我不得不将“grubx64.efi”文件复制到 Windows 的启动管理器文件上。以下是我为了安全有效地执行此操作所采取的步骤。我将介绍安装 Ubuntu 的每一个步骤,以防遇到类似问题的人需要彻底的答案。
在装有 Windows 7 的 Sony Vaio S 上安装 Ubuntu 15.04 的步骤
注意:仅当您觉得已经用尽所有其他可能选项时才应使用此过程。此过程可行,但需要重命名 Windows 启动文件,如果操作不当,可能会很危险。我强烈建议在继续操作之前备份重要信息。
为 Ubuntu 安装准备硬盘
- 启动进入 Windows
- 如果需要的话,你可以对硬盘进行碎片整理,但这不是必需的。
- 将 Windows 分区缩小到所需的大小。我建议先确定要为所有文件和安装等留出多少空间,然后将 RAM 的大小添加到这个大小。
- 有关如何缩小分区的视觉教程,请单击这里
- 例如:我想为我的 Ubuntu 系统保留 50GB,我有 16GB 的 RAM。因此我将分区缩小了 66GB。但是 Windows 以 MB 为单位计算缩小量,因此您需要将所需大小乘以 1024。在我的例子中,66 x 1024 = 67584MB
- 注意:如果您当前的安装不是已经有 ESP(EFI 系统分区),那么我建议您按照另一个教程进行安装。本教程专门针对在具有 ESP 的计算机上的安装,由于 Windows 安全措施而导致启动问题。了解有关 UEFI 和 ESP 的更多信息这里
从 Live CD 或 USB 启动 Ubuntu
- 当 GRUB 菜单出现时,单击“无需安装即可试用 Ubuntu”如果您不熟悉 Ubuntu,我建议您先试用一段时间,以确保这是您想要安装的东西。请注意,考虑到您使用的是 CD 或 USB 记忆棒,所有内容的加载速度都会非常慢。
当 Ubuntu 最终启动并运行时,单击桌面上的徽标,上面写着“安装 Ubuntu XX.XX”,无论你正在安装什么版本。在我的情况下是 15.04。
按照说明单击菜单(如果您的互联网连接速度很快,尤其是在 SSD 上安装时,我建议单击安装“第三方驱动程序”和“安装更新”复选框。
如果您希望更快地安装,那么请不要选中这些框,因为您以后可以随时执行这些步骤。
重要的:当您到达“分配驱动器空间”菜单时,您需要单击“其他”选项,因为这是我们设置您在步骤 1 中准备的分区的地方。
创建分区:
- 创建交换分区。选择可用空间分区,然后单击左下角的加号按钮。使大小等于您的 RAM 大小,在我的情况下是 16GB (16384MB)。选择“主”作为分区类型,选择“空间开头”作为位置,选择“交换”作为部分。注意:选择“交换”时,挂载点选项应该会消失。单击“确定”
为所有文件和根目录创建分区。这是所有文件和程序所在的主分区。选择可用空间,单击左下角的加号按钮。使大小等于您拥有的剩余可用空间(编辑器应该会自动执行此操作)。选择“主”作为分区类型,选择“此空间的开头”作为位置,选择“Ext4 日志文件系统”作为用途,最后选择“/”(根目录)作为挂载点。单击“确定”
注意:不应再有“可用空间”。如果还有剩余,请确保所有分区大小加起来等于您在步骤 1 中缩小窗口的总 MB 数。
重要的:选择“引导加载程序安装设备”选项时,您需要选择与“/boot”目录相同的位置。由于这是在 ESP 系统上安装,因此您的引导目录将与 Windows 引导管理器位于同一位置。
在我的情况下,这是“/dev/sda3”,但应该有一个描述说“Windows 启动管理器”或类似的内容,这样您就知道您的 ESP 在哪个设备上。
如果安装程序中没有描述,则打开 GParted 并在标签部分中查找描述 Windows 启动管理器的内容,这是您要查找的位置。在“用于引导加载程序安装的设备”中选择该设备
现在单击右下角的“立即安装”按钮。这是无法挽回的。只有当你确定所有设置都正确时才可以继续
安装完成后,请勿单击重新启动。请单击“继续尝试 Ubuntu”链接并继续执行步骤 7。
关闭所有打开的程序和窗口。
注意:在本节中,将“/dev/sda3”替换为您在步骤 6 末尾为引导加载程序安装选择的设备。
打开终端并执行以下操作,同时确保仔细阅读并慢慢来。
我们需要确定 Windows 启动管理器文件的位置。它很可能位于“/EFI/Microsoft/Boot/bootmgfw.efi”路径中,就像我的一样,但我们需要确认一下。
我知道的唯一方法是更新 grub 并让它告诉我们它在哪里找到了启动管理器。通过输入以下内容来执行此操作,记得将“/dev/sda3”替换为您安装启动加载程序的设备:
sudo mount /dev/sda3 /mnt cd /mnt sudo update-grub
该
cd /mnt
命令对于进入安装 grub 的目录是必需的,并且稍后在导航到其他目录时也会很有用。该update-grub
命令应输出类似以下内容。这是我输出的内容:jrichter@RICKY:~$ sudo update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.19.0-22-generic Found initrd image: /boot/initrd.img-3.19.0-22-generic Found linux image: /boot/vmlinuz-3.19.0-15-generic Found initrd image: /boot/initrd.img-3.19.0-15-generic Found Windows Boot Manager on /dev/sda3@/EFI/Microsoft/Boot/bootmgfw.efi done
查看最后一行,即“完成”之前的一行,我们应该可以看到启动管理器的位置。我的意思是在
/dev/sda3
以下位置找到了 Windows 启动管理器。/EFI/Microsoft/Boot/bootmgfw.efi
这是系统正常启动时调用的启动文件的确切位置,这就是我们需要替换的内容。笔记:如果更新 GRUB 时出现错误或者找不到 Windows 启动管理器的位置,则可能是您安装了错误的设备,或者在安装期间将引导加载程序安装到了错误的设备上。
如果一切顺利,并且您现在了解了 Windows 启动的文件和位置,那么我们就可以继续了。对于剩余的步骤,请记住将我的启动文件所在的位置替换为您的位置,尽管我敢打赌它们是相同的。
继续输入以下命令:
转到启动文件所在的目录:
cd EFI/Microsoft/Boot
将正常的 Windows 启动文件复制到备份中,并将新文件命名为“bootwin.efi”,我们将 Windows 7 设置为在 GRUB 内部启动:
sudo cp bootmgfw.efi bootmgfw.efi.bkp sudo cp bootmgfw.efi bootwin.efi
将 GRUB 加载程序文件复制到正常的 Windows 启动文件上。这是为了让您的机器误以为它正在加载 Windows,但实际上它会加载 GRUB 菜单。输入以下内容:
cd /mnt/EFI sudo cp ubuntu/grubx64.efi Microsoft/Boot/bootmgfw.efi
切换回主目录,卸载引导加载程序设备并重新启动计算机。请注意,卸载命令
umount
不是unmount
:cd sudo umount /dev/sda3 sudo reboot
计算机重新启动后,它应该启动到 GRUB 菜单。
注意:我们不再使用 Live CD 或 USB,因此请确保已删除它们。如果它无法启动到 GRUB,那么您可能在某个过程中犯了一个错误,或者我们复制的文件(“bootmgfw.efi”)实际上不是 Windows 启动管理器启动时调用的文件。
- 如果您遇到此错误,我建议将 rEFInd 下载到可启动 CD。插入可启动 CD 并启动您的计算机。rEFInd 应该能够看到所有启动文件并为您提供启动选项。我建议您浏览这些选项,直到找到一个可以正常启动 Windows 的选项。注意:启动时调用的文件位于 rEFInd 中的选项选择下。使用此文件作为要使用“grubx64.efi”复制的文件
加载 GRUB 菜单后,请启动 Ubuntu。
注意:如果所有步骤都正确执行,选择 Windows 启动管理器选项应该会带您返回 GRUB 菜单。这是因为我们将用于启动 Windows 启动管理器的文件与用于启动 GRUB 的文件复制了。
现在我们回到 Ubuntu,打开终端并输入以下命令:
输入以下命令启动管理员终端:
sudo -s
这样我们就可以执行 root 级命令,而不必每次都输入 sudo。现在输入以下内容来查找要添加 Windows 条目的文件:
cd /etc/grub.d ls
这应该会给你一个文件列表。查找一个看起来像“XX_custom”的文件,其中 XX 是一个数字,可能是十的倍数。在我的情况下是“40_custom”。文件应该是这样的:
#!/bin/sh exec tail -n +3 $0 # 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.
键入以下命令来添加 Windows 菜单项(将“40_custom”替换为适当的文件名):
nano 40_custom
在所有评论下方添加菜单项(用#表示)。
注意:将“hd0,gpt3”替换为您的引导加载程序所在的相应硬盘驱动器和设备(这与您在安装过程中安装引导加载程序的位置相同,例如,gpt3 代表 sda3)。此外,将“chainloader”后面的行替换为您确定的 Windows 引导文件所在的相同位置。
现在输入以下内容,确保最后的文件名是我们之前通过复制“bootmgfw.efi”创建的文件名。我将其命名为“bootwin.efi”:
menuentry "Windows 7" { root='hd0,gpt3' chainloader /EFI/Microsoft/Boot/bootwin.efi }
现在按“Ctrl-X”,然后按“Y”,然后按“Enter”保存更改。确保您在终端中,
sudo -s
否则将不允许进行更改。最后,我们需要用新条目更新 GRUB,然后重新启动系统以确保一切正常。输入以下命令执行此操作:
update-grub reboot
系统启动后,GRUB 应默认加载,您应该会看到一个新条目,其名称与您在“XX_custom”文件中指定的名称相同。在我的情况下,它显示为“Windows 7”。选择 Windows 选项以确保它正确加载,因为它应该以与安装前相同的方式启动 Windows。
重新启动并确认 Ubuntu 选项仍然有效。
恭喜!您已全部完成,如果一切顺利,您已在装有 ESP 和 Windows 的机器上正式安装了 Ubuntu。您现在可以双启动两个最好的操作系统 :)