专栏名称: 高效运维
高效运维公众号由萧田国及朋友们维护,经常发布各种广为传播的优秀原创技术文章,关注运维转型,陪伴您的运维职业生涯,一起愉快滴发展。
目录
相关文章推荐
51好读  ›  专栏  ›  高效运维

Linux 下如何优雅的升级内核?

高效运维  · 公众号  · 运维  · 2017-11-15 07:10

正文

请到「今天看啥」查看全文


make mrproper

删除之前编译的配置等,相当于make clean all

make menuconfig

加载配置管理界面,你可能需要先安装ncurses-devel。

这里面会有好多好多选项,比如是否编译蓝牙驱动,是否编译NAT模块等等,选项基本为m,y,n,这样会引发几个问题。

  • 有些选项没有加载,使得你编译的内核某些功能用不了,比如NAT模块我之前没选y,就得重新编译

  • 有很多是和硬件,服务器配置有关,我们不清楚。

上面的 make menuconfig 命令,实际上就是在内核编译文件夹下生成了.config文件,只不过使用可视化方式让选择更方便一些,最终内核是基于.config文件的配置来进行编译的。

时至今日,内核模块已非常的丰富(繁多),如果全部都编译加载的话,内核将变的非常臃肿,你在编译的时候最好按需加载,每个模块是否加载都有.config文件来决定。 比如以下配置表明是否开启cgroup

CONFIG_CGROUP_SCHED=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_NS=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_MEM_RES_CTLR=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_PERF=y
CONFIG_SCHED_AUTOGROUP=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y

在你编译内核过程中,必然面临一个问题,就是这么多内核选项,我要开启哪些?我要精简哪些?

这块有个技巧就是你找到现在服务器用得内核配置,把它拷贝一份作为一个默认的config文件,当然你得注意内核版本,版本相差太大很多参数是不一样的。

所以调优内核编译参数是个技术活

make dep

保存好配置以后,meke dep内核程序还会自己check依赖关系,哪些配置可用等,它会修改你的.config文件,把它变成这台机器上可用的。

make clean

清除上一次编译的残留文件

make -j8 bzImage

编译内核并压缩成一个img镜像,make -j8 -jn为多进程一般为cpu核心数2倍,如果24核就可以-j48 这样会速度会加快很多。

make -j8 modules

编译各个依赖模块

make -j8 modules_install

安装各个模块,其实就是把模块拷贝到/lib/modules/kernel.版本号/里

make -j8 install

安装内核,将镜像,预加载文件,拷贝到/boot中,修改/etc/grub.conf文件

默认内核程序会将新安装得内核顺序调成0,而启动调成1,把它手动调成0,重启才用新内核。

至此内核编译就结束了,然后到了最关键一步,重启,如果重启成功,基本上不会有太大问题,如果启动失败,那就要看具体报错来调整了。

内核移植

编译内核耗时很长,如果你编译好新的内核,想要在很多服务器上批量升级该怎么办?难道每台服务器都要重新编译一遍么?







请到「今天看啥」查看全文