私は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パッケージ管理ツールは、アップデート中にシステムがクラッシュした場合に一貫した状態になるようにfsync
1を呼び出すことがよくあります。同期呼び出しは、デバイスが書き込みを完了するのを待ち、システムがクラッシュしてもデータがまだ存在することを確認する必要があります。 USBドライブでは非常に遅い(フラッシュタイプのメモリは読み込みは速いが書き込みは遅い)。
インストールするeatmydata
そして使用eatmydata
注文するランニングdebootstrap
。これにより、fsync
呼び出しは何もしないため、書き込み速度がはるかに高速になります。実行されていないコマンドeatmydata
は影響を受けません。インストール中にシステムがクラッシュした場合、debootstrapコマンドで作成された内容が機能しない可能性があります。これは基本システムの場合は問題になりますが、USBスティックの場合は問題にならず、最初からやり直すことができます。
これは特権の上昇中は持続しません。たとえば、代わりにeatmydata
実行する必要があります。sudo eatmydata debootstrap …
eatmydata sudo debootstrap …
1 および/またはfdatasync
等