小さいディレクトリで長い時間がかかる


21

Ubuntuを実行して、ターミナルを開いて

sudo bash
cd /
ls | head -n 1000

予想どおり、約20個のディレクトリが返されます。

ただし、lsを実行し、それを何かにパイプしないと、lsは別の端末から削除するまでそこにハングします。何が起きているのでしょうか?

編集:

> type ls
ls is aliased to `ls --color=auto`

編集:

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

lsの出力を色付けすると、このコマンドがハングするのはなぜですか?


3
実行type lsして、可能なエイリアスなどを確認します。
jw01312年

5
実行strace lsすると、潜在的に問題を特定するのに役立ちます。strace起動するプログラムによって行われたすべてのシステムコールを表示します。
ゴーサム

2
別名オプションなしで実行して/bin/ls(または、むしろcommand lsls、色のオプションが違いを生んでいるかどうかを確認してください。FWIW。ls出力がパイプまたは他の非端末デバイスである場合、カラーリングをオフにします。
jw013

3
エイリアスの代わりにコマンドを実行する前のバックスラッシュも同様です。\ls
ロブ

回答:


28

lsを正常に実行すると、ファイルのリストを表示するだけで、いずれのファイルでもstat(2)を実行する必要はありません。つまり、ファイル自体にはアクセスせず、ファイルを含むディレクトリのみにアクセスします。

--colorオプションを追加するか、ファイル自体を調べる必要がある他のlsオプションを使用する場合、lsはそれらのファイルをstat(2)する必要があります。

ほとんどの場合、ディレクトリ内の少なくとも1つのファイルが、NFSなどを介してリモートシステムから実際にマウントされています。そして、そのパーティションをマウントしたサーバーが起動していないか、応答していません。そのため、lsがそのディレクトリに関する情報を取得しようとすると、サーバーが応答するのを待ってカーネルでハングします。

他の人が言ったように、straceを使用すると、lsがハングしたときにアクセスしようとしているディレクトリがわかります。その後、そのマウントされたパーティションなどをアンマウントできます。


もう1つの可能性は、ディレクトリ内のファイルの1つが、リモートでサーバーが応答しないパーティションを指すシンボリックリンクであるということです...同じ原理です。
-MadScientist

ダウンしたサーバーからnfsをマウントしました。nfsマウントがダウンしているとstatがハングするという奇妙なようです。ダウンしているかどうかを判断するのは難しすぎず、壊れたシンボリックリンクが印刷される色でディレクトリを印刷するだけです。
-Snitse

実際、NFSサーバーがダウンしていることを伝えるのは(lsにとって)困難です。NFSは、異なるタイプのファイルシステム(ext3、xfsなど)です。すべてのファイルシステムはカーネルに実装されています。ls(1)のようなユーザープログラムは、パス名に対してstat(2)のようなシステムコールを実行するだけです。どの種類のファイルシステムが使用されているのかわかりません。この場合、結果が得られるまで、システムコールはハングします(したがって、ユーザー空間アプリはハングします)。したがって、lsは結果が得られるまでカーネルによってスリープ状態になります...これは決して起こりません。したがって、lsは何かが間違っているとは判断できません。
MadScientist

NFSの動作を変更できます。「ハードマウント」を指定すると、サーバーがタイムアウトし、それが発生するまでシステムコールから戻らない場合、カーネルは再接続を永久に試行します。あるいは、サーバー要求がタイムアウトした場合にカーネルが失敗で戻る「ソフトマウント」を要求できます。ただし、多くの/ほとんどのプログラムは、これらのタイプのタイムアウト操作を適切に処理するように作成されていないため、NFSでソフトマウントを指定することは危険であり、システムが不安定になります。NFSを定期的に使用する人は、ほとんど常にハードマウントを使用し、推奨します。nfs(5)を参照してください。
-MadScientist

私が持っていたsshfsマウントを、と私はそれらをアンマウントすることができる唯一の方法は、関連殺すことだったsshし、sshfsプロセスを。
ゴーティエ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.