web-dev-qa-db-ja.com

Gnome、nautilusがUSBにファイルをコピーすると、100%またはそれに近い値で停止する

以前に同様の問題がありましたが、どのように解決したか覚えていません。

FATを使用してUSBスティックに何かをコピーしようとすると、100%で終了する場合があります。もちろん、メモリスティックを別の場所に転送しても、完全なファイルは含まれません。 (ファイルは映画です!)

Mount -o flushでデバイスをマウントしようとしましたが、同じ問題が発生します。

また、新しいFATパーティションでUSBスティックをフォーマットしました...

どんな風邪をひいていますか?

pS私はそれがDebianであるOSとは関係がないと思います。SSDドライブからの対処ではスタックしないと思います。

35
user27938

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

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

パワーユーザーのトリックを試したい場合は、カーネルパラメータvm.dirty_bytes15000000(15 MB)のような値に設定することで、Linuxが使用するバッファのサイズを減らすことができます。つまり、アプリケーションは実際の進捗状況よりも15MB以上多く取得することはできません。 (カーネルパラメータはSudo sysctl vm.dirty_bytes=15000000を使用してオンザフライで変更できますが、再起動しても変更されないようにするには、ディストリビューションに固有の/etc/sysctl.confなどの構成ファイルを変更する必要があります。)

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

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

47
dataless

古い質問ですが、問題がまだ出ているようです。推奨されているようにバッファを15MBに設定 here はUbuntu 19.04では機能せず、システムを大幅に停止しました。

1.5GBのファイルを空の(新しくフォーマットされた)FAT32 16GBドライブにコピーしようとしていました。運が悪かったかどうかを確認するために、約10分間実行しました。

NTFSに再フォーマットすると、操作が10秒未満で完了します。 FAT32は2GB未満を許可するため、なぜこれが問題になるのかはわかりませんが、問題なく動作するように見えました。 MacOSで使用したいドライブの理想的な修正ではありませんが、他のすべての使用例に対する簡単な回避策です。 exFATも同様に機能すると思いましたが、テストしませんでした。

1
Jacob Jones