如何删除编译的内核?

我在我的联想E455笔记本上安装了14.10版本。
然后按照以下顺序编译了3.19内核,
因为似乎14.10与我的电脑不兼容(我看到了慢动作)。
http://www.kernel.org/下载了当前的内核。
make oldconfig
make
sudo make install

最后,无法使用新内核启动。
我该如何从grub中删除编译的内核并进行恢复?

你到目前为止尝试了什么来移除它,出了什么问题?有没有任何警告或错误信息? - David Foerster
感谢您的帮助。已经康复了,正在等待Ubuntu 15.XX的发布。 - Ohmygirl
2个回答

如果通过make install编译和安装,您需要手动删除以下条目:
/boot/vmlinuz*KERNEL-VERSION*
/boot/initrd*KERNEL-VERSION*
/boot/System-map*KERNEL-VERSION*
/boot/config-*KERNEL-VERSION*
/lib/modules/*KERNEL-VERSION*/
/var/lib/initramfs/*KERNEL-VERSION*/

然后更新grub配置:
sudo update-grub2

如果通过“Debian方法”编译,您可以使用以下命令查看已安装的内核:
dpkg --list | grep kernel-image 然后,您可以使用apt-get卸载所需的内核包。
sudo apt-get remove kernel-image-your-kernel-image

参考:


1我没有/var/lib/initramfs/目录,但这是因为我的系统中没有编译的内核吗? - jarno
6在Debian上,/var/lib/initramfs-tools/*KERNEL-VERSION* - Csaba Toth
1请考虑对新内核(2018年)进行编辑,包括:/boot/abi*KERNEL-VERSION*/boot/retpoline*KERNEL-VERSION* - WinEunuuchs2Unix

多亏了jarno的问题这里,我找到了一种实现Mudit Kapil答案的方法,只需要很少的输入并且能够捕捉到任何多余的部分。
由于只需删除内核的所有文件和目录,而这些文件和目录的路径中都会包含内核版本字符串,我们可以使用“locate”命令查找所有带有内核版本字符串的文件,并将它们删除以删除内核。
(首先使用“uname -r”命令检查当前运行的内核的名称,并确保不要删除它)
假设您想删除一个名为“4.4.6-my-kernel”的内核。您可以使用“locate -b -e 4.4.6-my-kernel”命令找到其所有现有的文件和目录(而不列出所有命名目录中的文件)。将“rm -r”附加到此命令中,并结合“xargs”使用,可以同时删除这些文件。我添加了“-p”选项,以便让“xargs”在执行之前显示目标并要求确认。
locate -b -e 4.4.6-my-kernel | xargs -p sudo rm -r

然后输入y来执行在目标上的rm -r命令。它会抱怨那些不是目录的文件不存在,因为你试图递归地删除它们(-r),但没关系,它们仍然会与目录及其内容一起被删除。完成后,只需运行
sudo update-grub

就是这样。


+1 是因为这个命令可以捕获更多的文件,比接受的答案要好。例如所有的 dkms 相关内容。我建议先运行一次不带 rm 选项的命令,只是为了查看将会被删除的所有内容。 - WinEunuuchs2Unix
为什么我不能删除当前正在运行的内核?如果那就是我想要删除的内核怎么办?是否可以在不先用另一个内核重新启动机器的情况下删除当前正在运行的内核? - Liran Funaro
1@LiranFunaro 是的,这是可能的。请查看我的回答如何仅通过命令卸载正在运行的内核?,该回答还解释了为什么这可能不是一个好主意。 - Zanna