如何从 Grub Shell 启动

如何从 Grub Shell 启动

我已经安装了 Linux Mint Cinnamon,但每当我打开电脑时,它都会进入 grub shell,我不知道为什么,我也不知道如何从 shell 启动 GUI Linux Mint,请帮帮我

答案1

我有同样的问题!解决方案如下: https://www.linux.com/tutorials/how-rescue-non-booting-grub-2-linux/

引自上述网站。

[...]

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)。如果您运行的是 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

好极了,我们找到了根文件系统。您可以省略msdosgpt标签。如果您省略斜线,它将打印有关分区的信息。您可以使用以下命令读取系统上的任何文件cat

grub> cat (hd0,1)/etc/issue
Ubuntu 14.04 LTS n l

/etc/issue在多重启动系统中,阅读可能对识别您的各种 Linux 有用。

从 grub> 启动 这是如何设置启动文件并从提示符启动系统grub>。通过运行命令,我们知道ls上有一个 Linux 根文件系统(hd0,1),您可以继续搜索,直到验证它在哪里/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.modlinux.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

作者:Carla Schroder

答案2

不久前,当我尝试在我的计算机上升级 Ubuntu 时也遇到了同样的问题。

我使用以下来源来帮助我入门:https://www.linuxfoundation.org/blog/blog/classic-sysadmin-how-to-rescue-a-non-booting-grub-2-on-linux

但我确实遇到了网站未涉及的几个问题,我想详细说明以帮助可能遇到同样问题的人。

如果你通读本文,主要命令如下:

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

我的主要问题是命令root=/dev/sda1

我的电脑没有这个选项。因此,当我将其输入到 grub CLI 并尝试启动操作系统时,它失败了,我被带回到 grub。

我的计算机有一个 NVM 快速 (NVMe) pci SSD,所以这就是为什么放入root=/dev/sda1不起作用的原因。

以下网站 (https://www.cyberciti.biz/faq/linux-list-disk-partitions-command/)对不同类型的磁盘进行了细分:

/dev/hd*– IDE 磁盘。/dev/hda 将是第一个 IDE 硬盘,/dev/hdb 将是第二个 IDE 硬盘,依此类推。

/dev/sd*– SCSI 或 SATA 磁盘,包括 SSD。/dev/sda 将是第一个 SATA/SCSI 硬盘,/dev/sdb 将是第二个 SATA/SCSI 硬盘,依此类推。

/dev/nvme*– NVM Express (NVMe) pci SSD。/dev/nvme0n1 将是第一个 NVMe SSD,/dev/nvme1n1 将是第二个 NVMe SSD,依此类推。

grub 不像普通的 CLI,只能运行有限数量的命令。

我必须cat /etc/fstab在 grub 中运行才能找出磁盘的确切名称。

在 grub 中运行时cat /etc/fstab,我看到的输出是:

grub> cat /etc/fstab
# /etc/fstab: static filesystem information.
...
# <filesystem> <mountpoint> <type> <options> <dump> <pass>
# / was on /dev/nvmeXXXXX during installation
UUID=XXXXXXXXXXX / ext4 errors=remount-ro 0

我能够确定我应该使用/dev/nvmeXXXXX以下命令来返回我的操作系统:

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/nvmeXXXXX
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

相关内容