Ubuntu 內(nèi)核版本問題追蹤

這兩天在調(diào)試一個內(nèi)核版本的問題芹关,準確來說是為了解決給kubernetes的CNI啟用IPSec+Geneve模式遇到的一個坑地消。一開始我在本地實驗IPSec+Geneve模式時很順利速梗,但是放到e2e測試環(huán)境時良蒸,基本的ping連接測試也會失敗舟扎,因為CNI本身只用到了內(nèi)核的OVS,于是懷疑是內(nèi)核的版本不一致導致遥巴,通過uname -a查看了兩個環(huán)境后發(fā)現(xiàn)的確有小版本的差異千康,可工作的版本是Linux 4.15.0-143-generic,不工作的版本是Linux 4.15.0-66-generic,然后又比較了下內(nèi)核自帶的OVS內(nèi)核模塊文件夾,發(fā)現(xiàn)路徑ls -alt /lib/modules/$version/kernel/net/openvswitch/內(nèi)的文件大小都有差異铲掐,這就更讓我肯定了是內(nèi)核版本的問題拾弃。但是小版本66和143之間還是存在很多個中間版本的,因為需要給用戶準確的文檔說明摆霉,這中間到底是什么時候引入的fix是需要解決的問題豪椿。這里記錄下為了定位到具體版本經(jīng)歷的過程,給以后一些參考携栋。

靈活選擇內(nèi)核版本

為了測試版本差異和效果搭盾,需要安裝不同的內(nèi)核版本,想用舊的內(nèi)核版本婉支,首先需要安裝上舊版本鸯隅,但如果不做特別配置的話,系統(tǒng)默認都是用當前最新的內(nèi)核版本向挖,并不會選擇老版本來啟動機器蝌以。參考了這篇文章后炕舵,我在本地配置了允許用戶靈活選擇內(nèi)核版本。測試的系統(tǒng)版本是Ubuntu 18.04跟畅,具體步驟如下:

編輯文件/etc/default/grub,注釋掉GRUB_DEFAULT=0這一行咽筋,然后加上如下三行:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
GRUB_DISABLE_SUBMENU=y

GRUB_DEFAULT 設置允許 Grub 使用我們保存的任何值為默認內(nèi)核,而不是硬編碼默認值碍彭。 GRUB_SAVEDEFAULT 告訴 Grub 將默認內(nèi)核設置為我們在菜單中明確選擇的條目晤硕。 GRUB_DISABLE_SUBMENU 選項使菜單結(jié)構(gòu)扁平化悼潭,以便我們可以更輕松地解析它庇忌。

另外需要檢查文件夾/etc/default/grub.d 下名為50-cloudimg-settings.cfg的文件. 它可能包含覆蓋/etc/default/grub文件內(nèi)配置的默認選擇。如果有也在GRUB_DEFAULT=0所在行添加注釋舰褪,改為#GRUB_DEFAULT=0皆疹。

然后配置變量GRUB_CONFIG:export GRUB_CONFIG='/boot/grub/grub.cfg',并運行update-grub來重新構(gòu)建grub.cfg文件以使前面的更改生效。現(xiàn)在配置已重建且菜單已展平占拍,我們可以解析文件中的可用條目略就。以下命令顯示條目索引號和標題。我們可以使用其中任何一個來引用特定條目晃酒。
grep 'menuentry ' $GRUB_CONFIG | cut -f 2 -d "'" | nl -v 0
這將返回所有可用的引導選項表牢。記下要引導的條目的索引號或標題。

0   Ubuntu, with Linux 4.15.0-151-generic
1   Ubuntu, with Linux 4.15.0-151-generic (recovery mode)
2   Ubuntu, with Linux 4.15.0-141-generic
3   Ubuntu, with Linux 4.15.0-141-generic (recovery mode)
4   Ubuntu, with Linux 4.15.0-140-generic
...

Grub 包括從命令行設置新的默認內(nèi)核的命令贝次。我們可以使用索引號或條目標題來指定引導選項宇整。例如使用索引號:grub-set-default 2
還可以選擇僅適用于下次啟動的臨時啟動選項:grub-reboot 2,配置結(jié)束后就可以重啟以便于使用配之后的內(nèi)核版本华烟。

查找Ubuntu版本變更

既然是Ubuntu內(nèi)核版本差異導致的,那就要查找內(nèi)核變更,先搜到了Ubuntu的Git源碼位置, 而我本地用的是18.04傻工,對應的是bionic,所以Git路徑是ubuntu-bionic所在地址奶是。為了方便定位具體變更基矮,我把整個源碼克隆到了本地: git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git.

