Linuxシステムに非同期でマウントされたUSBディスクに大きなファイルをコピーしました。これはコマンドプロンプトに比較的迅速に戻りますが、sync
と入力すると、もちろん、すべてディスクに移動する必要があり、これには長い時間がかかります。
遅くなることは理解していますが、カウンターがゼロになるところをどこかで見られますか? buffers
でtop
を見ても役に立ちません。
見つめている /proc/meminfo
は、すべてのデータがスプールされるにつれて、Dirty
の数が時間とともに縮小することを示します。一部はWriteback
にも流出します。これはすべてのデバイスに対する要約になりますが、システム上の1つのデバイスが他のデバイスよりもはるかに遅い場合、通常、そのキュー内のすべてがそれに関連していることになります。開始するとDirty
の数値が大きくなり、sync
が0に近づくのとほぼ同時に終了します。これを試して、インタラクティブな表示を取得します。
watch -d grep -e Dirty: -e Writeback: /proc/meminfo
通常のディスクでは通常Writeback
を無視できますが、それがUSB転送パスに頻繁に関与しているかどうかはわかりません。それが明確な傾向なしに上下に跳ねるだけの場合は、おそらくDirty
の数値だけを見ることができます。
/sys/block/<device>/stat
同期中の適切なデバイスのファイル。 9番目 列には、デバイスでの処理中のリクエストの数が表示されます。同期が完了すると、リクエストはゼロになります。
これをバイト数に変換する方法がわからない場合でも、未処理の「もの」がどれだけ残っているかを大まかに把握できるはずです。
詳細については、カーネルのドキュメントの stat.txt ファイルを参照してください。 (私のシステムのそのディレクトリにはinflight
ファイルもあります。このファイルには、読み取りおよび書き込みの処理中のリクエストが含まれている可能性がありますが、そのドキュメントは見つかりません。)
Gregの回答を使用することで、メモリ内のDirtyブロックの状態を表示しながら、sync
をバックグラウンドで実行できます。
これを実現するには、次のコマンドを実行します。
sync & watch -n 1 grep -e Dirty: /proc/meminfo
これは、前でsync
を実行しているときに、バックグラウンドでwatch
を呼び出します。 sync
コマンドが完了すると(Dirtyブロックのサイズが0に近づくと)、次のような出力が得られます。
1] + 27260 done sync
これは、コマンドが終了し、watch
コマンドを Ctrl+C。