http://blog.51cto.com/renzhiyuan/1882599

今天探讨用yum和编译两种方式升级或者降级内核版本:

升级:比如玩kvm,docker等虚拟化,centos内核则升级尤为重要(虽然2.6.x内核通过加载模块也可以玩,但是效果不如3.x)

降级:如果发现内核在危险漏洞列,降级内核则显得尤为重要。当然如果有特殊需求,也可以降级内核。


1、yum方式升级内核版本

1.1)查看当前系统内核版本

1
2
3
4
5
[root@node4 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@node4 ~]# uname -r
2.6.32-504.el6.x86_64
[root@node4 ~]#

1.2)准备yum源,并安装

1
2
3
4
5
6
7
8
9
10
11
#http://elrepo.org/linux/kernel/el6/x86_64/RPMS/(网址)
#导入key如果已经修改了repo的gpgcheck=0也可以不导入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安装elrepo的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#安装kernel-lt(lt=long-term)
yum --enablerepo=elrepo-kernelinstallkernel-lt -y
你也可以装kernel-ml(ml=mainline)
yum --enablerepo=elrepo-kernelinstallkernel-ml -y 
#ml(mainline)为最新版本的内核,lt为长期支持的内核。
[root@node4 ~]# yum --enablerepo=elrepo-kernel  install kernel-lt -y

查看boot分区:

附加:查看指定的内核版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@node4 ~]# yum --enablerepo=elrepo-kernel  list  |grep kernel*
 * elrepo-kernel: hkg.mirror.rackspace.com
dracut-kernel.noarch                    004-356.el6               @anaconda-CentOS-201410241409.x86_64/6.6
kernel.x86_64                           2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
kernel-firmware.noarch                  2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
kernel-headers.x86_64                   2.6.32-573.18.1.el6       @updates      
kernel-lt.x86_64                        3.10.104-1.el6.elrepo     @elrepo-kernel
abrt-addon-kerneloops.x86_64            2.0.8-40.el6.centos       base          
dracut-kernel.noarch                    004-409.el6_8.2           updates       
erlang-kernel.x86_64                    R14B-04.3.el6             epel          
kernel.x86_64                           2.6.32-642.11.1.el6       updates       
kernel-abi-whitelists.noarch            2.6.32-642.11.1.el6       updates       
kernel-debug.x86_64                     2.6.32-642.11.1.el6       updates       
kernel-debug-devel.i686                 2.6.32-642.11.1.el6       updates       
kernel-debug-devel.x86_64               2.6.32-642.11.1.el6       updates       
kernel-devel.x86_64                     2.6.32-642.11.1.el6       updates       
kernel-doc.noarch                       2.6.32-642.11.1.el6       updates       
kernel-firmware.noarch                  2.6.32-642.11.1.el6       updates       
kernel-headers.x86_64                   2.6.32-642.11.1.el6       updates       
kernel-lt-devel.x86_64                  3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-doc.noarch                    3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-firmware.noarch               3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-headers.x86_64                3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-ml.x86_64                        4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-devel.x86_64                  4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-doc.noarch                    4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-firmware.noarch               4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-headers.x86_64                4.9.0-1.el6.elrepo        elrepo-kernel 
libreport-plugin-kerneloops.x86_64      2.0.9-32.el6.centos       base          
perf.x86_64                             4.9.0-1.el6.elrepo        elrepo-kernel 
php-symfony-http-kernel.noarch          2.3.42-1.el6              epel          
[root@node4 ~]#

1.3)编辑grub.conf文件,修改Grub引导顺序

1
[root@node4 ~]# cp /etc/grub.conf /etc/grub.conf.bak

注意:养成实时备份的习惯,技术修改有问题,也可以进去单用户或者救援模式修复。

vim/etc/grub.conf

设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。

1
2
#default=1
default=0

1.4)重启使其生效:

1
[root@node4 ~]# shutdown -r now

1.5)查看检测:

1
2
3
4
5
[root@node4 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@node4 ~]# uname -r
3.10.104-1.el6.elrepo.x86_64
[root@node4 ~]#

评价:yum方式比较简单并且快,但是如果想要自己定义其内核路径,则显得力不从心。

