folder2ram を使うと、ディスク上の任意のディレクトリの内容を RAMDISK にできます。
また、システム起動時・停止時に、自動的に RAMDISK の内容をディスクと同期してくれます。
https://github.com/bobafetthotmail/folder2ram
指定したディレクトリの内容は、folder2ram起動時(システム起動時)に RAMDISK にコピーされます。
folder2ram終了時(システム終了時)に、RAMDISK の内容はディスク上へ反映されます。
この動作により、RAMDISKの内容を永続化することができます。
(当然ですが、いきなり電源を落とした場合は、RAMDISKの内容はディスクに反映されません)
folder2ram のインストール
folder2ram をダウンロードし、/sbin/folder2ram として保存します。
wget -O /sbin/folder2ram https://raw.githubusercontent.com/bobafetthotmail/folder2ram/master/debian_package/sbin/folder2ram
実行権をつけます。
chmod +x /sbin/folder2ram
システム起動・終了時に動作するように設定をします。
・systemdサービスとして設定する場合
folder2ram -enablesystemd
・initスクリプトとして設定する場合
folder2ram -enableinit
再起動してインストール完了です。
RAMDISK にするディレクトリの設定
/etc/folder2ram/folder2ram.conf の編集
重要な注意!!:
folder2ram.conf を編集する前に、次のコマンドを実行して、RAMDISK としてのマウントを解除しておきます。
folder2ram -umountall
/etc/folder2ram/folder2ram.conf を編集します。
ファイルが無い場合は、作成してください。
次の書式で、tmpfs の後にタブコード2つ以上入れて、<mount point> の箇所でRAMDISK 上にしたいディレクトリを指定します。
注意:区切りは、タブコード2つ以上にしてください。スペースだけでは認識しません。
tmpfs <mount point>
例えば、次のようにします。
tmpfs /var/log tmpfs /var/spool
下記書式のように、ディレクトリ名の後に、タブコード2つ以上で区切って、オプションも指定できます。
tmpfs <mount point> <options>
指定できるオプションは、mountコマンドの -o オプションで指定できるものです。
folder2ram では、folder2ram.conf で指定された内容は、次のようにして mountコマンドを実行しています。
mount -t tmpfs -o <options> folder2ram <mount point>
例えば、次のようにすると、/var/log の最大サイズを 256M にして、RAMDISK上に作成されます。
tmpfs /var/log size=256m
/var/cache の指定の注意点
こちらで試したところ、Ubuntu上では、folder2ram.conf で /var/cache を記述していたら、Ubuntu起動時にマウントされませんでした。
syslog では、次のようなログが出力されていました。
どうも folder2ram の起動時の処理と、AppArmor の処理がバッティングして、folder2ram のRAMDISK へのコピー処理が失敗したため、マウントをやめているようです。
(cannot create regular file の後のファイル名は、別のファイル名が表示されることもあります)
folder2ram[1646]: cp: cannot create regular file '/var/cache/apparmor/26b63962.0/lsb_release': File exists folder2ram[1646]: cp: cannot create regular file '/var/cache/apparmor/26b63962.0/nvidia_modprobe': File exists folder2ram[1593]: copy files to /var/cache failure, rolling back the mount
対処ですが、Ubuntu起動時の処理で、AppArmor より先に folder2ram が起動するようにします。
/usr/lib/systemd/system/folder2ram_startup.service の [Unit]セクションに、次の行を追加してください。
Before=apparmor.service
これで、/var/cache も問題なくマウントできるようになります。
設定の反映
folder2ram.conf を編集したら、次のコマンドを実行してマウントします。
folder2ram -mountall
RAMDISKとディスクの同期
指定したディレクトリの内容は、folder2ram起動時(システム起動時)に RAMDISK にコピーされます。
folder2ram終了時(システム終了時)に、RAMDISK での変更内容は、rsync によってディスク上へ反映されます。
また、次のコマンドによるマウント・マウント解除時も、RAMDISK へのコピーや、ディスク上への反映が行われます。
folder2ram -mountall folder2ram -umountall
手動でディスク上へ反映させる場合は、次のコマンドを実行します。
folder2ram.conf で指定のものがすべて同期されます。
/sbin/folder2ram -syncall
個別に指定する場合は、folder2ram.conf の何番目のディレクトリかを <number> で指定します。
/sbin/folder2ram -sync <number>
例えば、folder2ram.conf が次の場合、 /sbin/folder2ram -sync 2 とすると、/var/spool がディスクへ反映されます。
tmpfs /var/log tmpfs /var/spool
アンインストール
次のコマンドを実行すると、アンインストールされます。
なお、このコマンド実行時に、RAMDISK上の内容はディスクに反映されます。
・systemdサービスとして設定していた場合
folder2ram -enablesystemd
・initスクリプトとして設定していた場合
folder2ram -disableinit
ただし、アンインストール時に RAMDISK上の内容がディスクに反映された後、folder2ram が停止するまでのわずかな間に RAMDISK に変更があっても、その内容は反映されません。
次のようにすると、システムシャットダウン時にアンインストールされますので、RAMDISK への反映が漏れることはありません。
より安全にアンインストールしたい場合は、こちらの方法でアンインストールしてください。
・systemdサービスとして設定していた場合
folder2ram -safe-disablesystemd
・initスクリプトとして設定していた場合
folder2ram -safe-disableinit
うまくいかない場合
次のことを確認してください。
/etc/folder2ram/folder2ram.conf で次の書式で書く内容は、タブコード2つ以上で区切ります。
スペースだけでは認識しません。
tmpfs <mount point>
重要な注意!!:
folder2ram.conf を編集する前に、次のコマンドを実行して、RAMDISK としてのマウントを解除しておきます。
folder2ram -umountall
/var/cach が RAMDISK としてマウントされない場合は、「/var/cache の指定の注意点」の箇所の内容を確認してください。
コメント