我不知道为什么或如何...但我的引导加载程序已被破坏。目前,我已经在 PC 上安装了 Windwos 8、Ubuntu 15 和 Ubuntu 14,但只有 Ubuntu 15 在引导加载程序上可见。我尝试了更多方法来解决这个问题,但都没有奏效:
- 首先,我已经安装了 Kali Linux,我以为安装一个新的引导程序就可以解决问题,但它不起作用
- 之后我再次用 Ubuntu 14 和 Ubuntu 15 替换了 Kali Linux。我认为这可以解决我的问题,但是同样没有任何结果。
之后,我使用 Live USB Stick 打开了 Ubuntu 14.0.4,并安装了 Boot-repair 工具来修复我的启动,但同样没有任何效果。
我尝试的最后一个想法是遵循以下命令:
使用 Live CD 启动机器。
打开一个终端。
使用 fdisk 查找设备大小,找出内部磁盘的名称。例如:
sudo fdisk -l
将 GRUB 引导加载程序安装到正确的磁盘上(下面的示例假设它是 /dev/sda):
grub-install --recheck --no-floppy --root-directory=/ /dev/sda
但是当我执行完第三个命令后,我收到了该消息:WARNING: GPT (GUID Partition Table) detected on '/dev/sdb1'! The util fdisk doesn't support GPT. Use GNU Parted.
而当我执行完最后一个命令后,我收到了该消息:Installing for i386-pc platform. grub-install: error: cannot open directory /boot/grub/i386-pc: No such file or directory.
所以我的问题是,有人知道我该如何解决吗?
这是输出启动信息脚本。
答案1
我的引导加载程序已被破坏。目前,我已经在 PC 上安装了 Windwos 8、Ubuntu 15 和 Ubuntu 14,但只有 Ubuntu 15 在引导加载程序上可见
正确诊断此类问题需要更多信息,从分区表信息和 GRUB 配置文件开始。这些信息都可以由启动信息脚本,可以从boot-info-script
包中安装,IIRC。运行此工具,它应该会生成一个名为的文件RESULTS.txt
。将该文件发布到pastebin 网站并在此处发布您的文档的 URL,以便我们审核。
如果没有这些诊断信息,我有一个建议可能帮助:准备一个 USB 闪存盘,里面装上我的rEFInd 启动管理器。与依赖于带有启动选项的配置文件的 GRUB 不同,rEFInd 会根据对计算机上可用启动加载程序(包括 Linux 内核)的扫描动态生成启动选项。因此,rEFInd可能使您能够启动任何操作系统。我强调的是可能因为在很多情况下 rEFInd 都无济于事,尤其是如果您实际上没有按照您认为的方式安装所有三个操作系统。(人们在安装另一个操作系统或发行版时意外破坏一个操作系统或发行版的情况很常见,因此这种情况非常有可能。Boot Info Script 输出将帮助我们确定您是否遇到过这种情况。)因此,rEFInd 解决方案充其量只是一种盲目的尝试;但至少从 USB 闪存驱动器或 CD-R 尝试它不太可能使情况变得更糟。
但它不起作用
将来,一定要更精确地说明哪些是有效的,哪些是无效的。从解决问题的角度来看,声称某件事不起作用而没有详细说明是没有帮助的。即使症状与您之前描述的完全一样,也要这样说。如果症状有所不同,即使只是略有不同,也要描述它们的不同之处。
我收到了该消息:
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb1'!
假设这是对消息的准确报告,那么您犯了一个严重的错误:您必须使用分区工具,例如fdisk
,gdisk
和parted
,整个磁盘。但是,此错误消息中指定的设备/dev/sdb1
是單一分區。相应的整个磁盘设备是/dev/sdb
(没有尾随的1
)。运行类似的命令fdisk -l /dev/sdb1
会产生误导,但无害;但如果您实际上在分区内创建了分区,则可能会破坏该分区上存在的所有数据。
正如 oldfred 指出的那样,fdisk
在 GPT 磁盘上也是无用的,至少在 Ubuntu 14.04 中是这样的。(fdisk
不过 15.04 支持 GPT。)也就是说,如果输出是准确的剪切和粘贴,没有拼写错误,那么应用于fdisk
分区而不是磁盘的错误意味着我们真的不知道磁盘是否真的是 GPT 磁盘。这反过来意味着我们不能确定 Windows 是否在 EFI 模式下启动,更不用说 Ubuntu 是否(或应该)在做同样的事情。所有这些都让我们回到我最初的观点:我们需要更多数据,以 Boot Info Script 输出的形式,然后才能对错误做出任何结论。
编辑:
您的启动信息脚本输出很有帮助。一些观察:
- 您最多有两个 Linux 安装。
/dev/sda5
包含看起来像 Ubuntu 的东西,并且/dev/sda6
似乎包含其他东西。 - 启动信息脚本显示两个 GRUB 配置文件。一个标识
/dev/sda5
为 Ubuntu,并且没有 的条目/dev/sda6
。另一个标识/dev/sda5
为 OpenSUSE 和/dev/sda6
Debian。根据您的描述,我怀疑其中第一个处于活动状态。 - 您的磁盘是 MBR,并且您的计算机正在以 BIOS/CSM/传统模式启动。这不是(或不应该是)问题,但您应该记住这一点。忽略您尝试使用 读取时收到的 GPT 警告
/dev/sda1
。fdisk
还要忽略安装 EFI 版本的 GRUB 的建议;这只会产生新的问题。 /dev/sda5
使用 ext4fs,这是 Ubuntu 的默认文件系统。/dev/sda6
使用 Btrfs,Ubuntu 支持但不是标准。Btrfs 比 ext4fs 更容易引起问题,但 Btrfs 更先进。大多数情况下,Btrfs 应该仅由完全了解其功能和怪癖的专家使用。
此时你最好的行动方案可能是逃跑引导修复在计算机上。运气好的话,这将解决问题。如果不行,我接下来想到的办法是深入研究手动引导加载程序配置;您可以安装 LILO 或 GRUB Legacy,或者创建一个自定义 GRUB 2 设置,该设置不是由 GRUB 的自动脚本配置的。不过,这种方法需要相当多的知识。有很多(大部分是较旧的)网站描述了如何执行此操作,但我手头没有任何 URL。不过,总的来说,我不建议您尝试手动引导加载程序配置;鉴于您目前的知识水平,您会发现它令人沮丧。
如果 Boot Repair 不起作用,更简单的选择可能是使用虚拟化(VirtualBox、KVM/QEMU 等)而不是多重引导。这种方法绕过了对如此复杂的引导加载程序设置的需要,因此管理起来可能更容易、更安全。但它的缺点是,您无法在客户操作系统中直接访问硬件,如果您想运行游戏,这可能是一个问题。不过,在 Ubuntu 下运行 OpenSUSE 或 Kali 应该不成问题;如果您需要直接访问硬件,您可以使用 Ubuntu。在这种情况下,您的 OpenSUSE 或 Kali 安装将存在,因此您可以熟悉这些发行版,而不是用于实际工作。由于这大概就是双启动两个 Linux 发行版的目的,所以这应该没问题。如果选择这种方式,您可能需要删除其中一个 Linux 分区(可能/dev/sda6
),并将其安装在 Linux 目录树中以用作数据存储,或者完全删除该分区并使用 GParted 将剩余的 Linux 文件系统扩展到该空间。
答案2
您是说 Kali 引发了“灾难”吗?还是您使用 Kali 时期望从只有 Ubuntu 15 的菜单转到包含 4 个系统的菜单?还是您随意破坏了 Ubuntu 15 和 Ubuntu 14,因为那里什么都没有,只是您想要一些多重启动体验?无论如何,如果启动 Ubuntu 15 没问题,并且您没有覆盖“正确”的分区,尤其是 EFI 分区,那么修复应该很简单apt-get update; apt-get upgrade
,无论是从 Ubuntu 15 本身还是从 Ubuntu 15 的高级/恢复,因为您肯定会获取新grub
版本(我猜是grub-efi
)并“自动”重新配置它。在恢复会话中,只需记住从磁盘检查开始,然后进入“根提示符”,最好通过电缆联网。
gdisk
PS 在这些 Windows 电脑上,如果您使用的是 GUI ,则应该安装并使用fdisk
和 gparted。另一方面,Boot-repair 不止一次拯救了我,当然,如果您完全按照它所说的复制和粘贴,您可能已经损坏了所有重要的分区。