Linux でRAMディスク「/dev/shm」
ターミナルで「df -h」を打ってみて下さい。もしその中で「/dev/shm」と表示されていればRAMディスクが使える環境です。
そこで今回は、RAMディスク/メモリファイルについて説明します。
※ Oracle はメモリー内ファイル・システムと呼んでいますがRAMディスが一般的の様ですので、当サイトもラムディスクと呼称します。(だって長いし…)
RAMディスクが使用できる状態かどうかの確認
早速、確認してみます。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 63G 35M 63G 1% /dev/shm
tmpfs 26G 2.6M 26G 1% /run
/dev/sdd3 234G 30G 204G 13% /
tmpfs 63G 3.9M 63G 1% /tmp
/dev/sdd1 1014M 303M 712M 30% /boot
/dev/sdc1 466G 107G 359G 23% /var/lib/libvirt/images
/dev/sdb1 3.7T 1.7T 2.0T 46% /home
tmpfs 13G 984K 13G 1% /run/user/1000
$
実はこの段階でRAMディスク「/dev/shm」の中にメモリファイルを作成する事が可能です。
ですが「/dev/shm」を直接変更する事は一般的には忌避されますので、別にマウントした方が無難です。
また、「tmpfs」は全てメモリ上に存在しますので、「/tmp」や「/run/user/1000」も候補に上がるかとは思いますが、一般的にはファイルの読み書きは危険であると言われている事もあり、対象からは外した方が良さそうです。
唯一使用可能な「/run」も基本的にはデーモンが使用するものであり、基本的には root 権限が必要ですので、止めておいた方が良いでしょう。
RAM ディスクの用途
- 再起動などで消えても問題なく、とにかく読み書きが早いメモリファイルが必要な場合
- 共有メモリはメモリ内でデフラグを起こす事があるので何とかしたい
- システムの 起動/終了 時は自力でなんとかするので、ファイルアクセスの高速化を図りたい
これら場合には有効です。
RAM ディスクの準備
ディレクトリを用意します。ここでは「/usr/local/tmp」とします。
# mkdir -p /usr/local/tmp
# chmod 777 /usr/local/tmp
マウントします。
RAM ディスクの最大容量は、物理メモリの半分です。
# mount -t tmpfs -o size=1G tmpfs /usr/local/tmp
サイズは 1G にしています。必要に応じて変更して下さい。
起動すると自動的にマウントさせるには「/etc/fstab」を編集します。
以下の行を追加
tmpfs /usr/local/tmp tmpfs defaults,size=1G 1 2
RAM ディスクの速度計測
一応速、度計測はしてみたのですが、キャッシュが効きすぎて意味がなかった orz
# dd if=/dev/zero of=/usr/tmp/testimg bs=1M count=512
512+0 レコード入力
512+0 レコード出力
536870912 bytes (537 MB, 512 MiB) copied, 0.322595 s, 1.7 GB/s
#
# dd if=/dev/zero of=/usr/local/tmp/testimg bs=1M count=512
512+0 レコード入力
512+0 レコード出力
536870912 bytes (537 MB, 512 MiB) copied, 0.322269 s, 1.7 GB/s
#
当然、作成される「/usr/local/tmp/testimg」はメモリファイルになります。