web-dev-qa-db-ja.com

Linux上のRAMディスクのレイジーディスクバックアップ?

迅速で汚い要約:システムがビジーでないときにのみドレインする書き込みキャッシュのようなものが必要です。

この質問に沿って何かが欲しい RAMディスクと物理RAID 少しひねりを加えたもの。

私が頻繁に行っている特定のビルドでは、ビルド出力をramdiskに保持し、最終的にディスクに書き出すようにします。私が構築している特定のターゲットの1つは、実際にはcp、tar、gzipなどの束であるため、ディスクにバインドされています。タイトなデバッグサイクルでは、高速にしたいので、電源オフによってビルド出力が破壊されてもあまり気にしません。ただし、システムがビジーでないときにRAMディスクがディスクに同期されていれば便利です。 cronジョブでこれを行うことは想像できますが、他の質問(ディスクにオーバーフローするRAMディスク)の特性とこの新しいひねり(十分なアイドルディスクがある場合)を組み合わせた、より一貫性のあるソリューションがあることを、偶然に皆さんにお願いしています。時間、ramdiskの内容はディスクにもそれを作ります)。理想的には、全体が単一のマウントポイントのように見えます。ここで、使用するRAMの合計サイズと量を設定します。

- - 更新しました - -

私は本当にかなり速い書き込みパフォーマンスが欲しいので、ページキャッシュが私が望むことをすることはないと思います。

5
kbyrd

奇抜なアイデアのカップル。まず、パピーリナックスはちょっとこれをします。それはあなたの作業スペースをパーマネントに頻繁に同期します。スマートスクリプトと単純なコピーコマンドでこれを行うようです。

次に... ramdisk-> real disk間のrsyncを頻繁にスケジュールした場合はどうなりますか?

1
James Risto

しかし、他の質問(ディスクにオーバーフローするRAMディスク)の特性とこの新しいひねり(十分なアイドルディスク時間が与えられた場合、RAMディスクの内容がそれを実現する)を組み合わせた、より一貫性のあるソリューションがある可能性があります。ディスクにも)。

あなたが求めているのは、遅延書き込みメカニズムです。つまり、RAMディスクへの書き込みは永続ストレージへの書き込みよりも優先されますが、すべてのデータは最終的にディスクに書き込みますよね?

理想的には、全体が単一のマウントポイントのように見えます。ここで、使用するRAMの合計サイズと量を設定します。

おかしなことに、LVMミラーを使用してこのプロセスを完了することができる場合があります。

  1. Ramdiskを物理ドライブを持つボリュームグループのメンバーにします。

  2. Ramdiskをハードドライブにミラーリングします。 LVMミラーは方向固有であることに注意してください。つまり、データは1つのPVから別のPVに一方向に流れます。

  3. LVMボリュームを統合ファイルシステムとしてどこかにマウントします。

書き込みはスプールされ、LVMベースのRAMディスクに書き込まれます(ミラーのおかげで、物理ドライブも同様に)。書き込みが同期で並列(両方のドライブが同時に書き込み)であるRAID-1とは異なり、LVMミラーは非同期で順次です(プライマリドライブが書き込みを受信し、LVMが書き込みをミラーにプッシュします)。これは、探している動作に近くなります(ただし、100%ではありません)。 LVMは保留中の書き込みに圧力をかけてディスクにクリアするため、表示される「アイドリング」はせいぜい数秒、最悪の場合は部分秒で測定されることに注意してください。

この配置の裏側は、非常に優れた永続化メカニズムを備えていることです。起動したら、RAMディスクを作成し、既存のドライブをそれにミラーリングします。ミラーが完成したら、ミラーを壊し、方向を逆にします(ramdisk-> hdd)。つまり、再起動するたびに、データがRAMディスクに入れられ、シャットダウンの直前にRAMディスクからハードドライブに書き戻されます。おそらくPerlまたはシェルスクリプトでスクリプト化できます。

これを行うには他の方法があると確信していますが、これはクイック 'n'ダーティバージョンです。もう少し考えて、何がわかるか見ていきます。

4
Avery Payne

あなたが説明することは、まさにあなたのオペレーティングシステムのディスクキャッシュがすることになっていることです。最新のOSは、十分なメモリを自由に使用できる場合、これに非常に優れています。

私の意見では:あなたのマシンに十分なRAMを与え、OSに大変な仕事をさせてください。

2