※当サイトは広告収入で運営されているため広告が表示される場合があります。

[Linux] RAMディスクを使ってファイルアクセスを高速化

[PR] Lenovo
SALE
Lenovo
ThinkPad スペシャルセールページ
圧倒的な性能と堅牢性。プロフェッショナルのための相棒を今だけ特別価格で。
今すぐチェック
[PR] GMO
WiMAX +5G 2026最新プラン
最大キャッシュバック
56,000
月額料金1,250円〜(税込1,375円〜)

まえがき

補助記憶装置(ストレージ)は SSD が普及したことによりストレージの読み書き速度は劇的に改善されましたが、まだまだメインメモリ(DRAM)に比べて遅く、多くのシステムでボトルネックとなっています。

そこで DRAM上に仮想のディスク(RAMディスク)を作り、その中で作業すると非常に快適になります。たとえばウェブブラウザが普段ストレージ上に保存しているキャッシュファイルを RAMディスク 内に移動することでウェブブラウジングの高速化を期待できます。動画や画像ファイルを RAMディスク上で編集することでシームレスに作業することもできます。

さらに PCの電源か切れるとキャッシュファイルは消滅するので、保存しておく必要のない一時データを扱う上でもプライバシー上の利点もあります。

本稿は tmpfs (TeMPorary File System)を用いて RAM ディスクを作成する方法をご紹介。tmpfs は一時的にファイルを保存しておくスペースを作成できるファイルシステムで主に物理メモリ上に領域が確保する目的で使われています。

tmpfs を利用するには systemdfstab にマウントポイントを記述する2つの方法があります。

各マウントポイントのファイルシステムを確認する

df コマンドで tmpfs ファイルシステムを利用しているマウントポイントの確認を行います。

# df -h | grep tmpfs
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         4.0M     0  4.0M    0% /dev
tmpfs             16G  424M   16G    3% /dev/shm
tmpfs            6.3G  9.6M  6.3G    1% /run
tmpfs             16G  109M   16G    1% /tmp
tmpfs            3.2G  148K  3.2G    1% /run/user/1000

/dev/shm/tmp が大量の容量を予約確保していることがわかります。

/etc/fstab に記述がないのにどうやってマウントしているのかというと systemd の「マウントユニット (.mount)」という機能を使っているからです。

tmpfs は容量を動的に確保します。実際に使われている容量分しかメモリを消費しません。物理メモリの容量が不足した場合はスワップ領域が使われます。 ramfs のように際限なくメモリを消費しないので安心して利用することができます。

RAMディスクを管理する

systemd での RAMディスク (tmpfs) 管理

systemd で RAMディスクを作成・管理するメリットとしては、記述ミスによるOS起動不可がないことです。 fstab はタイポがあると OS が起動しなくなりますが、 systemd でマウントが失敗するだけでシステムには影響を及ぼしません。

またマウント前と後にプログラムをかませたり、トリガーイベントを設定したりと、高度な起動順序の制御が簡単にできます。

1. マウント先のディレクトリ作成

RAMディスクのマウント先である空のディレクトリを作成します。

$ sudo mkdir /ramdisk

全ユーザーが読み書きできる権限を付与します。

$ sudo chmod 777 /ramdisk

2. 設定ファイルを作成する

systemd でマウントを行う場合、設定ファイル(マウントユニット)を作成する必要があります。

$ sudoedit /etc/systemd/system/ramdisk.mount

「マウント先のパスのルート以外の /- に置き換えたファイル名にする」という厳格なルールがあります。

例えば、
/ramdisk にマウントしたい場合、 ramdisk.mount
/mnt/ramdisk.mount にマウントしたい場合は mnt-ramdisk.mount となります。

以下のように設定内容を記述します。

[Unit]
Description=RAM Disk (tmpfs) by systemd
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target

[Mount]
What=tmpfs
Where=/ramdisk
Type=tmpfs
Options=mode=1777,strictatime,nodev,nosuid,size=8G

[Install]
WantedBy=local-fs.target
  • 設定解説
    • What:デバイスの種類を指定します
    • Where:マウント先のパス。要ファイル名と完全一致
    • Options:fstab と同様のオプション指定可