我先在log頁面通過log msg方式查找了geneve關(guān)鍵字,發(fā)現(xiàn)了不少相關(guān)的commit笋轨,另外在tag頁面能夠看到具體的tag以及他們創(chuàng)建的日期時間秆剪。這中間定位到正確的fix commit饒了點彎路,切換不同的內(nèi)核做了一些不必要的測試爵政,最后才定位到是在這個commit里提交的Fix鸟款。然后在本地通過git tag --contains $commit找到了包含這個commit的所有tag。如果沒有克隆源碼茂卦,也可以在頁面上比較commit提交時間和tag的創(chuàng)建時間何什,在commit提交時間之后創(chuàng)建的tag肯定都會包含相關(guān)的代碼。

其實看tag的歷史可以發(fā)現(xiàn)Linux 4.15.0-66-genericLinux 4.15.0-143-generic之間的時間跨度還是非常大的等龙,如果不是Fix commit在搜索出來的commit列表里的頭幾個处渣,估計我也沒有耐心或者找到更好的方式來定位問題伶贰,希望下次能想到更快更好的方式定位問題。

Ubuntu版本號

4.15.0-66這個版本號里每個字段包含不同含義罐栈,更多內(nèi)容可以參考這篇博客黍衙,介紹的很詳細。我把其中介紹Ubuntu版本號的部分拷貝到了這里:

Linux localhost 3.2.0-67-generic #101-Ubuntu SMP Tue Jul 15 17:46:11 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
第一個組數(shù)字:3, 主版本號
第二個組數(shù)字:2, 次版本號荠诬,當前為穩(wěn)定版本
第三個組數(shù)字:0, 修訂版本號
第四個組數(shù)字:67琅翻,當前內(nèi)核版本(3.2.0)的第67次微調(diào)patch
generic:當前內(nèi)核版本為通用版本,另有表示不同含義的server(針對服務器)柑贞、i386(針對老式英特爾處理器)
pae(Physical Address Extension):物理地址擴展方椎,為了彌補32位地址在PC服務器應用上的不足而推出,表示此32位系統(tǒng)可以支持超過4G的內(nèi)存
x86_64:采用的是64位的CPU
SMP:對稱多處理機钧嘶,表示內(nèi)核支持多核棠众、多處理器
Tue Jul 15 17:46:11 UTC 2014:內(nèi)核的編譯時間(build date)為 2014/07/15 17:46:11  

其他

在調(diào)試中間用到一些命令,記錄在這里:

# 用日期查找git log
git log --date=iso --pretty=format:'%ad%x08%aN %s' | awk '$0 >= "2020-02-28" && $0 <= "2020-04-01"'
# 用日期和作者查找git log
git log --pretty=format:"%ad - %an: %s" --after="2020-02-28" --until="2020-04-01" --author="John Doe"
# 查看tag間差異
git diff Ubuntu-4.15.0-91.92 Ubuntu-4.15.0-96.97 --stat
# 安裝內(nèi)核版本
apt install linux-image-4.15.0-91-generic linux-headers-4.15.0-91-generic
# 刪除內(nèi)核版本
apt remove linux-image-4.15.0-91-generic linux-headers-4.15.0-91-generic
# 搜索內(nèi)核版本
apt list | grep linux-image-4.15.0-
# 標記軟件包狀態(tài)有决,用來禁止更新等
apt-mark hold linux-image-generic linux-headers-generic
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闸拿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子书幕,更是在濱河造成了極大的恐慌新荤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台汇,死亡現(xiàn)場離奇詭異苛骨,居然都是意外死亡,警方通過查閱死者的電腦和手機励七,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門智袭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掠抬,你說我怎么就攤上這事吼野。” “怎么了两波?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵瞳步,是天一觀的道長。 經(jīng)常有香客問我腰奋,道長单起,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任劣坊,我火速辦了婚禮嘀倒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己测蘑,他們只是感情好灌危,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碳胳,像睡著了一般勇蝙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挨约,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天味混,我揣著相機與錄音,去河邊找鬼诫惭。 笑死翁锡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贝攒。 我是一名探鬼主播盗誊,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼时甚,長吁一口氣:“原來是場噩夢啊……” “哼隘弊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荒适,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梨熙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刀诬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽扇,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年陕壹,在試婚紗的時候發(fā)現(xiàn)自己被綠了质欲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡糠馆,死狀恐怖嘶伟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情又碌,我是刑警寧澤九昧,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毕匀,受9級特大地震影響铸鹰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皂岔,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一蹋笼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦剖毯、人聲如沸诞仓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽墅拭。三九已至,卻和暖如春涣狗,著一層夾襖步出監(jiān)牢的瞬間谍婉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工镀钓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留穗熬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓丁溅,卻偏偏與公主長得像唤蔗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窟赏,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容