2、编译升级内核(降级不测试)

eg:工作碰到需要修改内核配置,编译驱动,调节相关参数等,则需要定制内核。

官网:https://www.kernel.org/pub/linux/kernel/

2.1)下载指定版本并安装配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node4 ~]# wget --no-check-certificate   https://www.kernel.org/pub/linux/kernel/linux-3.2.4.tar.gz
[root@node4 ~]# du -sh linux-3.2.4.tar.gz 
95M linux-3.2.4.tar.gz
[root@node4 ~]#
#yum -y install gcc ncurses-devel(依赖包)
[root@node4 ~]# tar xf linux-3.2.4.tar.gz 
[root@node4 ~]# ll
总用量 96336
drwxrwxr-x 23 root root     4096 2月   4 2012 linux-3.2.4
-rw-r--r--  1 root root 98642809 2月   4 2012 linux-3.2.4.tar.gz
[root@node4 ~]#
[root@node4 ~]# cd linux-3.2.4
#[root@node4 linux-3.2.4]# make --help
# make mrproper  #清除环境变量,即清除配置文件
# make menuconfig  #在菜单模式下选择需要编译的内核模块
1
make menuconfig(出现图形)

大致意思:

箭头键导航菜单。<输入>选择子菜单- - >。高亮显示的字母是热键。按< Y >包括< N >│
│排除,< M >模块化特性。按退出< Esc > < Esc >,< ?>,< / >搜索。传说:[*]内置[]排除│
│< M > < >模块能力

1
2
3
4
5
6
7
8
make clean #确保所有东西均保持最新状态.
make bzImage #生成内核文件
make modules #编译模块
make modules_install #安装模块
make install #安装
#make all
#make modules_install #安装模块
#make install

2.2)编辑grub.conf文件,修改Grub引导顺序

vim/etc/grub.conf

设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。

1
2
#default=1
default=0

2.3)重启使其生效:

1
[root@node4 ~]# shutdown -r now

2.4)查看检测:

1
2
3
4
5
[root@node4 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@node4 ~]# uname -r
3.2.4
[root@node4 ~]#

评价:慢!而且需要一定经验,最好配置前查看官方手册。

3、yum方式降级内核版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dracut-kernel.noarch                    004-356.el6               @anaconda-CentOS-201410241409.x86_64/6.6
kernel.x86_64                           2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
kernel-firmware.noarch                  2.6.32-504.el6            @anaconda-CentOS-201410241409.x86_64/6.6
kernel-headers.x86_64                   2.6.32-573.18.1.el6       @updates      
kernel-lt.x86_64                        3.10.104-1.el6.elrepo     @elrepo-kernel
abrt-addon-kerneloops.x86_64            2.0.8-40.el6.centos       base          
dracut-kernel.noarch                    004-409.el6_8.2           updates       
erlang-kernel.x86_64                    R14B-04.3.el6             epel          
kernel.x86_64                           2.6.32-642.11.1.el6       updates       
kernel-abi-whitelists.noarch            2.6.32-642.11.1.el6       updates       
kernel-debug.x86_64                     2.6.32-642.11.1.el6       updates       
kernel-debug-devel.i686                 2.6.32-642.11.1.el6       updates       
kernel-debug-devel.x86_64               2.6.32-642.11.1.el6       updates       
kernel-devel.x86_64                     2.6.32-642.11.1.el6       updates       
kernel-doc.noarch                       2.6.32-642.11.1.el6       updates       
kernel-firmware.noarch                  2.6.32-642.11.1.el6       updates       
kernel-headers.x86_64                   2.6.32-642.11.1.el6       updates       
kernel-lt-devel.x86_64                  3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-doc.noarch                    3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-firmware.noarch               3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-lt-headers.x86_64                3.10.104-1.el6.elrepo     elrepo-kernel 
kernel-ml.x86_64                        4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-devel.x86_64                  4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-doc.noarch                    4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-firmware.noarch               4.9.0-1.el6.elrepo        elrepo-kernel 
kernel-ml-headers.x86_64                4.9.0-1.el6.elrepo        elrepo-kernel 
libreport-plugin-kerneloops.x86_64      2.0.9-32.el6.centos       base          
perf.x86_64                             4.9.0-1.el6.elrepo        elrepo-kernel 
php-symfony-http-kernel.noarch          2.3.42-1.el6              epel          
[root@node4 ~]#

