web-dev-qa-db-ja.com

Sysrq + J「凍結ファイルシステムの解凍」とは何ですか?なぜ失敗するのですか?

ファイルシステムの問題(NFS、ヒューズ、バグ)が原因で中断できないスリープ状態にあるプロセスのフリーズを解除することは期待されていますか?

LinuxでSysrq + Jを押すと、システムが停止し、「Emergency Thaw on sda」がループで無限に出力され、他のSysRqは許可されませんか?その場合、ハードリブートのみが役立ちます。

5
Vi.

これはカーネルのバグです: https://bugzilla.kernel.org/show_bug.cgi?id=47741

2
Vi.

これはカーネルのバグであり、カーネル3.13 AMD64(Ubuntu Trustyから)にも引き続き存在します。

として _ Vi 彼のVM using VBoxManage controlvm <vm_name> keyboardputscancode 1d 38 54 24 a4 d4 b8 9d次の結果が得られます:

3.3.6-pf-vi+  : Reproducible
3.2.0-zen-vi+ : Reproducible
3.0.4-zen-vi+ : Reproducible
2.6.37.5-zen-... : Reproducible
2.6.33-zen2-... : Reproducible
2.6.32-zen1-... : Reproducible
2.6.31-zen11-... : Not reproducible
2.6.30-zen2-... : Not reproducible

Dave Chinnerから、次のように読むことができます。

Sysrq-jを介したファイルシステムの解凍は、解凍されたfilesytsemが凍結されていると誤って検出し、繰り返し解凍しようとするため、無限にループします。これは、4504230a71566785a05d3e6b53fa1ee071b864eb( "freeze_bdev:凍結されたスーパーブロックへのアクティブな参照を取得する")によって引き起こされたリグレッションであり、凍結されていないスーパーブロックに対して-EINVALを返さなくなりました。

さらに詳しく調べると、さらに深刻な問題が発生しました-freeze_super()でフリーズしたファイルシステムはthaw_bdev()でフリーズ解除できなかったため、手動でフリーズしたものでは緊急解凍が機能せず、sb-> s_umountでデッドロックが発生し、スーパーブロックが緊急解凍で繰り返されます。すでに読み取り用に保持されています。

フリーズまたは解凍する場所には、すでにスーパーブロックがあるか、簡単に取得できるため、freeze_super()を直接呼び出すことができます。したがって、bdevレベルの操作を強制終了し、すべてのネストインフラストラクチャをスーパーブロックレベルに移動して、単一の一貫したインターフェイスを作成できます。

ソース: Re:2.6.34 echo j>/proc/sysrq-トリガーはinifniteunfreeze/Thawイベントを引き起こします linux-kernelメーリングリストアーカイブ

1
kenorb