Linux 7.3がBtrfsのファイルシステムIDとgrub2起動を修正
Linux 7.2-rc1でのBtrfsの変更により、ファイルシステムID(FSID)が不安定になり、OpenConnectの鍵導出が壊れた。修正は10ファイルに及ぶ。
3 分で読めます
英語の原文から機械翻訳したものです。原文はClaire Whitmoreが事実確認と編集を行いました。内容に相違がある場合は英語版が優先されます。 編集方針

数字で見る
- Btrfs files changed in the merged pull
- 10
- lines added, against 13 removed
- 96
- kernel where the ID regression appeared
- 7.2-rc1
Linus TorvaldsがBtrfsの修正一式をLinux 7.3カーネルに取り込んだ。そのうち2件は、稼働中のマシンを壊した変更を元に戻すものである。1件はBtrfsが自身について報告する識別子を不安定にしていた。もう1件は一部のコンピューターが起動を完了できなくしていた。
BtrfsはLinuxに組み込まれたファイルシステムである。FedoraとopenSUSEの既定の選択肢であるため、ここでの後退はサーバーだけでなく普通のデスクトップにも届く。プルリクエストはBtrfsのメンテナーであるDavid Sterbaから出され、for-7.3-rc3-tagというタグが付いている。Phoronixは、この修正がリリース候補7.3-rc4に入ると報じている。
ファイルシステムIDが安定しなくなった理由
マウントされたファイルシステムはいずれもFSIDを報告する。FSIDはfile system identifier(ファイルシステム識別子)の略である。プログラムはこれを読み、あるファイルシステムを別のものと区別する。Sterbaのプルリクエストは最初の問題を"filesystem id stability on default configurations"と記している。
Phoronixによれば、この後退はLinux 7.2-rc1で入った。その時点から、既定の構成でBtrfsが報告するIDが変わり得るようになった。以前の値を保存していたソフトウェアは、その後に別の値を読むことになった。
プルリクエストは被害を直接名指ししている。"openconnect key derivation"である。OpenConnectは企業向けVPNのオープンソースのクライアントであり、NetworkManagerがその対応を同梱している。Phoronixは今回の不具合をこのVPN対応に結び付けている。鍵の一部が、突然変わる値から導かれていれば、その鍵はもう合致しない。
一部のマシンが起動しなくなった理由
2件目の修正は、Sterbaの言葉で"/dev/root detection for initramfs-less boot systems with grub2"を元に戻すものである。
initramfsは小さな一時的ファイルシステムである。カーネルは起動の早い段階でこれを読み込み、本当のルートファイルシステムを探すために使う。多くのディストリビューションはこれを同梱する。起動を速くするため、あるいは構成を簡素に保つため、これを省く構成もある。
initramfsがなければ、カーネルはどのデバイスがルートを持つのかを自力で判断しなければならない。Phoronixは、GRUB2で起動するBtrfsのルートファイルシステムでこの検出が失敗したと報じている。ルートファイルシステムを特定できないマシンは起動を終えられない。
プルに入っている残りの中身
このマージは10ファイルを変更し、96行を追加し、13行を削除する。Sterbaのメッセージは残りを通常の修正として記している。以下に、それぞれが触れる領域の平易な説明を添えて挙げる。
| プルに記された領域 | Btrfsのその部分の役割 |
|---|---|
| 圧縮インラインエクステント | ごく小さなファイルをメタデータ内に圧縮して格納する |
| Zonedモードのゾーン有効化 | 固定されたゾーン単位で書き込むドライブに対応する |
| チャンクアイテムの領域検証 | ストレージのチャンクを対応付ける記録を検査する |
| Verityアイテムの削除 | ファイル内容を検証するfs-verityのデータを片付ける |
| フリースペースツリーの再構築 | 空き領域の地図を作り直す際のエラーを扱う |
| Reflinkとホールパンチ | 参照によるブロック複製と、ファイル内の範囲の解放を行う |
| ブロックグループの走査 | 割り当て済みブロックの集まりをたどる処理を保護する |
| エラーメッセージ | カーネルログ出力の文言を訂正する |
変更されたファイルにはsuper.c、volumes.c、disk-io.c、inode.c、tree-checker.c、zoned.c、verity.cが含まれる。
開発者にとっての意味
FSIDは変わり得る値として扱うべきである。もし自分のコードがFSIDを保存し、カーネル更新をまたいで残ると期待しているなら、その前提はVPN利用者の本番環境で現に崩れた。識別子は都度読み直すのがよい。保存した値と食い違った場合の経路も用意しておきたい。
Btrfsをルートに用い、GRUB2の下でinitramfsを持たないマシンを運用しているなら、そこにLinux 7.2を展開してはいけない。このプルを含む7.3カーネルを待つか、initramfsを残して退避手段とするのがよい。Ubuntu 26.10はLinux 7.3の開発版を載せて出るため、自分のイメージがどのリリース候補を含むのかを、信頼する前に確かめてほしい。
最初の不具合にはより広い教訓がある。ユーザー空間が読める値はすべてインターフェースである。そう書いた文書が存在しなくても変わらない。そうした値を動かすカーネルの変更は、誰も試験を思いつかなかったソフトウェアを壊す。
出典
関連記事

Linux 7.4、blockプルでApple M4のNVMeに対応
Linux 7.4のblock(ブロック)サブシステムのプルが、Apple M4のANS2 NVMeコントローラー用ドライバーを追加。旧Macのフロッピードライバーへの33件の修正も含みます。

Torvaldsのページキャッシュパッチに改良版:ext4で4.5倍高速に
MetaのKiryl Shutsemauが、Torvaldsのページキャッシュ(page cache)パッチを18本のパッチからなるRFCに仕上げました。ext4の64スレッドでは、小さな読み取りが毎秒約1,500万回から7,000万回に増えました。

BeamFSのRFC:Reed-Solomon符号を使うLinuxファイルシステム
18件のパッチからなるLinuxのRFC、BeamFSは、すべてのブロックをReed-Solomon(リード・ソロモン)符号語として保存します。これにより、1台のディスク上で反転したビットを修復できます。代わりに容量の7%を使います。