Debian に USB ディスク書き込みをより積極的にバッファリングするように指示するにはどうすればよいですか?

Debian に USB ディスク書き込みをより積極的にバッファリングするように指示するにはどうすればよいですか?

私はDebianシステムでUSBスティックのIO転送速度を上げる方法を見つけようとしています。おそらくキャッシュを使用することもできます。

debootstrap背景:私はDebianシステムをディスクにインストールするスクリプトを書いています。主にUSBスティックとして使いたいです。しかし、非常に遅いです(理由はわかりませんが、これは別のトピックです)。私はこれをはるかに速くする方法を見つけました。つまり、ハードドライブの一部の一時イメージファイルがサポートされているループデバイスでプロセスを実行することです。その後、dd画像をUSBドライブにコピーします。

私の質問:ハードドライブに一時イメージファイルがなくても、この速度(またはより速く)を作成できますか?その規模を見積もることは容易なことではない。私にとっては、それが思ったよりも複雑に感じられます。そして必要以上に遅いです。 RAMもたくさんあり、スワップスペースも多いです。 USBスティックから直接プロセスを実行すると、カーネルにすべてをより積極的にキャッシュするように指示できますか?実際、これはすべてRAMで行われ、私のプログラムをブロックせずにバックグラウンドでできるだけ早くメモリースティックに書き込みます。結局私は走って待ってからsync棒を取り出した。

理想的には非侵襲的でなければなりません。カスタムカーネルはオプションではなく、問題のある方法でグローバルシステム設定を再設定しません(これは私の主なワークステーションであり、信頼性が低下したくありません)。

答え1

ループデバイスがATAキャッシュフラッシュ/sync要求を削除した可能性があります。非常に通常のUSBスティックでは非常に遅いです。 USBディスクレベルでフラッシュを無効にするか(実行してecho "write through" > /sys/block/$device/queue/write_cache)、USBスティックをマウントするオプション(ext3 / 4ファイルシステムの場合)を使用してnobarrier同様の結果を得ることができます。

答え2

Debianパッケージ管理ツールは、アップデート中にシステムがクラッシュした場合に一貫した状態になるようにfsync1を呼び出すことがよくあります。同期呼び出しは、デバイスが書き込みを完了するのを待ち、システムがクラッシュしてもデータがまだ存在することを確認する必要があります。 USBドライブでは非常に遅い(フラッシュタイプのメモリは読み込みは速いが書き込みは遅い)。

インストールするeatmydataそして使用eatmydata注文するランニングdebootstrap。これにより、fsync呼び出しは何もしないため、書き込み速度がはるかに高速になります。実行されていないコマンドeatmydataは影響を受けません。インストール中にシステムがクラッシュした場合、debootstrapコマンドで作成された内容が機能しない可能性があります。これは基本システムの場合は問題になりますが、USBスティックの場合は問題にならず、最初からやり直すことができます。

これは特権の上昇中は持続しません。たとえば、代わりにeatmydata実行する必要があります。sudo eatmydata debootstrap …eatmydata sudo debootstrap …

1 および/またはfdatasync

関連情報