我正在对 Ubuntu 14.04 进行标准更新,同时我正在写一些电子邮件,这时它关闭了,出现了以下信息: https://i.stack.imgur.com/60JZD.jpg GNU GRUB!我记得它是更新的一部分……我现在该怎么办?
答案1
这看上去相当糟糕。
GRUB 是一个引导加载程序 - 它在 BIOS 组织硬件后初始化您的操作系统。
要么你遇到了严重的问题,要么你只需要下载 GRUB,将其放在 CD 或 USB 上,然后刷新当前版本的 Grub。鉴于你掌握的信息很少,我只能说这么多。
答案2
我按照以下说明从 grub 启动:
https://web.archive.org/web/20140616032147/http://www.linux.com/learn/tutorials/776643-how-to-rescue-a-non-booting-grub-2-on-linux
我的操作系统启动了。从那里我通过终端进行操作sudo update-grub
。这对我来说很有效!
更新,因为博客文章被删除了:
GRUB 2 命令 Shell
GRUB 2 命令 shell 与旧版 GRUB 中的 shell 一样强大。您可以使用它来发现启动映像、内核和根文件系统。事实上,它让您可以完全访问本地计算机上的所有文件系统,而不管权限或其他保护措施如何。有些人可能认为这是一个安全漏洞,但您知道古老的 Unix 格言:谁拥有机器的物理访问权限,谁就拥有它。
当您处于grub>
提示符下时,您会拥有许多类似于任何命令 shell 的功能,例如历史记录和制表符补全。 grub rescue> 模式更加有限,没有历史记录,也没有制表符补全。
如果您在正常运行的系统上练习,请在出现 GRUB 启动菜单时按 C 键打开 GRUB 命令 shell。您可以使用箭头键上下滚动菜单条目来停止启动倒计时。在 GRUB 命令行上进行实验是安全的,因为您在那里所做的一切都不是永久的。如果您已经盯着 grub> 或 grub rescue> 提示符,那么您就可以开始了。
接下来的几个命令适用于 grub> 和 grub rescue>。您应该运行的第一个命令将调用分页器,用于分页长命令输出:
grub> set pager=1
等号两边不能有空格。现在让我们进行一些探索。输入 ls 列出 GRUB 看到的所有分区:
grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)
这些 msdos 东西是什么?这意味着该系统具有旧式 MS-DOS 分区表,而不是崭新的全局唯一标识符分区表 (GPT)。(请参阅在 Linux 中使用新的 GUID 分区表(告别古老的 MBR)。如果您运行的是 GPT,它会显示 (hd0,gpt1)。现在让我们来窥探一下。使用 ls 命令查看系统上有哪些文件:
grub> ls (hd0,1)/
lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/
lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
initrd.img initrd.img.old
好极了,我们找到了根文件系统。您可以省略 msdos 和 gpt 标签。如果您省略斜线,它将打印有关分区的信息。您可以使用 cat 命令读取系统上的任何文件:
grub> cat (hd0,1)/etc/issue
Ubuntu 14.04 LTS \n \l
在多重启动系统中,阅读 /etc/issue 可能对识别各种 Linux 有用。
从 grub> 启动
这是如何设置启动文件并从 grub> 提示符启动系统。通过运行 ls 命令,我们知道 (hd0,1) 上有一个 Linux 根文件系统,您可以继续搜索,直到验证 /boot/grub 的位置。然后使用您自己的根分区、内核和 initrd 映像运行以下命令:
grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot
第一行设置根文件系统所在的分区。第二行告诉 GRUB 您要使用的内核的位置。开始输入 /boot/vmli,然后使用制表符补全填写其余部分。输入 root=/dev/sdX 以设置根文件系统的位置。是的,这似乎是多余的,但是如果您忽略了这一点,您将得到内核恐慌。您如何知道正确的分区?hd0,1 = /dev/sda1。hd1,1 = /dev/sdb1。hd3,2 = /dev/sdd2。我想您可以推断出其余部分。
第三行设置initrd文件,必须与内核版本号一致。
第四行启动您的系统。
在某些 Linux 系统上,当前内核和 initrd 被符号链接到根文件系统的顶层:
$ ls -l /
vmlinuz -> boot/vmlinuz-3.13.0-29-generic
initrd.img -> boot/initrd.img-3.13.0-29-generic
因此你可以像这样从 grub> 启动:
grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot
从 grub-rescue> 启动
如果您处于 GRUB 救援 shell 中,命令会有所不同,并且您必须加载 normal.mod 和 linux.mod 模块:
grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot
加载两个模块后,Tab 键补全功能应该开始工作。
进行永久性修复
成功启动系统后,运行以下命令来永久修复 GRUB:
# update-grub
Generating grub configuration file ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-3.13.0-29-generic
Found initrd image: /boot/initrd.img-3.13.0-29-generic
Found linux image: /boot/vmlinuz-3.13.0-27-generic
Found initrd image: /boot/initrd.img-3.13.0-27-generic
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
当您运行 grub-install 时,请记住将其安装到硬盘驱动器的引导扇区而不是分区,因此不要使用像 /dev/sda1 这样的分区号。
答案3
正如您所述,这是 GRUB 的问题,可以解决。另外,正如您所知,这是由于更新不完整造成的。
先决条件:
- 与您当前的 Ubuntu 版本完全相同的 LiveISO 版本。如果您有互联网连接,效果会更好。
现在,从这里:
启动您的 Live Ubuntu,然后选择“试用 Ubuntu”。
打开终端并输入:
sudo mount /dev/sdXY /mnt
其中 X 是您的 Ubuntu 安装分区的字母,例如 a 或 b。如果您感到困惑,请在 Live 环境中打开 Gparted 并查找您的 ext4 分区。
Y 是数字。如果是主分区,则它将是以下任意一个:1、2、3、4;如果是逻辑分区,则它应该从 5 开始,依此类推。
现在,输入:
sudo mount --bind /dev /mnt/dev &&
sudo mount --bind /dev/pts /mnt/dev/pts &&
sudo mount --bind /proc /mnt/proc &&
sudo mount --bind /sys /mnt/sys
接下来输入:
sudo chroot /mnt
然后:
grub-install /dev/sdX
记得改变X现在,更新 grub:
update-grub
最后,输入以下命令退出:
出口 &&
sudo umount /mnt/sys &&
sudo umount /mnt/proc &&
sudo umount /mnt/dev/pts &&
sudo umount /mnt/dev &&
sudo 卸载/mnt
然后,重新启动。
这应该可以解决您的问题,如果您的问题仍然存在,请在下面评论。