Linuxでディスク上の任意のディレクトリをRAMDISKに移し、システム終了時に変更をディスクへ反映させる

ALL
スポンサーリンク

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 の指定の注意点」の箇所の内容を確認してください。

コメント