我设置了一个多重引导系统。该系统有三个驱动器。多重引导配置了 Windows XP、Windows 7 和 Ubuntu - 全部位于第一个驱动器上。驱动器上还剩下大量未分区空间,我保留这些空间用于将来添加其他操作系统和存储文件。
有一天,我继续下载分区向导,并在 Windows 7 中创建了一个逻辑 NTFS 分区,仍然有一些未分区的空间。一切都运行正常,直到几天后我重新启动计算机。
现在我得到:
error: unknown filesystem.
grub rescue>
首先,我很惊讶没有找到任何类型的帮助命令,通过尝试:
help
,?
,man
,--help
,-h
,bash
,cmd
, ETC。
现在我被无法启动的系统困住了。我开始研究这个问题,发现人们通常建议启动到 Live CD 并从那里修复问题。有没有办法在 grub rescue 中修复这个问题,而不需要 Live CD?
更新
按照以下步骤保留输入到 GRUB 救援的命令,我能够启动到 initramfs 提示符。但除此之外就没有什么可做的了。
到目前为止,阅读手册grub 救援,我能够使用ls
命令查看我的驱动器和分区。对于第一个硬盘,我看到以下内容:
(hd0) (hd0,msdos6) (hd0,msdos5) (hd0,msdos2) (hd0,msdos1)
我现在知道 (hd0,msdos6) 包含 Linux,因为它ls (hd0,msdos6)/
列出了目录。其他会给出“错误:未知文件系统”。
更新2
执行以下命令后,我现在进入启动菜单并可以启动 Windows 7 和 Ubuntu,但重新启动时我必须重复这些步骤。
ls
ls (hd0,msdos6)/
set root=(hd0,msdos6)
ls /
set prefix=(hd0,msdos6)/boot/grub
insmod /boot/grub/linux.mod
normal
更新 3
谢谢 Shashank Singh,根据您的指示,我已将步骤简化为以下步骤。我从您那里了解到,我可以用 6 替换 msdos6,并且我只需执行 即可insmod normal
。insmod /boot/grub/linux.mod
现在我只需要弄清楚如何在 grub 内部保存此设置,而无需启动任何操作系统。
set root=(hd0,6)
set prefix=(hd0,6)/boot/grub
insmod normal
normal
更新 4
嗯,这似乎是启动 Linux 的必要条件。启动 Ubuntu 后,我执行了手动的:
sudo update-grub
sudo grub-install /dev/sda
这并没有解决问题。我仍然收到 grub 救援提示。我需要做什么才能永久修复它?
我还了解到,对于某些命令,hd0 中的驱动器号需要转换为 /dev/sda 中的驱动器号。hd1 将是 sdb,hd2 将是 sdc,依此类推。grub 中列出的分区(hd0,msdos6)将转换为 /dev/sda6。
更新 5
我不明白为什么下面没有修复 grub:
sudo update-grub
sudo grub-install /dev/sda
所以我下载了启动修复根据以下回答https://help.ubuntu.com/community/Boot-Repair帖子。在我选择“推荐修复(修复最常见的问题)”选项后,这似乎起了作用。
答案1
我不明白为什么下面没有修复 grub:
sudo update-grub
sudo grub-install /dev/sda
所以我下载了启动修复根据以下回答保留输入到 GRUB 救援的命令帖子。在我选择“推荐修复(修复最常见的问题)”选项后,这似乎起了作用。
我也用过Grub 定制器自定义启动项的顺序。
答案2
使用:
set prefix=(hdX,Y)/boot/grub
。使用之前确定的值。
示例:如果 Ubuntu 系统在 sda5 上,请输入:set prefix=(hd0,5)/boot/grub
set root=(hdX,Y)
。 例子:set root=(hd0,5)
insmod normal
. 尝试加载正常模块。normal
我们基本上需要 GRUB 知道/boot/grub
文件夹在哪里。如果这不起作用,我想从启动 CD 安装 GRUB 是一个不错的选择。
答案3
此问题还有另一个原因。在这个特定情况下,GRUB 不知何故损坏,需要修复或重新安装。但是,如Grub 救援失败,出现“启动修复”错误“未知文件系统”,也可能是安装 GRUB 的根分区已损坏。要修复此问题:
这是一个可行的解决方案,但最好不要使用,以免根分区进一步损坏。运行命令fsck -t ext4 /dev/sda1
,此程序会尝试搜索并修复损坏的文件系统上的错误。将 sda1 替换为您的实际根分区。将 ext4 替换为实际文件系统;您必须了解文件系统,否则分区将进一步损坏。请参阅修复损坏的文件系统了解更多信息。
虽然这个问题有答案,但还有另一种方法可以解决这个问题,这种方法对我来说很有效。视频中解释了这些步骤Grub Rescue - 新手指南简而言之,它将完全重新安装 GRUB 2,而不是修复它。
因为观看这个视频太痛苦了,所以我将在下面列出步骤(无论观看视频有多痛苦,我都应该这样做)
- 启动 Ubuntu 的实时会话。视频使用的是实时 CD,而我使用的是实时 USB。我确保实时 USB 中的 Ubuntu 版本与我硬盘上的版本相同。
- 找到根分区的安装位置。在视频中,用户使用 Nautilus 浏览已安装的每个驱动器。它使用一长串数字和字符进行安装。如果是这种情况,请按照以下步骤重新安装分区。否则,请继续执行步骤 5。
- Ctrl使用++调出终端Alt,T并使用
mount
命令查找分区的名称。 - 安装分区。在媒体文件夹中创建一个新文件夹。
sudo mkdir /media/ubuntu
然后只需将您的分区安装到该文件夹即可。其中的sudo mount /dev/sdxx /media/ubuntu
位置在步骤 3 中确定。xx
sdxx
将以下目录从您的 Live CD/USB 根目录绑定到您的 Ubuntu 版本根目录。目录为 和
dev
proc
。sys
使用以下命令执行此操作:sudo mount --bind /dev /media/ubuntu/dev sudo mount --bind /sys /media/ubuntu/sys sudo mount --bind /proc /media/ubuntu/proc
将根目录更改为 Ubuntu 分区上的目录。
sudo chroot /media/ubuntu/
- 完成上述操作后,再次安装 GRUB 2 会将其安装到 Ubuntu 发行版的根目录中,而不是实时 CD/USB 的根目录中。因此,继续运行
sudo grub-install /dev/sdx
这就是使用实时 CD/USB 修复 GRUB 的方法。此方法由 YouTube 用户 crazytechzone 开发。
答案4
在 Ubuntu 中安装 Boot-Repair
在 Ubuntu live-CD 或 live-USB 上启动您的计算机。
选择“试用 Ubuntu”
连接互联网
打开一个新的终端(Ctrl++ ),然后输入:AltT
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
按Enter。
然后输入:
sudo apt-get install -y boot-repair && boot-repair
按Enter。
使用启动修复
建议修复
从以下任一方式启动 Boot-Repair:
a. Dash(屏幕左上角的 Ubuntu 徽标)
b. 或者系统->管理->启动修复菜单(仅限 Ubuntu 10.04)
c. 或者在终端中输入“boot-repair”
然后点击“建议修复”按钮。修复完成后,记下纸上显示的 URL(paste.ubuntu.com/XXXXX),然后重新启动并检查是否恢复了对操作系统的访问。
如果修复不成功,请通过电子邮件或论坛向帮助您的人指出 URL。