我已经安装了 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
好极了,我们找到了根文件系统。您可以省略
msdos
和gpt
标签。如果您省略斜线,它将打印有关分区的信息。您可以使用以下命令读取系统上的任何文件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.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
。
作者: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