前回Raspberry PIでRAMディスクを作成しました。macOSの場合はRAMディスクの作成方法がRaspberry PIとは異なります。ということで今回はmacOSでRAMディスクを作成してみます。また、ディスクイメージの作成についても説明します。

RAMディスクの作成

 macOSでRAMディスクを作成するにはhdiutilコマンドとdiskutilコマンドを使います。2つのコマンドを組み合わせると簡単にRAMディスクを作成できます。
 まず、作成するRAMディスクの容量を決めます。RAMディスクの容量は1ブロック単位で指定できます。macOSのHFS+の場合、1ブロックは512バイトになります。
 1ブロック単位で指定できるなら1ブロックのRAMディスクも作成できる気がしますが、以下のようにするとサイズが小さすぎてエラーになります。

diskutil erasevolume HFS+ 'RAMDisk1' `hdiutil attach -nomount ram://1`

macOSで作成できるRAMディスクの最低容量は1024ブロックです。以下のようにすると1024ブロックのRAMディスクが作成されます。(1024ブロック×512バイト=524288バイト=512KB。他に必要な情報を付加するために作成されるディスク容量は若干多くなります)

diskutil erasevolume HFS+ 'RAMDisk1' `hdiutil attach -nomount ram://1024`

様々な形式でRAMディスクを作成する

 diskutilコマンドでは様々な形式(フォーマット)を指定できます。以下のようにコマンドを入力すると指定できる形式(フォーマット)の一覧が表示されます。macOSのバージョン等によって結果が異なりますので、特定の形式でRAMディスクを作成する場合は以後の説明の形式指定部分を適宜読み替えてください。

diskutil listFilesystems

先ほどはmacOSで多く使われている(使われてきた)HFS+形式を指定しました。macOSには他にもAPFSなどの形式もあります。HFS+形式ではなくAPFS形式のRAMディスクにするには以下のようにします。APFSの場合、HFS+よりも大きなサイズを必要とするため最低ブロック数は16384になります。

diskutil eraseVolume APFS "RAMDisk2" `hdiutil attach -nomount ram://16384`

次にMS-DOS/Windowsなどで使われている(USBメモリや容量の少ないSDカード等)FAT16,FAT32,exFATでRAMディスクを作成してみます。まず、FAT16の場合は以下のようになります。(64MBのRAMディスク) なお、指定するディスク名は全部大文字にしないとエラーになります。

diskutil eraseVolume "MS-DOS FAT16" "RAMDISK3" `hdiutil attach -nomount ram://131072`

FAT32の場合は以下のようになります。(2GBのRAMディスク) なお、FAT16同様、指定するディスク名は全部大文字にしないとエラーになります。

diskutil eraseVolume "MS-DOS FAT32" "RAMDISK4" `hdiutil attach -nomount ram://4194304`

ExFATの場合は以下のようになります。(4GBのRAMディスク) ExFATの場合、ディスク名は小文字を含むことができます。

diskutil eraseVolume ExFAT "RAMDisk5" `hdiutil attach -nomount ram://8388608`

なお、Windowsで多く利用されているNTFS形式は標準ではサポートされていません。つまりNTFS形式のRAMディスクは作成できません。(サードパーティ製のものを利用する必要があります)

RAMディスクの内容を保存する

 それでは次にRAMディスクの内容(イメージ)を保存してみましょう。macOSにはディスクイメージとして保存する機能があります。hdiutilコマンドを使えば手軽にディスクイメージを作成できます。
 まず、ディスクイメージを作成するRAMディスクを用意します。ここでは先ほど作成したExFATのRAMディスクを利用します。とりあえず何かファイルをRAMディスク内に作成するかコピーします。

 次にRAMディスクの絶対パスを調べます。RAMディスクの名前がRAMDisk5の場合、以下のようにコマンドを入力します。

df -h | grep RAMDisk5

図の一番右側の/Volumes/RAMDisk5がRAMディスクの絶対パスになります。絶対パスがわかったら以下のようにコマンドを入力するとデスクトップにディスクイメージが作成されます。

hdiutil create -srcfolder /Volumes/RAMDisk5 ~/Desktop/backup.dmg

作成されたディスクイメージをダブルクリックするとイメージが展開されディスクがマウントされます。

ディスクの読み書きの速度計測

 最後にディスクの読み書きの速度計測を行ってみましょう。前回はコマンドで速度計測しましたが、今回はツールをインストールしてみます。
 インストールにはあらかじめHomebrewをインストールしておきます。

Homebrewの画面内にある以下の文字列をコピーしてからターミナルに貼り付けてからリターンキーを押すと自動的にインストールされます。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrewがインストールされたら以下のようにコマンドを入力します。

brew install fio

fioのバージョンを確認するには以下のように指定します。バージョンが表示されれば無事にインストールされています。

fio --version

まずランダムに書き込みを行って速度を計測するには以下のように指定します。

fio --name=randwrite_test \
    --filename=/Volumes/RAMDisk5/fio_testfile \
    --size=512M \
    --rw=randwrite \
    --bs=4k \
    --direct=1 \
    --numjobs=1 \
    --time_based --runtime=30 \
    --group_reporting

ランダムに読み込む速度を計測するには以下のように指定します。

fio --name=randread_test \
    --filename=/Volumes/RAMDisk5/fio_testfile \
    --size=512M \
    --rw=randread \
    --bs=4k \
    --direct=1 \
    --numjobs=1 \
    --time_based --runtime=30 \
    --group_reporting

RAMディスクなのに思ったほど高速ではない(SSD程度)場合は、以下のように設定を変えてテストしてみてください。これで、かなり良い結果になると思います。

fio --name=randread_test \
    --filename=/Volumes/RAMDisk5/fio_testfile \
    --size=1G \
    --rw=randread \
    --bs=1M \
    --numjobs=4 \
    --iodepth=16 \
    --time_based --runtime=30 \
    --group_reporting

ちなみにGUIでのツール等で計測すると以下のようになります。

それでは、また次回。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。