web-dev-qa-db-ja.com

外部ドライブにコピーするときに進行状況ウィンドウが正しくない理由

タイトルを編集して、ここで何を書くかをよりよく説明してください。

たとえば、大きなファイルをペンドライブにコピーすると、進行状況ウィンドウに、ほとんどの時間でリアルタイムと終了の割合が表示されないという推定値が表示されますが、すべてが完了し、進行状況ウィンドウが表示される場合があります閉じます。私はペンドライブを取り出しに行き、それはまだ使用中であると言います。ペンドライブを確認した後、まだファイルをコピーしていますが、これを示す進行ウィンドウはありません。

大きなファイルでのみ発生するのではなく、多くの小さなファイルでも発生します。それらをコピーすると、プログレスバーにたとえば15秒と表示され、その時間で終了しますが、リアルタイムは1分であり、次の45秒間はペンドライブのライトを実際に見て、その上で実際の活動です。

私はこれに対する修正がどれほど深くできるかを読んだので、修正方法を知りたくありません。私が知りたいのは、なぜ進行状況ウィンドウにコピーのプロセスに対応しない推定値が表示されるのかということです。

外部ユニットのキャッシュに依存していますか?

ファイルサイズとファイルの量が正しい推定に影響します。たとえば、4 GBの1ファイルまたは4 MBの1000ファイル。

動作を変更できる構成オプションはありますか?.

SBスティックへのファイルのコピーは終了しません のようなこれに似た他の質問がありますが、なぜこのように振る舞うかについてのメカニズムに焦点を当てています。

10
Luis Alvarado

私はあなたがあなたのファイルマネージャとしてNautilusを使用していると思うでしょう、もしそうなら、これに関する長年のバグがあります。 Mint、Fedora、Red Hatなどすべてに影響を与えることについて言及するには数が多すぎます。 Ubuntuにも同じ問題がないわけではありません。

サムネイル表示をオフにすることをお勧めします。他の人は「最新のカーネル」に期待を寄せていますが、これはまだ存在しています。

問題=高速で開始してから遅くなるこれは、非同期でマウントするとキャッシュに書き込まれ、キャッシュがいっぱいになると「実際の」書き込み速度が表示されるためです。

回避策はSudo cp /filetobecopied /dev/nameofdeviceのようです

別の ここに投稿 は、「チャンクでのコピー」が機能することを示しています。私の側では未確認。

6
Ringtail

これは解決策のあるいい答えです: https://unix.stackexchange.com/a/181236 それは言います:

そのように発生する理由は、プログラムが「このデータを書き込む」と言って、Linuxカーネルがそれをディスクに移動するためにキューに入れられたメモリバッファーにコピーし、「OK、完了」と言うからです。そのため、プログラムはすべてをコピーしたと考えます。その後、プログラムはファイルを閉じますが、突然バッファーがディスクにプッシュされるまでカーネルは待機します。

そのため、残念ながら、プログラムはバッファをフラッシュするのにどれだけの時間がかかるかわからないので、それを知ることができません。

パワーユーザーのトリックを試してみたい場合は、/ proc/sys/vm/dirty_bytesを15728640(15 MB)のような値に設定することにより、Linuxが使用するバッファーのサイズを縮小できます。これは、アプリケーションが実際の進捗よりも15MB以上早く取得できないことを意味します。

副作用として、この設定ではコンピューターのデータ書き込みスループットが低下する可能性がありますが、全体として、大量のデータを書き込む際にプログラムが長時間実行されていることと、プログラムはそのジョブで完了したように見えますが、カーネルが実際の作業を行うため、システムはひどく遅れます。 dirty_bytesを適度に小さな値に設定すると、空きメモリが少なく、突然大量のデータを書き込むプログラムを実行したときにシステムが応答しなくなるのを防ぐのに役立ちます。

ただし、あまり小さく設定しないでください!カーネルがバッファを1/4秒以下で通常のハードドライブにフラッシュできるという概算として15MBを使用します。それは私のシステムが「遅れ」を感じないようにします。

1
Cirelli94