Linux-内核更新

Posted lanlanfox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-内核更新相关的知识,希望对你有一定的参考价值。

[Linux系统手动更换内核]

前言

一般而言,在云计算商那里“租”了一台服务器之后,我一般会选择CentOS 7 系统,所以这篇文章,就以CentOS为例(似乎有一点标题党的嫌疑?

基本不会介绍BBR的原理,需要详细了解,可以访问research,我技术并不够优秀,很难解释清楚,还请见谅!

先讲讲BBR吧!Wiki百科给出的解释是Bottleneck Bandwidth and Round-trip propagation time (BBR) ,是Google在2016年开发的TCP拥塞控制算法(开源了)。TCP拥塞控制算法有很多,BBR是其中一种,但是由于它出色的效果,被很多人采用。至于linux内核什么时候开始原生支持的,网上的说法真的是五花八门,很多人文章感觉就是互相抄,连2.6.* 的说法都能蹦出来(我怀疑是一些采集站)。相对而言,很多大佬的博客文章,就比较严谨一些,基本上都是4.9。抱着不懂就差的态度,我去Google稍微搜了一下,不敢确定是不是一定是对的。Wiki百科的详细说明,可以找到如下一条说明:

内核

初始发行日期

最新版本

维护者

支持状态

备注

4.9

2016年12月11日

4.9.148

葛雷格·克罗哈曼

长期支持版本,从2016年12月至2023年1月

开始支持 BBR congestion control。

更换/更新内核

这时候我们来更换内核吧,这里我的测试机器是中国香港ECS。

  • 当前的 Kernel 版本

$ uname -r

  • 更新软件包

$ yum update -y

ELRepo项目

这里我们需要用到Repo项目Enterprise Linux软件包的RPM存储库。

  • 导入ELRepo公钥

$ rpm --import https://www.elrepo.org/RPM-GP...

  • 安装ELRepo的 yum 源到系统

$ yum install https://www.elrepo.org/elrepo...

安装新内核啦

  • 查看ELRepo仓库下,在当前系统支持的内核包 ELRepo会提供he Linux Kernel Archives用资源。

$ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

  • 安装最新的主线稳定内核

$ yum --enablerepo=elrepo-kernel install kernel-ml

更改grub配置

在安装完新的 Kernrl 之后,系统是不会帮你切换到新内核的,重启也不行,需要我们自己设置,将新内核设置为默认启动选项。

  • 查看所有的 Kernel

$ rpm -qa | grep kernel

  • 查看当前正在使用的 Kernrl

$ uname -r

  • 查看 Kernel 启动顺序

$ awk -F\' \'$1=="menuentry " {print i++ " : " $2}\' /etc/grub2.cfg

安装完之后,内核没有切换过去,通过查看得知,新安装的内核位于第一个位置,标记为 0。这是我们需要修改/etc/default/grub文件,以便于让系统在启动时让新内核成为默认选项。

$ vim /etc/default/grub

需要把GRUB_DEFAULT=saved 改成 GRUB_DEFAULT=0 ,然后保存。当然,你也可以在安装其它版本的Kernel之后,更改GRUB_DEFAULT的值。

  • 重新生成 Kernrl 配置

$ grub2-mkconfig -o /boot/grub2/grub.cfg

  • 然后重启机器

$ reboot

  • 重启完毕后,检查是否成功

$ uname -r

删除多余内核

你可以在安装新内核之后,选择把其它内核删掉,但是请注意千万不要删除正在运行的那个内核!!!

  • 查看所有的 Kernel

$ rpm -qa | grep kernel

  • 删除你想删除的内核

$ yum remove kernel-[old_kernel_version]

举个例子

$ yum remove kernel-3.10.0-957.el7.x86_64

  • 重新生成 Kernrl 配置

$ grub2-mkconfig -o /boot/grub2/grub.cfg

开启BBR

整了这么半天,除了更新下内核,另一个重要的事情就是需要开启BBR了。

  • 编辑/tec/sysctl.conf文件

$ vim /etc/sysctl.conf

  • 添加如下内容:

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

  • 或者使用tee命令重定向追加到/tec/sysctl.conf文件中:

$ echo \'net.core.default_qdisc=fq\' | sudo tee -a /etc/sysctl.conf
$ echo \'net.ipv4.tcp_congestion_control=bbr\' | sudo tee -a /etc/sysctl.conf

  • 从配置文件“/etc/sysctl.conf”加载内核参数设置

$ sysctl -p

  • 验证是否成功(是否开启了BBR

$ sysctl net.ipv4.tcp_congestion_control
# net.ipv4.tcp_congestion_control = bbr
$ sysctl net.ipv4.tcp_available_congestion_control

# net.ipv4.tcp_available_congestion_control = reno cubic bbr

*   查看内核模块是否加载

$ lsmod | grep bbr

以上是关于Linux-内核更新的主要内容,如果未能解决你的问题,请参考以下文章

什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]

《Linux内核 核心知识全解析(完)》

20179209《Linux内核原理与分析》第十二周作

Linux内核开发——编译Ubuntu 20.04内核代码

Ubuntu和Debian 9接收Linux内核安全更新以修复TCP漏洞

Linux 内核 内存管理RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )