风车云

CentOS 7 更换/升级内核 删除多余内核 快速开启 Google BBR TCP加速

Google BBR 算法是一个 TCP 加速优化工具,Google 2016 年已开源其 TCP BBR 拥塞控制算(BBR2 已经在路上),并提交至 Linux 内核,根据实地测试,在部署了最新版内核并开启 TCP BBR VPS 上,网络连接状况确实有很不错的提升。

「CentOS 7 更换/升级内核 删除多余内核 快速开启 Google BBR TCP加速:https://ae.mba/27」

方法适用:腾讯云阿里云VultrLinodeVirMach 等 VPS。

CentOS 7 更新支持 BBR 内核

uname -r 查看 CentOS 内核,如果低于 4.10,则更新内核,安装 ELRepo 源:

「CentOS 7 更换/升级内核 删除多余内核 快速开启 Google BBR TCP加速:https://ae.mba/27」
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

启用 ELRepo 源仓库:

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

安装新内核:

yum -y --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel

检查已安装可用内核

rpm -qa | grep kernel

看到有 kernel-ml-5.16.15-1.el7.elrepo.x86_64 字样表示新内核安装成功。(或者版本号大于 5.3)

「CentOS 7 更换/升级内核 删除多余内核 快速开启 Google BBR TCP加速:https://ae.mba/27」

查看可用内核列表

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

返回列表如:

0 : CentOS Linux (5.16.15-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (0-rescue-74c28eb5f85446149c7643671f227ffa) 7 (Core)
2 : CentOS Linux (0-rescue-00a62363617944e08db8db894ba6145e) 7 (Core)

修改开机默认使用内核

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg ##有可能需要执行一下

检查内核修改结果

grub2-editenv list

结果:

「CentOS 7 更换/升级内核 删除多余内核 快速开启 Google BBR TCP加速:https://ae.mba/27」

saved_entry=0

重启一下系统。检查一下新内核是否启用成功:

uname -r

正常会有类似如下返回:

5.16.15-1.el7.elrepo.x86_64

CentOS 7 新内核启用 Google BBR TCP 加速

内核升级完成,执行如下代码即可开启 BBR:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

重启系统(不重启应该也可以):

reboot

检查是否开启成功:

sysctl net.ipv4.tcp_available_congestion_control

输出:net.ipv4.tcp_available_congestion_control = reno cubic bbr

sysctl net.ipv4.tcp_congestion_control

输出:net.ipv4.tcp_congestion_control = bbr

lsmod | grep bbr

输出:tcp_bbr 20480 5(不一定有)

附:CentOS 7 升级 / 删除内核开启 BBR 自动化脚本

脚本小改自:腾创库,代码如下:

#!/bin/bash
#
# Title: CentOS7.6_x64_upgrade_kernel_script
# Author: ZNing
# Date: 2022-3-18
# Pass on the Tencent Cloud CentOS 7.9 x64
# You should run this script three times. The first is yum update, the second is kernel upgrade to 5, the final one is optional when you decided to maunal which is deleting old kernel.

clear;

function upgradeYum()
{
yum clean all;
yum update -y;
reboot;
}

function upgradeKernel()
{
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org;
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm;
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available;
yum --enablerepo=elrepo-kernel install -y kernel-ml;
grub2-mkconfig -o /boot/grub2/grub.cfg;
grub2-editenv list;
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg;
echo -n "please enter the latest kernel number ->";
read num;
grub2-set-default $num;
grub2-editenv list;
}

function confirmKernel()
{
echo -n "are the kernel changed? If it is, plz input(y),else(n) ->";
read confirmInput;
if [ "$confirmInput" == 'y' ]; then
reboot;
elif [ "$selected" == 'n' ]; then
exit;
else
confirmKernel;
return;
fi;
}

function removeOldKernel()
{
IFS=$'\n';
for LINE in `rpm -qa | grep kernel- | grep 3.`; do
#Do some works on "${LINE}"
yum -y remove ${LINE};
done;
reboot;
}

function checkSystem()
{
cat /etc/redhat-release;
uname -sr;
uname -a;
echo "[Notice] Confirm Upgrade Kernel? please select: (1~4)"
select selected in 'Upgrade Step 1' 'Upgrade Step 2' 'Delete Old Kernel' 'Exit'; do break; done;
[ "$selected" == 'Exit' ] && echo 'Exit Upgrade.' && exit;
if [ "$selected" == 'Upgrade Step 1' ]; then
upgradeYum;
elif [ "$selected" == 'Upgrade Step 2' ]; then
upgradeKernel;
confirmKernel;
elif [ "$selected" == 'Delete Old Kernel' ]; then
removeOldKernel;
else
ConfirmInstall;
return;
fi;
echo "[OK] You Selected: ${selected}";
}

checkSystem;

代码需要执行 3 次,简单使用说明:

第一次执行进行 yum update 升级并重启。

第二次执行进行 Kernel 升级与切换:

这一步会进行两次的用户手工输入,第一次输入是选择最新内核所代表的最前面的数字,以便程序确认最新内核位置;
第二步输入确认是否内核已经切换为第一步所输的数字,如果 saved_entry=X 中的 X 为第一步所输入的数字,即可输入 y 进行切换内核重启。

第三次执行(可选)删除旧内核,当然也可以手工删除。

CentOS 7 删除多余无用内核

每次升级内核,旧内核不会自动删除,有些 VPS /boot 空间可能不大,升级可能提示错误:At least 30MB more space needed on the /boot filesystem……

查看 CentOS 可用内核列表

rpm -qa | grep kernel

一般留下在用内核即可:

kernel-ml-5.12.9-1.el7.elrepo.x86_64
kernel-ml-headers-5.16.15-1.el7.elrepo.x86_64
kernel-ml-5.16.15-1.el7.elrepo.x86_64
kernel-ml-devel-5.12.9-1.el7.elrepo.x86_64
kernel-ml-devel-5.16.15-1.el7.elrepo.x86_64

查看系统当前使用内核

uname -r

显示目前使用内核:

5.16.15-1.el7.elrepo.x86_64

删除多余内核

命令:rpm -e 内核名称,(yum remove 命令也可以)比如:

rpm -e kernel-ml-5.2.11-1.el7.elrepo.x86_64

下面命令可以删除所有非当前使用内核:(操作前请先确认清楚

yum remove $(rpm -qa | grep kernel | grep -v $(uname -r))

检查 boot 剩余空间

df -h /boot

退出移动版