OS XでRAMディスク。
RAMディスク,それはRAMをストレージとして使う技。物理的なアクセスはRAMの読み書きそのものなので, HDDやフラッシュROMのストレージより断然高速だ。PCIカード等に大量のDRAMがささった単体の製品もあるし,昔のMac OSでは「メモリ」コントロールパネルから,メインメモリの一部をRAMディスクに割り当てることができた。
Mac OS Xのシステム環境設定には,そのような設定項目がないから, RAMディスクの機能自体がなくなったと思った方も多いだろう。ところがどっこい, GUIこそ用意されていないものの, OS標準の機能として現行のSnow Leopardにもしっかり引き継がれている。
RAMディスクの作成には, hdid(8) コマンドを使う。ターミナルを開き,マニュアルから“ram disk”と云う語句を探すと (man hdid → /ram disk), こんなくだりがある。
hdid -nomount ram://<sectors> will attach a ram disk that can be mounted and used after being format- ted with a newfs utility or Disk Utility.app. A sector is 512 bytes. A small shell script to create and mount a ram disk: #!/bin/sh NUMSECTORS=128000 mydev=`hdid -nomount ram://$NUMSECTORS` newfs_hfs $mydev mkdir /tmp/mymount mount -t hfs $mydev /tmp/mymount
シェルスクリプトを作る前に,まずはターミナルから,順を追って試そう。
RAMディスク作成手順。
- 空のRAMディスクを用意。
hdid -nomount ram://セクタ数 で,まずはRAMディスクの領域を確保する。1セクタ=512バイトなので,上記のサンプルでは62.5 MiBとなる。-nomount
は,用意したディスクを自動でマウントさせない指定。
成功すると,新たに用意されたディスクのデバイスノードのフルパス名 (/dev/disk
n) が返る。 - ボリュームを作成。
newfs_hfs デバイス で,さきほど作られた領域にHFS+ のボリュームを作る。とくに何も指定しなければ,デバイス全体を使う単一のボリュームが作られる。-v
ボリュームラベル を追加すれば,好きな名前をつけられる (これを指定しない場合, Finderからは“untitled”と見える)。 - マウントポイントを作成。
mkdir ディレクトリ名 で,ボリュームのマウント先ディレクトリを設ける。サンプルでは/tmp
内に作っているが, Mac OS Xのしきたりに従うなら/Volumes
内に作るほうがよいだろう。 - マウント。
mount -t hfs デバイス マウントポイント で,デバイスをさきほど作ったディレクトリへマウントする。これにより, FinderにRAMディスクが表示され,フツーのボリュームと同様の読み書きができるようになる。
制約。
以上の手順で, Macのメインメモリの一部をストレージとして使えるようになるわけだが,このストレージにはいくつかの制約がある。
- シャットダウン,再起動を行うと,ボリュームの内容が失われる。
データの格納場所がメインメモリである以上,シャットダウンや再起動,予期せぬ電源断などで簡単に揮発してしまう。そのため,データの長期保存には向かず,一時ファイルの置き場としての利用にとどまる。 - Finderから「取り出し」できない。
ダイアログ“ディスク○○を取り出せませんでした。1つ以上のプログラムが使用している可能性があります。”が表示される。 - ボリュームをマウントしたままログアウトし,他のアカウントでログインすると,前のユーザの作ったボリュームが丸見え。
ターミナルで umount (デバイス | マウントポイント) と打てば,マウント解除可能。
これらの制約をある程度回避し,都度ターミナルから操作する煩わしさをなくす手法は,次回紹介しよう。