Skip to content

Linux 7.3がBtrfsのファイルシステムIDとgrub2起動を修正

Linux 7.2-rc1でのBtrfsの変更により、ファイルシステムID(FSID)が不安定になり、OpenConnectの鍵導出が壊れた。修正は10ファイルに及ぶ。

著者 Tech AI Wire Team

3 分で読めます

Linuxデスクトップの端末ウィンドウ。btrfs filesystem showの出力に、ボリュームのラベル、UUID、3台の構成デバイスが表示されている。

数字で見る

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.cvolumes.cdisk-io.cinode.ctree-checker.czoned.cverity.cが含まれる。

開発者にとっての意味

FSIDは変わり得る値として扱うべきである。もし自分のコードがFSIDを保存し、カーネル更新をまたいで残ると期待しているなら、その前提はVPN利用者の本番環境で現に崩れた。識別子は都度読み直すのがよい。保存した値と食い違った場合の経路も用意しておきたい。

Btrfsをルートに用い、GRUB2の下でinitramfsを持たないマシンを運用しているなら、そこにLinux 7.2を展開してはいけない。このプルを含む7.3カーネルを待つか、initramfsを残して退避手段とするのがよい。Ubuntu 26.10はLinux 7.3の開発版を載せて出るため、自分のイメージがどのリリース候補を含むのかを、信頼する前に確かめてほしい。

最初の不具合にはより広い教訓がある。ユーザー空間が読める値はすべてインターフェースである。そう書いた文書が存在しなくても変わらない。そうした値を動かすカーネルの変更は、誰も試験を思いつかなかったソフトウェアを壊す。

出典

  1. Linux 7.3-rc4 To Address Two Unfortunate Bugs With Btrfs - Phoronix
  2. Merge tag 'for-7.3-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux - GitHub

関連記事