「sync」操作の進行状況を監視できますか?


103

非同期でLinuxシステムにマウントされたUSBディスクに大きなファイルをコピーしました。これは比較的迅速にコマンドプロンプトに戻りますが、syncもちろんを入力すると、すべてディスクに移動する必要があり、時間がかかります。

遅くなることは理解していますが、カウンターがゼロになるのを見ることができる場所はありますか?見ても助けbufferstopはなりません。


詳細については、lwn.net
Articles

回答:


162

見ると、すべてのデータがスプールアウトされるにつれて/proc/meminfoDirty数が時間とともに縮小することがわかります。その一部がWriteback同様に流出する可能性があります。これはすべてのデバイスに対する要約ですが、システム上の1つのデバイスが他のデバイスよりも非常に遅い場合、通常はそのキュー内のすべてが関連する場所になります。おそらく、Dirty開始sync時に0に近づくと終了する数が多くなります。インタラクティブな表示を得るには、これを試してください。

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

通常のディスクでは、通常無視できますWritebackが、USB転送パスにより頻繁に関与するかどうかはわかりません。明確な傾向がなくても上下に跳ね返るだけであれば、おそらくDirty数字を見ることができます。


4
私のシステムでは、ダーティが空になると、ライトバックは数メガバイトのままで、ダーティが空になり、その時点でダウンし始めます。
mattdm

24

/sys/block/<device>/stat同期中に適切なデバイスのファイルを見ることができます。9 番目の列は、デバイスで処理中のリクエストの数を示します。同期が完了すると、リクエストはゼロになります。
これをバイト数に変換する方法はわかりませんが、保留中の「もの」の量を大まかに把握できるはずです。

詳細については、カーネルのドキュメントのstat.txtファイルを参照してください。(inflightシステムのそのディレクトリには、実行中の読み取りおよび書き込み要求を含むことができるように見えるファイルもありますが、そのためのドキュメントが見つかりません。)


3
ただ、便利な参照のために、別の答えからアイデアを組み合わせる:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
私のUSBスティックの場合、これはコピー操作の期間中およびsyncその後全体で約150ホバーする傾向があります。0になりますが、最後にのみです。これにより、他の回答は、進行状況をイライラして監視するのに役立ちます。
mattdm

1
(理論的には、システム全体の情報ではなく適切なデバイスだけを見るのが好きです。)
mattdm

バイトを書き込み(同期、飛行中にフラッシュ)またはキャッシュしてドライブに書き込む方法はありますか?ドライブごとに書き込みキャッシュサイズがある場合、それを使用してdu、ドライブで同期される実際のデータを計算できます。
-unfa

10

Gregの答えを使用するとsync、メモリ内のダーティブロックの状態を表示しながら、単にバックグラウンドで実行できます。

これを実現するには、次のコマンドを実行するだけです:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

これは、フロントでsync実行watch中にバックグラウンドで呼び出します。場合はsync、コマンドが(ダーティブロックのサイズが0に達したときの周りの)完成しています、あなたはこのような出力を持っています。

1]  + 27260 done        sync

これは、コマンドが終了したことを意味し、+でwatchコマンドを強制終了できます。CtrlC


ところで:これは古い質問だと知っていますが、誰かがそれを探したときにGoogleにポップアップする最初の質問であり、見つけた解決策を追加したかったのです。
jflemieux

1
sync / umountが悪いと、カーネルから更新を取得できず、指示された場合にこの種のものを直接出力できます。
mcr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.