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-GPG-KEY-elrepo.org
  • 安裝ELRepo的 yum 源到系統
$ yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

安裝新內核啦

  • 查看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

到這里,基本上就成功了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM