メモリを余すとこなくRamDisk

Macです。
インメモリをカッとなって8GBまで増設したので
頑張って使い切れるように設定したメモです。


何はともあれRamDiskを作成します。
自動で作ってくれるアプリはたくさんありますが
あとあと自由に出来なくて困ったのでコマンドから作ります。

# RamDisk Create
mtpo="$(hdid -nomount ram://4096000)"
diskutil eraseDisk HFS+ RamDisk $mtpo

コマンドで作ってフォーマットしているんですが
マウントした場所を変数でとってきてフォーマットするように指定しています。
これをしないとUSBなんかをさした状態でこのコマンド実行すると
悲劇が起こるかもしれません。。

hdidの2つめの引数はRamDiskのサイズ(2048で1KB)なので
自由に設定します。(ここでは2GB)
diskutilの3番目の引数は名前の指定なので
RDなりRamDなりお好きな名前をどうぞ。

Finderからも作ったRamDiskが見えているはずなので
Cacheやコンパイル先に指定して使えます。


ただし作ったきりでは電源オフで全部消えてしまいますので・・・
バックアップは

# RamDisk Backup
rsync -a --delete /Volumes/RamDisk /Users/xxxxxxxxxxx/Documents/RamDiskBackUp
rsync (オプション) バックアップもと=RamDiskの場所 バックアップ先=ここではUSER以下のを指定

復元は逆に

# RamDisk Restore
rsync -a /Users/xxxxxxxxxxxxxx/Documents/RamDiskBackUp/RamDisk/ /Volumes/RamDisk/

を使うと何とかなります。
  # ほかにdmgで退避したりとマシな方法はあると思いますがもう考えるのが・・・


それでも電源オンオフ時にコマンドを打つのは面倒なので
 A) RamDisk Create + RamDisk Restore
 B) RamDisk Restore
の二つのbashスクリプトにまとめます。
A)

#! /bin/sh
# RamDisk Create
mtpo="$(hdid -nomount ram://4096000)"
diskutil eraseDisk HFS+ RamDisk $mtpo

# RamDisk Restore
rsync -a /Users/xxxxxxxxxxxxxxx/Documents/RamDiskBackUp/RamDisk/ /Volumes/RamDisk/

B)

#! /bin/sh
# RamDisk Backup
rsync -a --delete /Volumes/RamDisk /Users/xxxxxxxxxxxxxxxx/Documents/RamDiskBackUp


あとはまとめたスクリプトをユーザーログイン・ログオフ時に
自動実行するように設定すれば手間が省けます。
SnowLeopard(OSX 10.6.4)でrc.localやshutdownに書こうとすると
古いよ・・・と言われてしまったので別の方法を探し、
defaultsコマンドで設定しました。

$ sudo defaults write com.apple.loginwindow LoginHook (Aのスクリプト) 
$ sudo defaults write com.apple.loginwindow LogoutHook (Bのスクリプト)

  # 本当はログインユーザーに応じてスクリプト実行するかを判断する仕組みがあった方が良いですね。
  # これだと複数人で使うマシンの時支障が出るので相対パスでスクリプトがあるかを条件文に
  # シェルスクリプトを書いた方が良いと思います。


フリーズや停電でRamDiskが吹っ飛ぶのが心配な場合は
cron(Macで使うのかな?)で何分かおきに(B)のスクリプトを実行すれば
定期的に退避も出来ていいんじゃないでしょうか。


ようやく心置きなくFirefoxのCacheどころかapp自体とLibraryの関係ファイルや
Eclipse全部とワークスペースをRamにおけました。
ながいながいよ。