ディレクトリの内容を一覧表示できません。プロセスが無期限に待機します。

ディレクトリの内容を一覧表示できません。プロセスが無期限に待機します。

私はLinux Mint 13を使用しており、時には(まれに)私のホームディレクトリの内容を一覧表示できないことがあります。私がこれをしようとしたとき:

$ cd
$ ls

それではls無限待つしかありません。これは、他のアプリケーションがディレクトリの内容を読み取ろうとする場合です。最終的にアプリケーションを終了する必要があります。

私はこのLinuxディストリビューションを約1年間使用してきましたが、私のコンピュータは通常年中無休でオンになっており、数週間前に最初にこの問題に直面しました。その後、すべてのアプリケーションを閉じようとしましたが、役に立ちませんでした。その後、コンピュータを再起動したのに役立ちました。問題は「修正」されました。

今日また会いました。今回は原因についてもっと情報を探そうとグーグルして使ってみましたがlsof…やっぱり無期限待ちます!また、lsofホームディレクトリだけでなく他のディレクトリを試しても待ちます。と言って無期限待機するように$ lsof /path/to/any/fileなりました。lsof

lsofもしそうなら、リモートコンピュータでSSHを試してみましたが、うまくいきました。したがって、これは私のローカルコンピュータでより深い問題のようです。

(理由を見つけるために、現在コンピュータを再起動する予定はありません。)

UPD:出力セクションdmesg

Nov 12 14:35:36 dimon-progr kernel: [1305000.288107] INFO: task lsof:32463 blocked for more than 120 seconds.
Nov 12 14:35:36 dimon-progr kernel: [1305000.288112] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Nov 12 14:35:36 dimon-progr kernel: [1305000.288116] lsof            D c1044aa0     0 32463      1 0x00000084
Nov 12 14:35:36 dimon-progr kernel: [1305000.288122]  f10f3dc0 00000086 f10f3d68 c1044aa0 00000001 f3108ca0 c18e43c0 c18e43c0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288132]  eea0a18a 0004a2af f45073c0 ee00a5e0 ed9c25e0 ee00a5e0 f10f3db4 f10f3d84
Nov 12 14:35:36 dimon-progr kernel: [1305000.288141]  c105be37 ee00a5e0 f10f3d9c c105c535 00000296 f10f3d9c f10f3d9c c1027378
Nov 12 14:35:36 dimon-progr kernel: [1305000.288150] Call Trace:
Nov 12 14:35:36 dimon-progr kernel: [1305000.288160]  [<c1044aa0>] ? try_to_wake_up+0x140/0x190
Nov 12 14:35:36 dimon-progr kernel: [1305000.288167]  [<c105be37>] ? recalc_sigpending+0x17/0x40
Nov 12 14:35:36 dimon-progr kernel: [1305000.288172]  [<c105c535>] ? __set_task_blocked+0x35/0x80
Nov 12 14:35:36 dimon-progr kernel: [1305000.288178]  [<c1027378>] ? default_spin_lock_flags+0x8/0x10
Nov 12 14:35:36 dimon-progr kernel: [1305000.288183]  [<c1576d2d>] ? _raw_spin_lock_irqsave+0x2d/0x40
Nov 12 14:35:36 dimon-progr kernel: [1305000.288188]  [<c1575135>] schedule+0x35/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288193]  [<c121755d>] request_wait_answer+0x6d/0x1f0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288198]  [<c106a390>] ? add_wait_queue+0x50/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288203]  [<c1217758>] fuse_request_send+0x78/0xb0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288208]  [<c121bd6c>] fuse_do_getattr+0x12c/0x280
Nov 12 14:35:36 dimon-progr kernel: [1305000.288213]  [<c113d80d>] ? complete_walk+0x7d/0x100
Nov 12 14:35:36 dimon-progr kernel: [1305000.288219]  [<c121c381>] fuse_update_attributes+0x41/0xa0
Nov 12 14:35:36 dimon-progr kernel: [1305000.288224]  [<c121c684>] fuse_getattr+0x44/0x50
Nov 12 14:35:36 dimon-progr kernel: [1305000.288228]  [<c11370e2>] vfs_getattr+0x42/0x70
Nov 12 14:35:36 dimon-progr kernel: [1305000.288233]  [<c121c640>] ? fuse_listxattr+0x130/0x130
Nov 12 14:35:36 dimon-progr kernel: [1305000.288237]  [<c113716c>] vfs_fstatat+0x5c/0x80
Nov 12 14:35:36 dimon-progr kernel: [1305000.288241]  [<c11371e0>] vfs_stat+0x20/0x30
Nov 12 14:35:36 dimon-progr kernel: [1305000.288245]  [<c1137456>] sys_stat64+0x16/0x30
Nov 12 14:35:36 dimon-progr kernel: [1305000.288251]  [<c100ceec>] ? syscall_trace_enter+0x15c/0x170
Nov 12 14:35:36 dimon-progr kernel: [1305000.288256]  [<c1576ed4>] syscall_call+0x7/0xb
Nov 12 14:35:36 dimon-progr kernel: [1305000.288260]  [<c1570000>] ? encode+0x26/0x2b