eg:降级到指定版本(需要yum源支持指定版本的内核)

#yum install kernel-2.6.32-642.11.1.el6

3.1)查看

3.2)截止目前有四个不同版本内核:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[root@node4 ~]# ll /boot/
总用量 94418
-rw-r--r--. 1 root root   106308 10月 15 2014 config-2.6.32-504.el6.x86_64
-rw-r--r--  1 root root   108108 11月 19 03:30 config-2.6.32-642.11.1.el6.x86_64
-rw-r--r--  1 root root   142778 10月 21 22:56 config-3.10.104-1.el6.elrepo.x86_64
drwxr-xr-x. 3 root root     1024 2月  23 2016 efi
drwxr-xr-x. 2 root root     1024 12月 14 13:55 grub
-rw-------. 1 root root 16139633 2月  23 2016 initramfs-2.6.32-504.el6.x86_64.img
-rw-------  1 root root 21406778 12月 14 13:55 initramfs-2.6.32-642.11.1.el6.x86_64.img
-rw-------  1 root root 17744666 3月  25 2016 initramfs-3.10.104-1.el6.elrepo.x86_64.img
-rw-------  1 root root  6086742 12月 14 13:05 initramfs-3.2.4.img
drwx------. 2 root root    12288 2月  23 2016 lost+found
-rw-r--r--. 1 root root   200191 10月 15 2014 symvers-2.6.32-504.el6.x86_64.gz
-rw-r--r--  1 root root   215530 11月 19 03:30 symvers-2.6.32-642.11.1.el6.x86_64.gz
-rw-r--r--  1 root root   258396 10月 21 22:57 symvers-3.10.104-1.el6.elrepo.x86_64.gz
lrwxrwxrwx  1 root root       22 12月 14 13:04 System.map -> /boot/System.map-3.2.4
-rw-r--r--. 1 root root  2544748 10月 15 2014 System.map-2.6.32-504.el6.x86_64
-rw-r--r--  1 root root  2618532 11月 19 03:30 System.map-2.6.32-642.11.1.el6.x86_64
-rw-------  1 root root  2928610 10月 21 22:56 System.map-3.10.104-1.el6.elrepo.x86_64
-rw-r--r--  1 root root  2407430 12月 14 13:04 System.map-3.2.4
-rw-r--r--  1 root root  2407430 12月 14 13:02 System.map-3.2.4.old
lrwxrwxrwx  1 root root       19 12月 14 13:04 vmlinuz -> /boot/vmlinuz-3.2.4
-rwxr-xr-x. 1 root root  4152336 10月 15 2014 vmlinuz-2.6.32-504.el6.x86_64
-rwxr-xr-x  1 root root  4269936 11月 19 03:30 vmlinuz-2.6.32-642.11.1.el6.x86_64
-rwxr-xr-x  1 root root  4865424 10月 21 22:56 vmlinuz-3.10.104-1.el6.elrepo.x86_64
-rw-r--r--  1 root root  4023040 12月 14 13:04 vmlinuz-3.2.4
-rw-r--r--  1 root root  4023040 12月 14 13:02 vmlinuz-3.2.4.old
[root@node4 ~]#
 
default=0
#default行,是指grub启动时默认菜单项。0表示第一项,如果是多系统可以修改此选项改变默认光标停留位置。
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-642.11.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.11.1.el6.x86_64 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crashke
rnel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-642.11.1.el6.x86_64.img
title CentOS (3.2.4)
        root (hd0,0)
        kernel /vmlinuz-3.2.4 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crashkernel=auto LANG=zh_CN.
UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-3.2.4.img
title CentOS (3.10.104-1.el6.elrepo.x86_64)
        root (hd0,0)
        kernel /vmlinuz-3.10.104-1.el6.elrepo.x86_64 ro root=/dev/mapper/vg_node4-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_node4/lv_swap crash
kernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_node4/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-3.10.104-1.el6.elrepo.x86_64.img
title CentOS 6 (2.6.32-504.el6.x86_64)
        root (hd0,0)

