我试图在 Linux 中拯救 GRUB。我能够按照本教程登录操作系统:
https://www.lisenet.com/2014/grub2-rescue-mode-error-unknown-filesystem/
我必须升级 GRUB 才能解决问题。但是,当我运行时grub-install,出现错误:
$ grub-install /dev/sda
grub-install: error: cannot find EFI directory.
Run Code Online (Sandbox Code Playgroud)
我的文件系统包含sda4、sda5和 分别sda6用于 EFI 系统、Linux 交换和 Linux 文件系统。
我对使用 mount 或其他命令的经验不是很丰富。
jdw*_*olf 23
默认情况下,当您运行grub-install 时,它假定 EFI 系统安装为 /boot/efi
这取决于您安装 EFI 系统的发行版,而在某些发行版上,它在启动后未安装。
首先检查 /boot/efi 是否挂载
mount | grep /boot/efi
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请先尝试以下操作,看看它是否安装在其他地方。
mount | grep /dev/[efi device]
Run Code Online (Sandbox Code Playgroud)
如果这些工作都不做:
mount /dev/[efi device] /mnt
Run Code Online (Sandbox Code Playgroud)
现在运行:
grub-install --efi-directory=[efi dir]
grub-mkconfig -o /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)
其中 [efi dir] 是 /boot/efi 或 /mnt,而 [efi device] 是具有 EFI 系统分区的设备。如果你不知道使用命令lsblk -o NAME,PARTTYPE,MOUNTPOINT | grep -i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B"
小智 11
efi 目录必须位于/boot/efi/中
要知道efi在哪个分区,我们必须检查分区表,所以如果你的主磁盘是/dev/sda那么。
fdisk -l /dev/sda
Device Start End Sectors Size Type
/dev/sda1 2048 309247 307200 150M EFI System
/dev/sda2 309248 964843519 964534272 459.9G Linux filesystem
/dev/sda3 964843520 1000214527 35371008 16.9G Linux filesystem
Run Code Online (Sandbox Code Playgroud)
在结果中搜索EFI System或EFI (FAT-12/16/32)等内容
一旦您知道分区号(在本例中为 sda1),我们必须将其安装在/boot/efi中。
如果由于某种原因目录 /boot/efi/ 不存在,请创建它:
mkdir /boot/efi
Run Code Online (Sandbox Code Playgroud)
并将 efi 挂载到该目录中:
mount /dev/sda1 /boot/efi/
Run Code Online (Sandbox Code Playgroud)
我认为仅此而已,您必须能够在磁盘中安装 grub。
我刚刚遇到这个问题。我启动了救援 USB 记忆棒。让我描述一下对我有用的修复方法。
四处搜寻,gdisk -l /dev/sda我可以看到我原来的根分区是/dev/sda2. 要访问它,我输入sudo mount /dev/sda2 /mnt
到目前为止,一切都很好。让我首先描述什么不起作用,然后是解决方案。有些页面建议chroot /mnt然后grub-install,但这行不通;给出grub-install: error: cannot find EFI directory.错误。
根据其他建议,我看到我的 EFI 分区是/dev/sda1这样,所以我尝试sudo mount /dev/sda1 /mnt/boot/efi再次 chroot。现在,grub 抱怨缺少/dev所以我mount --bind /dev/ /mnt/dev。...但是随后 grub 抱怨了其他事情。事情像滚雪球一样失控。chroot不是答案。
起作用的是:grub-install -d /mnt/usr/lib/grub/x86_64-efi --boot-directory=/mnt/boot /dev/sda
请注意,该-d标志是强制性的,否则 grub 会尝试使用/usr/lib/grub/i386-pc救援映像,该映像不包含正确的内容。
耶耶!我的系统现在又可以启动了!
Grub 救援模式可以视为
set root=(hd0,gpt6)
set prefix=(hd0,gpt6)/boot/grub
insmod normal
normal
Run Code Online (Sandbox Code Playgroud)
登录后,输入sudo update-grub && sudo grub-install /dev/sda.