答え1

ファイルシステムドライバが応答しない場合、ファイルシステムにアクセスしようとするプロセスは無期限にブロックされます。

ストレージデバイスに保存されているファイルシステムの場合、応答しない主な原因は、基本ハードウェアが応答しないか、正しく動作しないためです。これは通常、カーネルログ(dmesgLinuxまたはそのログファイルに表示/var/log/kern.log)に多数のメッセージを生成し、最終的にタイムアウトとI / Oエラー(EIO)を引き起こします。

ネットワークがダウンしているか、サーバーコンピュータがシャットダウンされた、サーバープログラムが実行されていない、または誤って設定されているため、サーバーから応答がないため、ネットワークサポートファイルシステムが応答しなくなる可能性があります。ファイルシステムの種類、ドライバー、およびその構成によっては、タイムアウトまたは無限待機が発生する可能性があります。特に、NFSのデフォルト値は無限待機です。ステートレスであるため、(操作中にサーバーが失敗した場合はサーバーが返されたときに操作を再開できます)、クライアントはサーバーが応答するまで(サーバーが応答するため)最終的にブロックされます。を返すと、ファイルシステムは正常に動作します。)

FUSEファイルシステムの場合、これはファイルシステムを実装するプログラムによって異なります。 FUSEは非常に柔軟であり、どのプログラムでも実装できます。一方、FUSEファイルシステムは、内部的にそれほど堅牢ではない、または誤動作する可能性がある他の多くのコンポーネントに依存することがあります。

ファイルシステムが応答しない場合は、まずファイルシステムの種類を確認してください。 Linuxでは、/proc/mountsマウントポイントを見つけます。マウントポイントは2番目のフィールドであり、ファイルシステムタイプは3番目のフィールドです。これにより、より多くの手がかりを見つけることができる場所がわかります。

  • ストレージデバイスのファイルシステムについては、カーネルログを確認してください。
  • ネットワーク対応ファイルシステムの場合は、ネットワーク接続を確認し、サーバーが応答していることを確認してください。関連ログは通常、サービスログ(ネットワークサービスごとのログなど/var/log/syslog/var/log/daemon.logにあります。
  • FUSE ファイルシステムの場合、プロセスが応答していることを確認してください。

プロセスがI / Oからブロックされ、ファイルシステムが回復するのを待つことを放棄した場合は、ファイルシステムを強制的にアンマウントする必要があります。 FUSEファイルシステムの場合は、それを提供するプロセスを終了してください。すべての種類のファイルシステムに対して、Linuxでは次のコマンドを使用して「遅延マウント解除」を実行できますumount -l。これは、ファイルシステムドライバが実行され続けても、マウントポイントからファイルシステムを切断します(たとえば、ハードウェアと通信し続けます)。

関連情報