まえがき
補助記憶装置(ストレージ)は SSD が普及したことによりストレージの読み書き速度は劇的に改善されましたが、まだまだメインメモリ(DRAM)に比べて遅く、多くのシステムでボトルネックとなっています。
そこで DRAM上に仮想のディスク(RAMディスク)を作り、その中で作業すると非常に快適になります。たとえばウェブブラウザが普段ストレージ上に保存しているキャッシュファイルを RAMディスク 内に移動することでウェブブラウジングの高速化を期待できます。動画や画像ファイルを RAMディスク上で編集することでシームレスに作業することもできます。
さらに PCの電源か切れるとキャッシュファイルは消滅するので、保存しておく必要のない一時データを扱う上でもプライバシー上の利点もあります。
本稿は tmpfs (TeMPorary File System)を用いて RAM ディスクを作成する方法をご紹介。tmpfs は一時的にファイルを保存しておくスペースを作成できるファイルシステムで主に物理メモリ上に領域が確保する目的で使われています。
tmpfs を利用するには systemd と fstab にマウントポイントを記述する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)」という機能を使っているからです。
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
以下のように設定内容を記述します。
[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/fstab に tmpfs コマンドを利用して記述することで 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
ブラウザキャッシュの移行方法
前述したブラウザのキャッシュデータを 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. 高度な設定画面を開く
- Firefox のアドレスバーに
about:configと入力し Enter を押下 - 画面上部の設定検索バーに
browser.cache.disk.parent_directoryと入力 - 項目がなかった場合は「文字列」を選択し、+ を押す
- 入力欄が表示されたら先ほど指定した RAMディスク内ディレクトリ (
/ramdisk/firefox-cache) のパスを入力する

おわり




コメント