同期操作の進行状況を確認できますか?

同期操作の進行状況を確認できますか?

私は非同期モードを使用して、Linuxシステムに搭載されたUSBディスクに大容量ファイルをコピーしました。これにより、比較的早くコマンドプロンプトに戻りますが、入力するともちろんsyncすべてをディスクに書き込む必要があるため、時間がかかります。

速度が遅いことはわかりますが、カウンタがゼロになるのを見ることができる場所はありますか?見ることは役に立ちませbufferstop

答え1

すべてのデータが流れ、時間が経つにつれて数字が減少する/proc/meminfoことを観察してください。一部のデータはオーバーフローする可能性があります。これはすべてのデバイスの概要ですが、システム内の1つのデバイスが他のデバイスよりはるかに遅い場合は、キュー内のすべてのデバイスがこれに関連していることがよくあります。この数字は開始時に非常に大きく、終了時にほぼ同時にゼロに近づくことがわかります。対話型ディスプレイでこれを試してください。DirtyWritebackDirtysync

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

通常のディスクでは通常は無視できますが、WritebackUSB転送パスでより頻繁に表示されるかどうかはわかりません。はっきりとした傾向なしに上り下りする場合なら数字だけ見てもわかりますDirty

答え2

/sys/block/<device>/stat同期中にデバイスのファイルを表示できます。 9列には、デバイスで進行中の要求の数が表示され、同期が完了するとこの要求の数は0に減少します。
これをバイト数に変換する方法はわかりませんが、処理待機中の「ジョブ」の量がどれくらいになるかを大まかに知ることができます。

より統計.txt詳細については、カーネル文書のファイルを参照してください。 (私のシステムの対応するディレクトリには、読み書き要求が含まれているように見えるファイルもありますが、inflightそれに関する文書は見つかりません。)

答え3

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

これを達成するには、次のコマンドを実行します。

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

これは前面で実行sync中にバックグラウンドで呼び出されます。コマンドが完了するwatchsync(ほぼダーティブロックサイズが0に達したとき)、次のような出力が得られます。

1]  + 27260 done        sync

これは、コマンドが完了し、+で終了できることを意味しますwatchCtrlC

答え4

次のコマンドを使用して、現在のブロックデバイスI / Oトラフィックを表示できます。ニモン、良い:

NMON=ld nmon -s1

(これはロードグラフとディスクグラフが1秒のリフレッシュ時間として表示されるように事前に選択します。これは、を押すのでnmonはなくパラメータなしで実行してグラフを切り替え、リフレッシュ時間をデフォルトの2秒で短縮することもできます。リフレッシュ遅延が増加します。)ld-+

関連情報