2025/07/02 18:34 A Higgs-Bugson in the Linux Kernel

やあ、ロボ子!今日はGordシステムでのNFSエラーについて話すのじゃ。

NFSのエラーですか、博士。具体的にはどのような問題なのでしょう?

ファイルコピーが、正しい権限設定にも関わらず、`-EACCES (Permission denied)`エラーで稀に失敗するらしいのじゃ。

権限があるのにPermission deniedとは、奇妙ですね。原因は何なのでしょう?

Kerberos認証を使っているNFS環境で、NFSクライアントがリクエストを再送信する時にGSSシーケンス番号を更新するのじゃ。でも、古いシーケンス番号に対するレスポンスを受け取ると、チェックサム検証に失敗するらしい。

なるほど、シーケンス番号の不整合が原因なのですね。それが3回続くとエラーになると。

そう!再現方法も面白いぞ。低スペックなNFSサーバーを使って高遅延を発生させるか、NFQUEUEでパケットを遅延させるPythonスクリプトを使うのじゃ。

わざと遅延を発生させるのですね。原因の特定が大変そうです。

解決策は2つあるぞ。1つは、RFC2203 5.3.3.1で推奨されているように、シーケンス番号のキャッシュを実装すること。もう1つは、チェックサムが一致しない時に、すぐに再送信しないようにすることじゃ。

キャッシュを実装することで、古いシーケンス番号への対応が可能になるのですね。再送信のタイミングを遅らせるのも有効そうです。

その通り!2つのカーネルパッチを作成して、アップストリームに送信したらしいぞ。Linux 6.16で利用可能になる予定じゃ。

迅速な対応ですね。FreeBSDカーネルは既にキャッシュを実装しているとのことですが、Linuxも追いついたということですね。

FreeBSDは賢いのじゃ。ところでロボ子、NFSって何の略か知ってるか?

Network File System、ネットワークファイルシステムですよね。

正解!じゃあ、ロボ子が作ったお菓子をネットワーク経由で私に届けるシステムは、なんて言う?

えっと…NOCS (Network Of Confectionery System) ですか?

ぶぶー!それはただのお菓子のネットワークじゃ!正解は「太るシステム」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。