Centos内核升级的三种方法
本文出自 “存储之厨” 博客,请务必保留此出处http://xiamachao.blog.51cto.com/10580956/1755354
在基于CentOS平台的工作过程中,难免有时需要升级或者降级内核以验证功能、调试性能或者更新整个系统。
如果从头重新编译一个内核,由于现在内核特性越来越复杂,依赖的库或者工具也不少,加之重新编译耗时不菲,了解更新内核的多种方式就显得尤为必要。
下面根据笔者最近的工作,总结了三种方法,供大家参考。
方法一
如果机器不能联网,可以下载现有内核包到本地机器,直接在本地更新
1.从http://ftp.scientificlinux.org/linux/scientific/7.0/x86_64/updates/security/下载需要的颁布rpm
2. [root@localhost os2]# scp root@192.168.1.64:/home/worker/kernel-3.10.0-123.1.2.el7.x86_64.rpm
root@192.168.1.64's password:
kernel-3.10.0-123.1.2.el7.x86_64.rpm 100% 29MB 28.9MB/s 00:00
3.[root@localhost os2]# yum install kernel-3.10.0-123.1.2.el7.x86_64.rpm
Loaded plugins: fastestmirror, langpacks
Examining kernel-3.10.0-123.1.2.el7.x86_64.rpm: kernel-3.10.0-123.1.2.el7.x86_64
Marking kernel-3.10.0-123.1.2.el7.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-123.1.2.el7 will be installed
--> Finished Dependency Resolution
epel/x86_64/metalink | 5.2 kB 00:00:00
epel/x86_64 | 4.3 kB 00:00:01
epel/x86_64/updateinfo | 517 kB 00:00:01
epel/x86_64/primary_db | 4.0 MB 00:02:36
....
方法二
如果机器已经联网,直接利用包管理工具更新,需要注意的是现在3.0以上的内核引入了签名机制,需要导入签名的key,参考步骤如下:
1、导入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
当然,如果已经修改了repo的gpgcheck=0也可以不导入key
2、安装elrepo的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
3、安装内核
在yum的ELRepo源中,有mainline颁布的,可以这样安装:
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
当然也可以安装long term的:
yum --enablerepo=elrepo-kernel install kernel-lt -y
其它:
http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
[root@server-mysql yum.repos.d]# yum --enablerepo=elrepo-kernel list |grep kernel*
Unable to read consumer identity
* elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
abrt-addon-kerneloops.x86_64 2.0.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
dracut-kernel.noarch -.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
kernel.x86_64 2.6.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
kernel-devel.x86_64 2.6.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
kernel-firmware.noarch 2.6.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
kernel-headers.x86_64 2.6.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
libreport-plugin-kerneloops.x86_64 2.0.-.el6 @anaconda-RedHatEnterpriseLinux-.x86_64/6.3
abrt-addon-kerneloops.x86_64 2.0.-.el6.centos base
dracut-kernel.noarch -.el6_8. updates
kernel.x86_64 2.6.-642.3..el6 updates
kernel-abi-whitelists.noarch 2.6.-642.3..el6 updates
kernel-debug.x86_64 2.6.-642.3..el6 updates
kernel-debug-devel.i686 2.6.-642.3..el6 updates
kernel-debug-devel.x86_64 2.6.-642.3..el6 updates
kernel-devel.x86_64 2.6.-642.3..el6 updates
kernel-doc.noarch 2.6.-642.3..el6 updates
kernel-firmware.noarch 2.6.-642.3..el6 updates
kernel-headers.x86_64 2.6.-642.3..el6 updates
kernel-lt.x86_64 3.10.-.el6.elrepo elrepo-kernel
kernel-lt-devel.x86_64 3.10.-.el6.elrepo elrepo-kernel
kernel-lt-doc.noarch 3.10.-.el6.elrepo elrepo-kernel
kernel-lt-firmware.noarch 3.10.-.el6.elrepo elrepo-kernel
kernel-lt-headers.x86_64 3.10.-.el6.elrepo elrepo-kernel
kernel-ml.x86_64 4.6.-.el6.elrepo elrepo-kernel
kernel-ml-devel.x86_64 4.6.-.el6.elrepo elrepo-kernel
kernel-ml-doc.noarch 4.6.-.el6.elrepo elrepo-kernel
kernel-ml-firmware.noarch 4.6.-.el6.elrepo elrepo-kernel
kernel-ml-headers.x86_64 4.6.-.el6.elrepo elrepo-kernel
libreport-plugin-kerneloops.x86_64 2.0.-.el6.centos base
perf.x86_64 4.6.-.el6.elrepo elrepo-kernel
方法三
实际工作当中经常碰到需要修改内核配置,编译驱动,调节相关参数等,这就需要定制内核,为此需要手动生成新的内核。还是以3.10.0-123.el7为例子,一般步骤如下:
1.先下载内核:
wget http://vault.centos.org//7.0.1406/os/Source/SPackages/kernel-3.10.0-123.el7.src.rpm
接着解压相关代码:
rpm2cpio kernel-3.10.0-123.el7.src.rpm |cpio -div
默认在/usr/src放有一份kernel的头文件,这样在不需要下载整个内核源代码的情况下就可以编译自己编写的内核模块,如果有patch需要打的话,用patch -p1 *.patch命令给内核打上相应的patch。
2.更新配置文件.config
可以获取系统当前的config文件,也可以用默认的配置文件,比如x86_64_defconfig:
cp /boot/config-3.10.0-123.el7.x86_64 .config 和make oldconfig生产的config一致
然后用make menuconfig来配置。
3.编译和安装
默认的情况下, 内核和initrd会安装到/boot下面,而驱动模块会安装到/lib/modules/`uname -r`下,如果可以都安装都默认的位置,直接运行下面的命令即可:
make -j8;make modules; make modules_install;make install;
如果需要安装到指定的路径,请设置下面的环境变量:
export INSTALL_PATH=….
export INSTALL_MOD_PATH=
4.创建initrd.img
initrd.img即为初始化的ramdisk文件,它是一个内存镜像文件。它是把一些最基本的驱动程序和命令工具打包而成,作用就是在系统还没有挂载根分区前,保证系统能够执行基础的初始化和加载一些基本的驱动,比如挂载scsi驱动等。制作initrd传统的方法是用mkinitramfs这一个系统工具,现在mkinitrd会调用dracut完成实际的工作。比如下面的命令进行:
mkinitrd3.0.4 -o /boot/initrd.img-3.0.4
然后把生成的initrd映像拷贝到/boot下面即可。
5.更新grub
为了让boot loader能够找到刚生成的内核和initrd映像,需要修改grub。注意如果使用的是grub2,不宜直接修改/boot/grub2/grub.cfg文件,而应该修改grub2的配置文件。grub2默认的配置文件在/etc/grub2.cfg。更新完这个文件之后,需要运行下面的文件:
grub2-mkconfig
至于启动那个linux镜像,由/etc/default/grub的GRUB_DEFAULT=saved来决定;
其意思是上一次使用的value;
修改内核默认启动项
grub2-set-default 0
这种方法需要注意kernel和模块签名的问题,如果模块签名没有通过内核检查,将不会加载,这可能导致生成系统启动失败。
总而言之,工程师和维护人员需要集合实际情况灵活选择合适的方法来更新内核。
Centos内核升级的三种方法的更多相关文章
- CentOS安装jdk的三种方法
方法一:手动解压JDK的压缩包,然后设置环境变量 方法二:用yum安装JDK,(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的 ...
- RedHat 7.0及CentOS 7.0禁止Ping的三种方法
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...
- [CentOS] 环境变量设置的三种方法
在CentOS系统中添加环境变量的方法有几种,推荐第三种方法.这里以添加 TexLive 2017 的环境变量为例进行说明. 1. 修改 ~/.bash_profile 文档,在文末添加以下代码: ...
- CentOS中JDK的三种配置方法
第一种方法(相对稳妥): 使用yum直接安装,在root用户下执行 "yum install java-openjdk-*" 第二种方法(最为稳妥): 前往'https://www ...
- Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库
一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. ...
- YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法
上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...
- Linux启动新进程的三种方法
程序中,我们有时需要启动一个新的进程,来完成其他的工作.下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程system函数,是通过启动shell进 ...
- Eclipse插件安装的三种方法
转自:http://www.blogjava.net/tangzurui/archive/2008/06/30/211669.html 整理了一下格式. (前两种安装方式以多国语言包的安装为例) 1 ...
- python字符串连接的三种方法及其效率、适用场景详解
python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website=& 39;python& 39;+& 39;tab& 39;+& ...
随机推荐
- JXL解析Excel表格内容到数据库
java中常用的解析Excel表格的工具一种是POI一种是JXL,POI功能强大,相比JXL稍嫌复杂,对表格样式的处理非常好:而JXL解析简单方便,对中文支持比较好. 工作中解析Excel内容上传到数 ...
- NopCommerce架构分析之三---数据库初试化及数据操作
系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvide ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- ParamQueryGrid行、列合并(Ⅸ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 施工计划查询(Ⅷ)>,主要介绍通过报表工具数据钻取,获取施工计划详细信息. 这篇我们看看ParamQueryGrid[行 ...
- 【Android】Android ListViewAnimations分析
使用:https://github.com/android-cn/android-open-project-demo/tree/master/listview-animations-demo APK例 ...
- 【转】ubuntu 编码 UTF-8 GBK GB18030
添加编码支持 sudo locale-gen zh_CN.GBK sudo locale-gen zh_CN.GB2312 sudo locale-gen zh_CN.GB18030 2.更新一下lo ...
- HDU 5536 Chip Factory 字典树+贪心
给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...
- Python脚本控制的WebDriver 常用操作 <二十三> wait
测试用例场景 Wait类的使用场景是在页面上进行某些操作,然后页面上就会出现或隐藏一些元素,此时使用Wait类的until方法来等待这些效果完成以便进行后续的操作.另外页面加载时有可能会执行一些aja ...
- 【mongodb 学习一】环境搭建之 mac 下连接 mongodb 的UI 客户端
记录下 mongodb 的学习 懒得自己达 mongodb 的服务器了 虽然一句命令就能搞定了 brew install mongodb 可是考虑到以后的应用还是放在网上的,就直接用现成的服务吧 下载 ...
- [NOIP2013]转圈游戏
题目描述 Description n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 ...
- C/C++:原码、反码和补码
正数的原码.反码和补码是一模一样的. 负数的反码的符号位跟原码一样,但其余各位取反. 负数的补码是其反码的最末位加1得到,即原码取反加1. 补码的补码就是原码. 浮点数的存储格式随着机器的 ...