3.3)重启使其生效:

1
[root@node4 ~]# shutdown -r now

1
2
3
4
5
[root@node4 ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@node4 ~]# uname -r
2.6.32-642.11.1.el6.x86_64
[root@node4 ~]#

4、总结:

1、内核的升级和降级要有完整的流程,不可直接操作,注意升级或者降级中文件的备份

2、yum和编译升级和降级要根据环境具体而定,yum方便,编译定制麻烦。

3、centos6和centos7是有区别的,比如grub的引导文件,centos7(/boot/grub2)

yum和编译两种方式升级or降级Centos内核的更多相关文章

  1. Linux下安装mysql(yum和源码编译两种方式)

    这里介绍Linux下两种安装mysql的方式:yum安装和源码编译安装. 1. yum安装 (1)首先查看centos自带的mysql是否被安装: # yum list installed |grep ...

  2. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  3. 设备程序远程升级采用两种方式(优先采用IP方式)

    设备程序远程升级采用两种方式(优先采用IP方式): 采用应急广播TS流传输技术规范的消息内容表携带升级包数据.当辅助数据类型值为44时,消息内容表传输的数据为程序升级包. 采用IP方式传输升级包数据. ...

  4. 自学Linux Shell9.2-基于Red Hat系统工具包存在两种方式之一:RPM包

    点击返回 自学Linux命令行与Shell脚本之路 9.2-基于Red Hat系统工具包存在两种方式之一:RPM包 本节主要介绍基于Red Had的系统(测试系统centos) 1. 工具包存在两种方 ...

  5. 制作Docker镜像的两种方式

    此文已由作者朱笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用docker commit命令制作docker镜像 1. pull一个centos6.6的基础镜像, ...

  6. 配置 yum 源的两种方法

    配置 yum 源的两种方法 由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源,以下为详细过程:  1.删除red ...

  7. Linux 安装 Nodejs 的两种方式

    Linux 安装 Nodejs 的两种方式 目录 Linux 安装 Nodejs 的两种方式 一.压缩包安装 Nodejs 二.源码编译安装 Nodejs 一.压缩包安装 Nodejs 下载 Node ...

  8. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  9. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

随机推荐

  1. L304 What Is Death?

    How should we define the death of a person? Philosophers and physicians have long pondered this ques ...

  2. day 67 django 之ORM 基础安装

    一 ORM的基础部分 1 ORM的概念 对象关系映射(Object Relational Mapping(映射),简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 2   ...

  3. golang统计出其中英文字母、空格、数字和其它字符的个数

    方法一 通过ASCII码表判断并统计 package main import "fmt" func charactortype() { var s2 string = " ...

  4. js 自执行匿名函数(转载)

    自执行匿名函数: 常见格式:(function() { /* code */ })(); 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命 ...

  5. 多线程串口编程工具CserialPort类(附VC基于MFC单文档协议通讯源程序及详细编程步骤)

    老有人觉得MSComm通讯控件很土,更有人大声疾呼:忘了它吧.确实当我们对串口编程有了一定的了解后,应该用API函数写一个属于自己的串口程序,由于编程者对程序了解,对程序修改自如.但我一直没有停止过用 ...

  6. 中文字符utf-8编码原则

    UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是 多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字 ...

  7. excel idea sql 操作

    1.excel  concatenate()函数中连接单元格中值拼接sql时,内容超长,把insert into.... values()前面的单独提出来,只在concatenate()中拼接valu ...

  8. Python 命名元组

    from collections import namedtuple # 类 p = namedtuple("Point", ["x", "y&quo ...

  9. 在Ubuntu上搭建IntelliJ IDEA license server服务器

    1.下载激活文件 2.ubuntu需要使用 IntelliJIDEALicenseServer_linux_amd64 ,把该文件传到服务器的某个目录,我是放在了/jideal 下 3.进入上面的目录 ...

  10. Centos7修改profile文件后导致vi command not find

    Centos7修改profile文件后导致vi command not find,原因是profile文件没有配置正确,系统就无法找到精确命令了.解决方法: 1.在命令行中输入:export PATH ...