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」はメモリファイルになります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です