赞
踩
error: can't find command `linux`
error: can't find command `initrd`
这里最主要是grub与efi的关系,在很多老的模式中,是不支持uefi模式的,所以配置成linux与initrd模式在grub.cfg可以正常引导启动。而在支持uefi模式下,如果不使用secure boot,则可以继续使用linux与initrd配置,但一旦使用了secure boot,将会报错不能找到这两个命令,这时,重新通过
grub2-mkconfig -o /boot/efi/boot/grub/grub.cfg //根据自己实际的grug.cfg位置来选择
就可以在grub.cfg生成带有linuxefi与initrdefi的配置从而成功引导。
报错如下:
error: can't find command `linux`
error: can't find command `initrd`
解决1:
直接找到自己生成的grub.cfg文件,将它的linux用linuxefi替换,将initrd用initrdefi替换保存重启,则可以正常进入引导。
但它的缺陷是一旦每次重新使用grub2-mkconfig生成grub.cfg,将需要重新替换,略麻烦并且不是很规范的方法。
解决2:
如果再grub界面,没有进入系统,则按下e键进入编辑界面,来进行替换,替换完成后·“ctrl+x”进入执行开始引导。
模板如下所示,我们打开10_linux文件
[root@localhost grub.d]# ls /etc/grub.d/
00_header 01_users 20_linux_xen 30_os-prober 41_custom
00_tuned 10_linux 20_ppc_terminfo 40_custom README
找到这个代码段:
106 linuxefi="linux"
107 initrdefi="initrd"
108 case "$machine" in
109 i?86|x86_64)
110 sixteenbit="16"
111 linuxefi="linuxefi"
112 initrdefi="initrdefi"
113 ;;
114 aarch64)
115 linuxefi="linux"
116 initrdefi="initrd"
117 ;;
118 esac
修改为
106 linuxefi="linux"
107 initrdefi="initrd"
108 case "$machine" in
109 i?86|x86_64)
110 sixteenbit="16"
111 linuxefi="linux"
112 initrdefi="initrd"
113 ;;
114 aarch64)
115 linuxefi="linux"
116 initrdefi="initrd"
117 ;;
118 esac
然后重新生成grub.cfg文件,也可以解决该问题,主要原理为将efi模式的配置强制生成为不带efi的,比上一种方法好一些,不过也不是太理想。
我这里采用的是grub2.04的版本,可以从上面链接下载安装配置,安装配置完成后,将其util目录下的grub.d文件夹替换系统自带的注意尽量不要覆盖原来的grub,否则可能会引起grub损坏导致引导系统失败很难修复,我安装grub2.04在了/usr/local下,同时efi配置放到了/boot/efi/boot与/boot/efi/centos_test下,不与自带的配置冲突,然后在BIOS配置中将我重新安装的grub放在第一个引导,将系统自带的grub放在第二个,这样当我的grub出问题时可以退出然后进入系统自带的grub,从而进入系统进行修复,比较安全。
因此,我替换的grub.d自然是在/usr/local/etc/grub.d(系统自带的在/etc/grub.d,不要搞到一起一团麻),然后使用自己安装的grub进行生成grub.cfg文件
/usr/local/sbin/grub-mkconfig -o /boot/efi/boot/grub/grub.cfg //我使用的是centos,centos自带的PATH不包含/usr/local路径,因此使用绝对路径,另外这样的好处是不影响系统自带grub的使用。
若成功生成引导,则可以重启引导啦
这是因为系统命令目前不支持efi这种配置或者不在security boot下,因此找不到,可以使用与
error: can't find command `linux`
error: can't find command `initrd`
类似的替换的方法来解决。
一段网上类似的替换方案解释:
If you want a “quick fix”, you can try locating “grub.cfg” (should be in “/boot/grub2”), and edit it. Change “linuxefi” to “linux” everywhere, and change “initrdefi” to “initrd” everywhere. Then perhaps plain grub2 can boot it.
通过手册到命令章节进行查找看支持的命令,我查到的grub关于linux与initrd的命令支持:
这里主要通过“TAB”键的方式了,下面截图分别为支持linux,initrd的“TAB”情况与支持linuxefi,initrdefi的“TAB”情况显示:
目前经过实际测试,centos7.8自带的grub是支持initrdefi与linuxefi的,自己装的grub2.04只有linux与initrd命令。
时间仓促,就当随笔来记录了,格式整理的也不好,很多实际操作碰到的问题也很难详细描述清楚(可能自己确实也挺菜哈),目前也将新安装grub2.04而不影响原有grub的操作流程实际跑通了,可以防止系统被自己玩坏而导致进不去系统,有时间把它记下来。另外目前默认的ubuntu16.04支持的命令为linux,initrd;而centos7.8为linuxefi,initrdefi,grub2.04在ubuntu16.04配置起来自己不需要进行grub.d替换了,从/etc/grub.d拿模板就好。而centos7.8则会报
的错误,具体使用上面哪种方法解决就看自己的需求了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。