如果你在更新升级到深度操作系统deepin 20.2.2后重启就进入了grub界面,那就按以下方法解决。
解决方案 首先在上面的界面执行ls看一下目录,不同的电脑可能都不一下: > ls (hdo,gpt4) (hdo,gpt3) (hdo,gpt2) (hdo,gpt1) 然后一个个试试ls (上面的目录)/boot/grub/, 一般对的那个会有grub.cfg文件,例如我的是在ls (hdo,gpt3)/boot/grub,找到这个(hdo,gpt3)之后: set root=(hdo,gpt3) # 上面找到的目录,下同 set prefix=(hdo,gpt3)/boot/grub/ insmod normal normal 然后就可以进入deepin 20.2.2系统了,但是这只是进入系统,重启还是重新引导,最后在找到解决方法,如下: cd /boot/efi/EFI cp -r UOS UOS.bak cp deepin/* UOS 注:想了解20.2.2版本的更新详情,请参考Deepin 20.2.2(深度系统20.2.2)发布下载,附新特性功能内容。
附1:deepin 20.2.2的grub-install的bug以及EFI引导的修复 deepin 20.2.2社区版的grub-install工具对于EFI引导的机器有个严重的bug,使用它安装EFI grub可能会造成deepin系统无法引导。这个问题可能在20.2.1或更早的版本已经存在,不过我没有去确认。 deepin 20.2.2的EFI引导过程大致是这样的:BIOS加载ESP分区上的/EFI/deepin/shimx64.efi文件,/EFI/deepin/shimx64.efi再加载/EFI/deepin/grub.efi,/EFI/deepin/grub.efi再执行/EFI/UOS/grub.cfg。(至于为啥是UOS,可能是需要用它的数字签名的grub.efi。更早的deepin版本还用过/EFI/ubuntu/grub.cfg。) 而deepin 20.2.2的grub-install工具只在ESP分区的/EFI/deepin/目录安装了以下文件: BOOTX64.CSV、fbx64.efi、grub.cfg、grubx64.efi、mmx64.efi、shimx64.efi。 可见,缺失了/EFI/deepin/grub.efi和/EFI/UOS/grub.cfg这两个文件,这造成了deepin系统无法启动。 修正的方法是,将ESP分区上的/EFI/deepin/grubx64.efi复制为/EFI/deepin/grub.efi,将/EFI/deepin/grub.cfg复制为/EFI/UOS/grub.cfg。 如果你有双系统,或者live cd/live usb系统,可以用另一个系统引导,然后做上述修正。windows中可以用disk genius修改ESP分区的文件。 如果只有单系统,也有办法挽救,只要你的BIOS支持选择任意EFI文件来启动。开机,进入BIOS的多重引导选择界面(不同BIOS品牌方法不一,例如我的机器是按F9),选择“选择EFI文件”,然后找到上述/EFI/deepin/grubx64.efi文件,确认启动,这时会出现"grub>"提示符,进入了grub shell。接着,输入命令"configfile /EFI/deepin/grub.cfg",回车,应该就可以进入deepin系统了。 进入deepin系统后,ESP分区默认挂载到/boot/efi目录下。如果没有,就从命令行挂载一下。然后去复制/boot/efi/EFI/deepin/grub.efi和/boot/efi/EFI/UOS/grub.cfg文件即可(可能需要sudo)。
附2:更多参考 1、如何知道是deepin的grub-install的bug? 在deepin中运行sudo grub-install --debug会显示它复制了哪些文件到ESP分区,以下是节选: grub-install:信息: copying `/usr/lib/shim/shimx64.efi.signed' -> `/boot/efi/EFI/deepin/shimx64.efi'. grub-install:信息: copying `/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed' -> `/boot/efi/EFI/deepin/grubx64.efi'. grub-install:信息: copying `/usr/lib/shim/mmx64.efi.signed' -> `/boot/efi/EFI/deepin/mmx64.efi'. grub-install:信息: copying `/usr/lib/shim/fbx64.efi.signed' -> `/boot/efi/EFI/deepin/fbx64.efi'. grub-install:信息: copying `/usr/lib/shim/BOOTX64.CSV' -> `/boot/efi/EFI/deepin/BOOTX64.CSV'. grub-install:信息: copying `/boot/grub/x86_64-efi/load.cfg' -> `/boot/efi/EFI/deepin/grub.cfg'. grub-install:信息: Registering with EFI: distributor = `deepin', path = `\EFI\deepin\shimx64.efi', ESP at hostdisk//dev/sda,gpt1. 可见并没有复制/boot/efi/EFI/deepin/grub.efi和/boot/efi/EFI/UOS/grub.cfg文件。 你也可以将ESP分区上的文件都删掉(最好先备份)或改名,然后执行grub-install来确认它生成了哪些文件。 2、怎么知道引导过程需要/EFI/deepin/grub.efi文件? 其一,如果没有这个文件,BIOS引导时会报错,说找不到grub.efi文件。不过错误信息很快闪过,可能看不清。 其二,可以用strings命令(属于包binutils)查看/boot/efi/EFI/deepin/shimx64.efi中的字符串: strings /boot/efi/EFI/deepin/shimx64.efi | grep .efi 你可以看到里面有“grub.efi”字样,但没有“grubx64.efi”字样,这就说明它需要的是grub.efi而不是grubx64.efi。 3、怎么知道引导过程需要/EFI/UOS/grub.cfg? 其一,可以用strings命令查看/boot/efi/EFI/deepin/grubx64.efi中的字符串: strings /boot/efi/EFI/deepin/grubx64.efi | grep EFI/ 发现有“/EFI/UOS”字样。不过,这还不能100%说明问题。 其二,有/EFI/deepin/grub.efi文件,但没有/EFI/UOS/grub.cfg文件时,启动机器会进入grub shell,这时查看环境变量prefix的值: echo $prefix 会显示“/EFI/UOS”,这就确认了,因为grub一般是加载$prefix/grub.cfg这个配置文件的。
相关主题 |