3. systemd の設定をリロード

新しいユニットファイルを追加したことを systemd に認識させます。

$ sudo systemctl daemon-reload

作成したマウントユニットを起動、これにより即座に RAMディスクがマウントされます。

$ sudo systemctl start ramdisk.mount

確認のために df コマンドを実行します。

$ df -h | grep ramdisk

これでマウントされているはずです。

4. OS起動時に自動マウントする

先ほどの作成したマウントユニットが systemd 起動時にサービスとして読み込まれるようにします。

$ systemctl enable ramdisk.mount
RAMディスクのステータスを確認
$ sudo systemctl status ramdisk.mount
自動起動を無効化

また、systemd によるマウントを解除するには以下のコマンドを使います。

# systemctl disable ramdisk.mount

fstab での RAMディスク (tmpfs) 管理

/etc/fstabtmpfs コマンドを利用して記述することで RAMディスクを簡単に作成することができます。

1. fstab に記述

$ sudo nano /etc/fstab

/ramdisk というRAMディスクを tmpfs ファイルシステムでシステムの起動時にマウントするように設定します。

[デバイス(ファイルシステム名)] [マウントポイント(ディレクトリ)] [タイプ(ファイルシステムタイプ)]
tmpfs  /ramdisk  tmpfs noatime,nodev,nosuid,size=2G  0  0

size= の後に割り当てる容量を記述します。 メガバイトには M、ギガバイトには G を後述します。上記の場合、メモリ容量のうち2 GBを RAM ディスクに割り当てています。割当容量が少ないと、ブラウザがクラッシュしたり、極端に動画が重くなるので注意しましよう。

2. マウントディレクトリの作成と管理

まずマウント用のディレクトリを作成します。

$ sudo mkdir /ramdisk

次にマウントディレクトリを一般ユーザーでも読み書きできるよう、権限を付与します。用途によって変更してください

$ sudo chmod 777 /ramdisk

3. マウントする

システムを再起動する前に fstab の設定をテストするためにマウントしてみます。

$ sudo mount -a 

sudo mount -a/etc/fstab の記述に従って上から順に一括マウントするコマンドです。すでにマウントされているものは無視されます。再起動する前に必ずこのコマンドを実行・テストしてエラーが出ないことを確認してください。また sudo mount -av でログの詳細を確認することができます。

ブラウザキャッシュの移行方法

前述したブラウザのキャッシュデータを RAM内に移動させる方法です。

あらかじめ RAMディスクは作っておいてください。

Chromium

既存のキャッシュディレクトリ削除 → RAM ディスク側にキャッシュディレクトリを作成 → シンボリックリンク作成 という流れです。

1. ブラウザを終了させる

作業中のブラウザをすべて終了させます。完全に終了しないとキャッシュディレクトリが再生成されてしまいます。

2. 既存キャッシュディレクトリを削除

・Chromium

rm -rf ~/.cache/chromium

3. RAMディスク側にディレクトリを作成

mkdir -p /ramdisk/chromium-cache

4. シンボリックリンクを作成

ln -s /ramdisk/chromium-cache ~/.cache/chromium

これで設定は完了です。

Firefox

Firefox では、Chromium の手順のようにシンボリックリンクを使ってもよいのですが、ブラウザ内の設定 (about:config) を使うことで直接キャッシュの保存先を変更することができます。

1. RAMディスク側にキャッシュディレクトリを作成

$ mkdir -p /ramdisk/firefox-cache

2. 高度な設定画面を開く

  1. Firefox のアドレスバーに about:config と入力し Enter を押下
  2. 画面上部の設定検索バーに
    browser.cache.disk.parent_directory と入力
  3. 項目がなかった場合は「文字列」を選択し、+ を押す
  4. 入力欄が表示されたら先ほど指定した RAMディスク内ディレクトリ (/ramdisk/firefox-cache) のパスを入力する

おわり

ELECOM
数量限定・在庫限り
CLEARANCE
MAX
95%OFF
Linux
シェアする

コメント

タイトルとURLをコピーしました