「冰凍荒原」版 Linux 核心有bug,不要使用!Linus Torvalds 警告併發布 5.12-rc2 版本

機器之心報道,作者:魔王、杜偉

暴雪也沒攔住的 Linux 核心新版本 5.12 rc1 竟然出現檔案系統損壞問題!Linux 之父 Linus Torvalds 發佈緊急通知,並在三天內趕出 5.12 rc2 核心版本。

2 月份,受惡劣天氣影響,美國多個地區出現大規模斷電。Linux 之父 Linus Torvalds 所在的俄勒岡州波特蘭地區也沒有幸免。但比較勵志的是,即使經歷了六天的斷電生活,Linus Torvalds 還是趕出了新一版的 Linux 核心(候選版本)—Linux 5.12 rc1。

但近日,Linus Torvalds 在發給 Linux 核心郵件列表的一封郵件中卻警告稱:請勿使用其公共 git 樹中的 5.12-rc1 核心

郵件地址:https://lore.kernel.org/lkml/CAHk-=wjnzdLSP3oDxhf9eMTYo7GF-QjaNLBUH1Zk3c4A7X75YA@mail.gmail.com/

他在郵件中寫道:

大家或許注意到了,在我的公共 git 樹中,「v5.12-rc1」標籤已經更名為「v5.12-rc1-dontuse」。更名後依然是同一個對象,在內部仍顯示為「v5.12-rc1」,且仍由我簽名,但該標籤的使用者可見名已經更改了。

檔案交換處理問題可能導致嚴重後果

事實證明, Linus Torvalds 確實將一些程式碼標記為「dontuse」,因為新發布的 5.12 候選版本存在的問題嚴重破壞了交換檔案(swapfile)處理。具體來說,更新後的程式碼會丟失指向交換檔案開頭的適當偏移量(proper offset)。用 Torvalds 自己的話說,「交換仍會進行,但出現在了檔案系統不該交換的地方,並將釀成災難性的後果。」

這意味著,當核心將記憶體內容分頁到磁碟上時,資料將落在交換檔案同一磁碟和分區的隨機部分,但並非與檔案處於同一磁碟和分區,而是與被直接發送至磁碟原始扇區的垃圾內容處於同一磁碟和分區。這意味著,不僅會覆蓋現有檔案中的資料,而且還將波及大段的元資料,這些元資料的損壞可能導致整個檔案系統無法掛載和使用。

Torvalds 指出,如果你不使用交換,那這個問題對你沒什麼影響;如果你使用交換分區,而不是交換檔案,那你也不會受到困擾。但是,他表示雖然自己非常了解該核心,但他並非對普通終端使用者關心的所有基礎問題都那麼熟悉:

據我所知,所有正常的發行版本使用交換分區而不是交換檔案,因為交換檔案速度較慢,且存在多種其他複雜性問題。

很多發行版本仍然默認交換分區,而不是交換檔案。但 Ubuntu——或許是世界上最廣泛部署的 Linux 發行版本,在四年多以前就默認安裝交換檔案了。如果你是 Ubuntu 使用者(或 Ubuntu 衍生版本的使用者),你或許會得到一份交換檔案,而這個 bug 可能會毀掉整個根檔案系統。

除了上述問題外,Torvalds 還提醒個人使用者應該如何對待新發布的 Linux 核心(候選版本)。開發者最好不要圍繞著該核心版本進行開發工作,這可能會帶來嚴重且持久的 bug。Torvalds 表示:

我想要確保沒人使用 5.12-rc1 開啟新的主題分支。我知道一些開發者會有這種想法:「既然 rc1 出來了,我就把所有開發工作放到其合併窗口。我要趕緊轉向 rc1,以便下次發佈時可以以此作為基礎。」但是,這次請不要這麼做。這個過程可能會很順利,因為開發者使用了常見的分區設置,但這對於可能將該區域一分為二的人而言將會是糟糕的基礎。

這還會帶來另一個 Linux 使用者需要注意的問題:不要盲目使用未經充分測試的程式碼。Linux 核心候選版本通常非常堅固,因此許多人想盡可能早地嘗試新特性,但這樣做會帶來非常惡劣的後果。先等待程式碼進入生產環境,或許可以避免一些嚴重後果。

Linux 5.12-rc2 版本已發佈

在發現 5.12-rc1 版本存在的交換檔案問題後,Linux 幾天內就推出了 5.12-rc2 核心版本。

對於 5.12-rc2,Torvalds 表示:「除了對交換檔案 IO 偏移量的修復之外,該版本還對一些 io_uring 執行緒處理進行了重組,這不僅解決了一些基本問題,還使得程式碼更小、更簡單。」

郵件地址:https://lore.kernel.org/lkml/CAHk-=whH-stL2zLCf02HZaOeQgS4oGa7eEiHeYZGj-orK-PX0g@mail.gmail.com/T/#u

參考連結:

https://arstechnica.com/gadgets/2021/03/psa-linux-folks-stay-away-from-the-5-12-rc1-kernel/

https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.12-rc2-Released

相關文章