我在最新安装的内核上运行时对 build/modprobe/make 做了一些愚蠢的操作。现在该内核无法启动。我目前正在运行以前的内核。
我该如何清理它?我只想回到 apt repo 中的“库存”最新内核。
编辑:我应该注意......我试图安装 flashcache (https://github.com/facebook/flashcache/)
我尝试过
sudo apt-get install --reinstall linux-image-generic linux-image
这并没有解决问题;所以我尝试了“恢复模式”选项,并看到在加载闪存缓存模块时出现内核恐慌......我必须在某个地方删除一些东西......
答案1
我不知道您是否有网络访问权限,但如果有,请执行以下操作:
sudo apt-get install --reinstall linux-image-generic linux-image
答案2
只需启动到以前的内核版本并输入以下内容,只需将##替换为您尝试启动的内核版本。
sudo update-initramfs -u -k 3.2.0-##-generic-pae
只需将##替换为您尝试启动的内核版本即可。
然后向 Grub 说“你好”,然后重新启动。
sudo update-grub
sudo reboot now
现在,在启动新内核时您应该不会再看到内核恐慌。
答案3
我的 VGA 驱动程序有问题,其他解决方案无法解决我的问题
最有效的解决方案是从一开始就手动删除并安装
// remove modules
sudo rm -rf /lib/modules/4.13.0-3*
remove headers
sudo rm -rf /usr/src/linux-headers-4.13.0-3*
// clear boot
sudo rm -rf /boot/initrd.img-4.13.0-3*
sudo rm -rf /boot/vmlinuz-4.13.0-3*
sudo rm -rf /boot/System.map-4.13.0-3*
sudo rm -rf /boot/config-4.13.0-3*
// refresh grub. I reboot after update grub, but maybe is not important
sudo update-grub
//check the lastes version of linux images
sudo apt-cache search linux-image |grep 4.14
# linux-image-4.14.0-1003-azure-edge - Linux kernel image for version 4.14.0 on 64 bit x86 SMP
# linux-image-extra-4.14.0-1003-azure-edge - Linux kernel extra modules for version 4.14.0 on 64 bit x86 SMP
# linux-image-4.14.0-1004-azure-edge - Linux kernel image for version 4.14.0 on 64 bit x86 SMP
# linux-image-extra-4.14.0-1004-azure-edge - Linux kernel extra modules for version 4.14.0 on 64 bit x86 SMP
// install the lastes verion
sudo apt-get install linux-image-4.14.0-1004-azure-edge linux-headers-4.14.0-1004-azure-edge linux-image-extra-4.14.0-1004-azure-edge
// restart pc
sudo reboot now
答案4
为此,您需要列出最新的 ubuntu 内核并重新安装它。以下是一行代码
apt install --reinstall `dpkg -l|grep linux-image|grep -v image-generic|cut -d ' ' -f 3|sort -V|tail -1`
如果失败了,你需要诊断,你可以使用这个脚本
#!/bin/bash
# Check if the script is run as root
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root. Please use 'sudo' to execute it."
exit 1
fi
# Get the latest non-generic linux-image package name
latest_package=$(dpkg -l | grep linux-image | grep -v image-generic | cut -d ' ' -f 3 | sort -V | tail -1)
# Check if a package name was found
if [ -z "$latest_package" ]; then
echo "No valid linux-image package found for reinstallation."
exit 1
fi
# Reinstall the latest package
echo "Reinstalling the latest linux-image package: $latest_package"
apt install --reinstall "$latest_package"