Posted at

ディスク暗号化した環境(Ubuntu14.04)でfstabを使わずにramdiskを作る

More than 3 years have passed since last update.


ramdisk、ご存じないのですか?

RAMディスク - Wikipedia

で細かい話は適当に把握してください。

端的に言えば、HDDとかSSDとかに負荷かけたくないなー、IOとか考えるとすっげぇ遅いなぁ

というつらい状況を変えてくれるものです。

Windowsだと以下のリンクのようにしてつくるのですが、なんとUNIXならそんなのはいらないんですね

tmpfsというのをつかって似たようなことを実現できるんです。

ラムディスクでWindowsの限界を突破する | メモリーMAX増設で本当の力が目を覚ます

無料RAMディスク作成ソフト一覧








ramdiskを使う利点は?

ではどういうときにramdiskを使うと楽なんでしょうか

人によってくるのですが私は以下のような場合に使ってます。


  1. GoogleChromeとかFirefoxのいらないキャッシュの置き場

  2. ISOをDLするときなどにtorrentを使いたいが、HDDに負荷がかかるのを避ける

  3. /tmp代わりにtarballなどをaria2cコマンドでDLして展開するのに使う

  4. 仮想マシン(virtualboxなど)のイメージをramdiskにおいて挙動を軽くする(工夫しないと使い捨てになる)









実際にramdiskをつくる

ストレージ全体を暗号化してない環境であれば、以下の記事のようにfstabに記載してramdiskを作成できるのですが、

いかんせんdm-cryptをしたあとだとfstabを下手にいじると起動できなくなるのでその回避方法を書いておきます。

Ubuntu で Ramdisk を作成し、キャッシュをそこに移動する

~> sudo apt-get update;sudo apt-fast install zram-config

~> sudo lshw -short | grep "System Memory"
~> sudo lshw -short | grep "システムメモリー"
/0/2b memory 18GiB システムメモリー
~> cd / ; pwd
/
~> sudo mkdir /ramdisk
~> sudo chmod 700 /ramdisk
~> sudo chown users:users /ramdisk ##やらないほうがいいかも?root:rootのままがいい?
~> ls -lA | grep ramdisk
drwx------ 4 root root 80 4月 1 26:00 ramdisk
~> less /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
~> sudo emacs /etc/rc.local
~> less /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
mount -t tmpfs -o size=16g /dev/shm /ramdisk
exit 0
~> sudo init 6                           ##反映させるため再起動します
~> cd /ramdisk;pwd
/ramdisk
~> touch testfile.txt ##ファイルが作成でき、rebootすると消えることを確認してみてください


補足

最初にzram-configをインストールしてますが、記憶が正しければUbuntu15.10では

パッケージがなかったような気がしますので適宜探しだして入れてください。

まぁ実際は必要ないんですが、万が一ramdiskを使いきってしまった時に圧縮してくれるので

回復しやすいように私は使ってます。

/etc/rc.localのファイルをroot権限で編集して

mount -t tmpfs -o size=16g /dev/shm /ramdiskの部分を追記してるのですが

16gの部分は自分のマシンがもっているRAMより少ないほうが安全です。

512MBのマシンなら、128mって書くとかしてください。

ちなみにですがWindows向けのramdiskファイルと違ってただの一次格納する場所なので

バックアップとかはしてくれません。どうしてもやりたい場合スクリプトなどを書いてみてもいいかもしれないです。








実際に使ってみる

では冒頭で紹介した使い道について書いてみます。

今回はGoogleChromeでのキャッシュを置き換えてみたいと思います。

私の環境ではbashには人権がないので、fish shellに以下のようなエイリアスを書いてます。

~> less $HOME/.config/fish/config.fish

xmodmap ~/.xmodmap
set -gx LANG ja_JP.UTF-8
set -gx LESSCHARSET utf-8
set -gx JLESSCHARSET japanese-utf-8
set -x PATH $HOME/.stack/snapshots/x86_64-linux/lts-*/*/bin $PATH
set fisher_home ~/.local/share/fisherman
set fisher_config ~/.config/fisherman
source $fisher_home/config.fish
alias inst "sudo apt-fast install"
alias purg "sudo apt-get purge"
alias pkgq "aptitude search"
alias upd "sudo apt-fast update"
alias upg "sudo apt-fast update;sudo apt-fast --force-yes dist-upgrade -y"
alias suki "sudo -k"

~> emacs $HOME/.config/fish/config.fish

~> less $HOME/.config/fish/config.fish
xmodmap ~/.xmodmap
set -gx LANG ja_JP.UTF-8
set -gx LESSCHARSET utf-8
set -gx JLESSCHARSET japanese-utf-8
set -x PATH $HOME/.stack/snapshots/x86_64-linux/lts-*/*/bin $PATH
set fisher_home ~/.local/share/fisherman
set fisher_config ~/.config/fisherman
source $fisher_home/config.fish
alias inst "sudo apt-fast install"
alias purg "sudo apt-get purge"
alias pkgq "aptitude search"
alias upd "sudo apt-fast update"
alias upg "sudo apt-fast update;sudo apt-fast --force-yes dist-upgrade -y"
alias suki "sudo -k"

alias chrome "google-chrome-stable --disk-cache-dir="\/ramdisk" --disable-background-mode --disk-cache-size=1 --disk-cache-size=1 --enable-click-to-play --disable-geolocation --enable-desktop-notifications -ssl-version-min=tls1"

~> fish_update_completions ; exit
~> chrome ## このコマンドでchromeが起動するようになります


補足

実際に意識しておくべき部分はalias chrome "google-chrome-stable --disk-cache-dir="\/ramdisk"です。

Chromeの細かいオプションについてはChromeまとめwikiというものがあるのでそこを使ってください。

"\/ramdisk"と書いているのですがバックスラッシュをいれないと認識しないので気をつけてください。

これで、ターミナルアプリからchromeを呼び出すと/ramdiskにCacheとMedia Cacheフォルダが作成されてそこにキャッシュが移ります。

google-chrome-stableは頻繁に挙動がおかしくなるのでいつでもC-cで殺せるように私はコマンドで呼び出すようにしてますが、

それでもアイコンやショートカットで起動させたい方はいろいろ調べてみてください。

デスクトップ環境によってことなるのでここでは書かないことにします。