
# GPU裸金属服务器使用EulerOS内核误升级如何解决
#### 问题现象
GP Vnt1裸金属服务器，操作系统为EulerOS 2.9(基于CentOS制作的Linux发行版)，经常遇到服务器重启后，操作系统内核无故升级，导致系统上原安装的nvidia-driver等软件无法使用，只能卸载重新安装。
#### 原因分析
分析EulerOS内核是如何在不知情的情况下升级的：
1. 首先查看当前操作系统内核。
   ```
   [root@Server-ddff ~]# uname -r
   4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64
   ```
   
2. 一般执行如下升级命令，就会导致自动下载和安装高级内核版本。
   ```
   yum update -y
   ```
   执行后查看当前可用内核，发现已经新增了内核h998：
   ```
   [root@Server-ddff ~]#
   [root@Server-ddff ~]# cat /boot/grub2/grub.cfg |grep "menuentry "
   menuentry 'EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5.
   1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' {
   menuentry 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.18.0-147.5.
   1.6.h934.eulerosv2r9.x86_64-advanced-f6aefacb-f2d3-4809-b708-6ad0357037f5' {
   menuentry 'EulerOS (0-rescue) 2.0 (SP9x86_64)' --class euleros --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-advanced-f6aefacb-f2d3-4809-b708-6ad
   0357037f5' {
   [root@Server-ddff ~]#
   ```
   
3. 查看假如reboot（尚未reboot）后默认选择的内核版本：
   ```
   [root@Server-ddff ~]# grub2-editenv list 
   saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)
   boot_success=0
   [root@Server-ddff ~]#
   ```
   发现默认系统内核已经变为h998，reboot后就会生效。 此时如果重启那么内核版本就被升级了。
   
 
#### 处理方法
下文中假设当前服务器的内核版本是为4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64，介绍如何避免操作系统内核自动升级。
1. 操作系统内核升级生效，必然需要服务器重启， 因此重启reboot前需要查看当前默认选择的内核版本：
   ```
   [root@Server-ddff ~]# grub2-editenv list 
   saved_entry=EulerOS (4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64) 2.0 (SP9x86_64)
   boot_success=0
   [root@Server-ddff ~]#
   ```
   如上发现reboot后内核为4.18.0-147.5.1.6.h998.eulerosv2r9.x86_64，和当前内核版本h934不一致，则需要重新设置内核版本与当前版本一致。
   
2. 查看当前内核版本，并且锁定reboot后默认启动的内核版本，执行如下命令：
   ```
   grub2-set-default 'EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)'
   ```
   
3. 执行后查看默认启动的内核版本是否和上述设置的相同：
   ```
   [root@Server-ddff ~]# grub2-editenv list 
   saved_entry=EulerOS (4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64) 2.0 (SP9x86_64)
   boot_success=0
   [root@Server-ddff ~]#
   ```
   发现和当前内核一致，因此即使reboot也不会更改服务器的内核版本。
   
如果希望升级指定的操作系统内核，也可以执行grub2-set-default进行设置默认启动内核版本。但操作系统内核升级可能带来的问题。例如在操作系统内核4.18.0-147.5.1.6.h934.eulerosv2r9.x86_64 下安装的nvidia-driver-515，由于执行了yum update并reboot服务器， 发现再次执行nvidia命令时报错：
```
[root@Server-ddff ~]# nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
[root@Server-ddff ~]#
```
此时只能安装nvidia-driver-515以及配套的cuda版本。
