ほげにっき

hogedigoの日記

EclipseをRAMディスク上で動かして開発する

5Gbyteという無駄に巨大なRAMディスクを作成してしまったので、その上でEclipseによる開発もしてみようと考えた。Eclipseそのもののイメージはもちろん、ワークスペースもRAMディスク上(ここではRドライブとする)に置く。


まずEclipseをダウンロード。展開したフォルダを丸っとRAMディスク上(ここではR:\eclipseとする)に置く。


次に上記Eclipseフォルダ中のeclipse.exeを起動。
ワークスペースを聞かれるのでRAMディスク上(ここではR:\workspace)に作成する。


お〜。かなり起動が速くなったo(^o^)o


このままだとOS終了時にRAMディスク内容も失われてしまうので、ハードディスクと定期的に同期を取る様にしよう。Windows7には標準でrobocopyというコマンドがあるのでそれを使用する。

       簡易な使用法 :: ROBOCOPY コピー元 コピー先 /MIR

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー
                       \\共有\パス)。
               /MIR :: 完全なディレクトリ ツリーをミラー化します。

robocopyを使うことで、コピー元とコピー先の差異のみをコピーすることができる。
また、/MON、/MOTオプションを利用することで定期実行することも。

           /MON:n :: コピー元を監視し、n 回を超える変更があった場合に再度実行します。
           /MOT:m :: コピー元を監視し、変更があった場合 m 分間再度実行します。


以下、eclipseフォルダ退避バッチファイル書いてみた

@echo off

rem === 変数の設定 ===
set name=eclipse
set ramdir=R:\%name%
set backupdir=C:\xxx\rd-backup
set latestmemo=%backupdir%\%name%.latest.txt

rem === 既にレストア済の場合、またはバックアップが存在しない場合はレストアしない ===
if exist %ramdir% goto do_backup
if not exist %latestmemo% goto do_backup

:do_restore
echo === レストア ===
for /F "delims=" %%f in (%latestmemo%) do @set latest=%%f
echo restoring from backup ... %latest%
robocopy "%backupdir%\%latest%" %ramdir% /MIR /NS /NC /NFL /NDL /NP /Z /TBD

:do_backup
echo === 1分間隔でバックアップ ===
rem バックアップフォルダ名(日時文字列含む)を作成
set time2=%time: =0%
set datetime=%date:~-10,4%%date:~-5,2%%date:~-2,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%
set backup=%name%%datetime%

echo backing up...%backup%
echo %backup%>%latestmemo%
robocopy %ramdir% "%backupdir%\%backup%" /MIR /NS /NC /NFL /NDL /NP /Z /TBD /MOT:1 /TEE /LOG+:"%backupdir%\%backup%.log"

日時(yyyyMMddHHmmss)を付加したファイル名でEclipseフォルダをハードディスクに退避する。/MOT:1オプションで、1分間隔でコピー元の変更を感知してミラーリングを繰り返す。
また、Windows起動時はRAMディスクが空になっているので、最後に取ったバックアップからデータを復元している。
ワークスペースのバクアップ&レストアも「変数の設定」を書き換えればそのまま使える。


結論:
たしかにEclipseの動作はかなり速くなった。でも、どうしても作業が消失するリスクがあるし、ミラーリング開始時は結構時間がかかって面倒*1なので、そこまでして導入するかというとビミョ〜かな。
むしろテスト用サーバーをRAMディスク上で動かした方が嬉しい気がするが・・・それはまた次回。


参考資料:
Windowsの「robocopy」コマンドでフォルダをバックアップ/同期させる:Tech TIPS - @IT
Robocopyでフォルダをコピー | Sunvisor Lab.

*1:まあバックアップだと思えばアリかも