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ディスク作成手順。

  1. 空のRAMディスクを用意。
    hdid -nomount ram://セクタ数 で,まずはRAMディスクの領域を確保する。1セクタ=512バイトなので,上記のサンプルでは62.5 MiBとなる。-nomount は,用意したディスクを自動でマウントさせない指定。
    成功すると,新たに用意されたディスクのデバイスノードのフルパス名 (/dev/diskn) が返る。
  2. ボリュームを作成。
    newfs_hfs バイス で,さきほど作られた領域にHFS+ のボリュームを作る。とくに何も指定しなければ,デバイス全体を使う単一のボリュームが作られる。-v ボリュームラベル を追加すれば,好きな名前をつけられる (これを指定しない場合, Finderからは“untitled”と見える)。
  3. マウントポイントを作成。
    mkdir ディレクトリ名 で,ボリュームのマウント先ディレクトリを設ける。サンプルでは /tmp 内に作っているが, Mac OS Xのしきたりに従うなら /Volumes 内に作るほうがよいだろう。
  4. マウント。
    mount -t hfs バイス マウントポイント で,デバイスをさきほど作ったディレクトリへマウントする。これにより, FinderにRAMディスクが表示され,フツーのボリュームと同様の読み書きができるようになる。

制約。

以上の手順で, Macのメインメモリの一部をストレージとして使えるようになるわけだが,このストレージにはいくつかの制約がある。

  • シャットダウン,再起動を行うと,ボリュームの内容が失われる。
    データの格納場所がメインメモリである以上,シャットダウンや再起動,予期せぬ電源断などで簡単に揮発してしまう。そのため,データの長期保存には向かず,一時ファイルの置き場としての利用にとどまる。
  • Finderから「取り出し」できない。
    ダイアログ“ディスク○○を取り出せませんでした。1つ以上のプログラムが使用している可能性があります。”が表示される。
  • ボリュームをマウントしたままログアウトし,他のアカウントでログインすると,前のユーザの作ったボリュームが丸見え。
    ターミナルで umount (バイス | マウントポイント) と打てば,マウント解除可能。

これらの制約をある程度回避し,都度ターミナルから操作する煩わしさをなくす手法は,次回紹介しよう。