4.3. Ceph File System
journal import
中に無効なヘッダーがあってもセグメンテーション違反が発生しなくなった
以前は、cephfs-journal-tool
は journal import
の操作時にヘッダーをチェックしていませんでした。これにより、セグメンテーション違反が発生していました。
この修正により、journal import
コマンドの実行時にヘッダーがチェックされ、ヘッダーが欠落していてもセグメンテーションエラーが発生しなくなりました。
障害復旧中の cephfs-data-scan
が期待通りに完了するように
以前は、障害復旧中に cephfs-data-scan
が実行されても、バックトレースから欠落していたディレクトリーのフラグメントや、重複リンクが作成されないことがありました。その結果、ディレクトリーにアクセスできなくなったり、MDS がクラッシュしたりしました。
この修正により、cephfs-data-scan
は、欠落しているディレクトリーフラグメントを適切に再作成し、重複したリンクを期待どおりに修正するようになりました。
inode の無効化の操作が完了するまでの時間が短縮される
以前は、場合によって inode への参照が余分に取得され、その参照が解放されないまま残ることがありました。その結果、inode の無効化を必要とする操作はタイムアウトが経過するまで遅延され、非常に遅くなりました。
この修正により、余分な参照が回避され、これらの操作が不必要な遅延なしにはるかに速く完了できるようになります。
NFS エクスポートディスクサイズより大きいスペースは割り当てられなくなる
以前は、ストレージブロックが割り当てられていない状態で空のファイルを作成できました。このような空のファイルが原因で、fallocate
などのコマンドを使用して目的のファイルリージョンに書き込むときに書き込み操作が失敗する可能性があります。
この修正により、NFS マウントポイントでの fallocate
コマンドが "Operation not supported" エラーで失敗し、ストレージブロックが割り当てられていない空のファイルは作成されなくなります。
プロキシーデーモンのログが即時更新されるように
以前は、プロキシーデーモンからのログメッセージは glibc ライブラリーによってバッファリングされていたため、ログファイルの更新に遅延が発生していました。その結果、クラッシュが発生した場合、一部のログエントリーが失われる可能性があり、トラブルシューティングとデバッグが困難になります。
この修正により、メッセージは glibc バッファリングをバイパスしてログファイルに直接書き込まれるようになり、ログがすぐに表示されるようになります。
OSD がいっぱいの状態で発生する非同期書き込みデッドロックが修正された
以前は、非同期書き込みが進行中で OSD がいっぱいになると、書き込みをキャンセルする通知がクライアントに送信されていました。書き込みがキャンセルされた後の呼び出しとキャンセルメソッドがいずれも、同じロックを取得しようとしました。その結果、デッドロックが発生し、OSD がいっぱいになった場合に、クライアントが無期限にハングする原因となりました。
この修正により、クライアントコードのデッドロックが解決されました。その結果、OSD がいっぱいのシナリオ中に非同期書き込みを行っても、クライアントがハングすることはなくなりました。
CephFS 仮想拡張属性の removexattr
サポートが拡張された
以前は、removexattr
はすべての適切な Ceph 仮想拡張属性でサポートされていなかったため、拡張属性を削除しようとすると "No such attribute" エラーが発生して失敗していました。
この修正により、removexattr
のサポートが拡張され、関連するすべての CephFS 仮想拡張属性に対応するようになりました。属性を削除する removexattr
を適切に使用できるようになりました。ルートの inode のレイアウトを削除することもできます。このレイアウトを削除すると、設定がデフォルトのレイアウトに復元されます。
fail コマンドの健全性警告チェック中に MDS と FS ID が検証されるように
以前は、ceph mds fail
と ceph fs fail
コマンドの実行時に MDS ID と FS ID はチェックされませんでした。その結果、クラスター内の別のインスタンスで健全性の警告が発行された場合、正常な MDS または FS インスタンスに対してこれらのコマンドを実行すると、"permission denied" エラーが発生して失敗します。
この修正により、システムは健全性警告チェック中に MDS および FS ID を検証するようになりました。この変更により、クラスター内の他の MDS または FS インスタンスに健全性の警告が発行された場合でも、正常なインスタンスに対して ceph mds fail
と ceph fs fail
コマンドが確実に成功するようになります。
エラーマッピングで特定のエラーメッセージが表示されるように
以前は、エラーコードとユーザーメッセージのマッピングが間違っていたため、一般的なメッセージが表示されていました。その結果、発生したエラーの具体的な情報を確認できませんでした。
この修正により、マッピングが修正され、エラー固有のメッセージが表示されるようになり、エラーに関する詳細なフィードバックを確認できます。
fscrypt
が長いファイル名を復号化できるように
以前は、復号を行っても、暗号化された生のファイル名を保持する代替名が常に付与されるわけではありませんでした。その結果、長いファイル名が正しく復号化されず、不完全なディレクトリーエントリーデータが生成されました。
この修正により、復号化中に代替名が提供されるため、fscrypt
は長いファイル名を適切に復号化できるようになりました。
スナップショット名はプレーンテキストで保存されるように
以前は、fscrypt
キーが存在するかどうかに関係なくスナップショットを作成できました。キーなしで mgr subvolume snapshot create
コマンドを使用してスナップショットを作成した場合、作成中にスナップショット名が暗号化されませんでした。その結果、プレーンテキストの名前を復号化しようとすると、生成された出力の判読が不可能でした。
この修正により、スナップショット名は暗号化されずにプレーンテキストとして保存されます。この変更により、fscrypt
キーが存在するかどうかに関係なく、スナップショット名が読み取りできる状態が保持されます。