由于linux内核升级导致的:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver以及启动时修改内核的方法
跑了一段实验,发现cuda不能用了,第一反应是检查水冷怎么样,结果发现并没有问题,后来通过百度发现是linux内核升级导致的,通过这篇博客提供的方法NVIDIA驱动失效简单解决方案检查驱动和cuda都是没有问题的,
ll /usr/src/
sudo apt install dkms
sudo dkms install -m nvidia -v 525.147.05
驱动版本对应自己查到的版本。 但是最后一步还有问题,说没有找到该路径下的dkms.conf文件。
sudo dkms install -m nvidia -v 525.147.05
Error! Could not locate dkms.conf file.
File: /usr/src/nvidia-525.147.05/dkms.conf does not exist.
所以继续发挥CSDN之力
修改启动内核
原因是ubuntu内核升级后,新的内核无法使用CUDA,非常难受。
首先查看目前的内核版本然后查看内核版本有哪些,输出如注释中显示
uname -r
#6.5.0-27-generic
grep menuentry /boot/grub/grub.cfg
#if [ x"${feature_menuentry_id}" = xy ]; then
# menuentry_id_option="--id"
# menuentry_id_option=""
#export menuentry_id_option
#menuentry 'Ubuntu' --class ubuntu --class gnu-linux --cl#ass gnu --class os $menuentry_id_option 'gnulinux-simple#-8a035b9d-dbd2-42b1-b02c-0fc24f60a331' {
#submenu 'Advanced options for Ubuntu' $menuentry_id_opti#on 'gnulinux-advanced-8a035b9d-dbd2-42b1-b02c-0fc24f60a3#31' {
# menuentry 'Ubuntu, with Linux 6.5.0-27-generic' --cla#ss ubuntu --class gnu-linux --class gnu --class os $menu#entry_id_option 'gnulinux-6.5.0-27-generic-advanced-8a03#5b9d-dbd2-42b1-b02c-0fc24f60a331' {
# menuentry 'Ubuntu, with Linux 6.5.0-27-generic (recov#ery mode)' --class ubuntu --class gnu-linux --class gnu #--class os $menuentry_id_option 'gnulinux-6.5.0-27-gener#ic-recovery-8a035b9d-dbd2-42b1-b02c-0fc24f60a331' {
# menuentry 'Ubuntu, with Linux 6.5.0-26-generic' --cla#ss ubuntu --class gnu-linux --class gnu --class os $menu#entry_id_option 'gnulinux-6.5.0-26-generic-advanced-8a03#5b9d-dbd2-42b1-b02c-0fc24f60a331' {
# menuentry 'Ubuntu, with Linux 6.5.0-26-generic (recov#ery mode)' --class ubuntu --class gnu-linux --class gnu #--class os $menuentry_id_option 'gnulinux-6.5.0-26-gener#ic-recovery-8a035b9d-dbd2-42b1-b02c-0fc24f60a331' {
#menuentry 'UEFI Firmware Settings' $menuentry_id_option #'uefi-firmware' {
这里显示了两个不同的Linux内核版本6.5.0-27-generic和6.5.0-26-generic,每个内核版本又分别有正常启动模式和恢复模式两种选择(恢复模式就算提供了一组有限的工具和选项,帮助用户诊断和修复系统问题,如无法正常启动、文件系统错误等)。
OK,现在想要回到原来的6.5.0-26需要怎么操作呢
sudo vim /etc/default/grub
修改其中第一行 GRUB_DEFAULT=0 ,修改为GRUB_DEFAULT="1> 2",这里千万注意大于号后面有个空格。选择6.5.0-26-generic的非recover版本。这里的选择可以反复开关机用uname来测试,因为这个数字非常迷。
然后更新GRUB文件并且重启即可
sudo update-grub
sudo reboot
如何在启动时选内核
如果你和我一样惨,不小心把gurb文件哪里弄错了,比如说GRUB_DEFAULT=2并且也update了,恭喜你,你的ubuntu系统起不来了... 这个时候,因为你的系统不知道选择哪个内核,所以ubuntu没法运行起来,需要你通过手动告诉他使用哪个内核。具体方法就是,在你启动ubuntu的时候疯狂按shift,进入到ubuntu单用户模式,选择Ubuntu Advanced,就可以自己手动选择内核了启动了。 这里参考的是 修改grub.cfg导致系统重启后起不来 和 ubuntu 进入单用户模式的方法
启动之后立刻该回你的/etc/default/grub并且sudo update-grub,然后就可以正常运行了。
同时也可以用这种手动选内核的方法来测试哪个是和你nvida驱动适配的内核,希望大家一遍就搞定。