Ubuntuでディスク書き込みをなるべくRAMDISK上にする

ALL
スポンサーリンク

Ubuntu20.04でディスク書き込みが多いディレクトリをRAMDISK上にし、HDDへの書き込みを抑制する設定方法です。
また、Raspberry Pi + Ubuntu では、HDDではなくSDカード使用ですが、同様に SDカードへの書き込みを抑制できます。

なお、RAMDISK上の内容は、以下の記事で紹介した folder2ram によって、システム終了時に変更をディスクへ反映させます。

Linuxでディスク上の任意のディレクトリをRAMDISKに移し、システム終了時に変更をディスクへ反映させる: パソコン鳥のブログ

スポンサーリンク

RAMディスク上にするディレクトリ

次の箇所がディスク書き込みが多いので RAMディスク上にします。

/tmp
/var/tmp
/var/log
/var/cache
/var/spool
/var/lib

ただし、上記ディレクトリ下の次の箇所は、ファイルサイズが大きく、RAMディスクにすると必要メモリ量が大きくなるので、RAMディスク上にはせず、実体を HDD上のままにします。

/var/lib/snapd
/var/cache/apt

ディレクトリの事前設定

/var/cache/apt と /var/lib/snapd は、HDD上のディレクトリへのリンクを、RAMディスク上に作成します。
これは、/var/cache と /var/lib はRAMディスク上、そのディレクトリ下の /var/cache/apt と /var/lib/snapd はHDD上にする、といったマウントができないためです。

次のようなリンクを作成します。

(RAMディスク) /var/cache/apt -> (HDD) /var/cache.disk/apt
(RAMディスク) /var/lib/snapd -> (HDD) /var/lib.disk/snapd

RAMディスク上に設定するための事前準備として、次のコマンドを実行してリンクを作成します。

mkdir /var/cache.disk
cp -a /var/cache/apt /var/cache.disk/
rm -r /var/cache/apt
ln -s /var/cache.disk/apt /var/cache/apt
mkdir /var/lib.disk
cp -a /var/lib/snapd /var/lib.disk/
rm -r /var/lib/snapd
ln -s /var/lib.disk/snapd /var/lib/snapd

/tmp , /var/tmp をRAMディスクにする

fstab で次のように設定します。
size= でRAMディスクのサイズを指定できます。

/etc/fstab

tmpfs           /tmp            tmpfs   defaults,size=256m,noatime,mode=1777      0       0
tmpfs           /var/tmp        tmpfs   defaults,size=512m,noatime

その他のディレクトリをRAMディスクにする(folder2ram の設定)

ディスク上の任意のディレクトリをRAMDISKに移し、システム終了時に変更をディスクへ反映させる、folder2ram を設定します。

次の記事の内容で設定します。

Linuxでディスク上の任意のディレクトリをRAMDISKに移し、システム終了時に変更をディスクへ反映させる: パソコン鳥のブログ

この時、/etc/folder2ram/folder2ram.conf の内容には、次を設定します。
(注:スペースの箇所は(列の区切りは)タブコード2つ以上にしないと認識しません)

tmpfs		/var/log		size=32m
tmpfs		/var/cache		size=128m
tmpfs		/var/spool		size=32m
tmpfs		/var/lib		size=512m

これで、ディスク書き込みの多いディレクトリが RAMディスク上になります。

書き込み抑制のために

/var/cache/apt

先の手順で、/var/cache/apt の実体は、RAMディスクではなくHDD上の /var/cache.disk/apt にしました。
ここへの書き込みを減らすには、aptの自動アップデートを抑制します。

次のファイルの内容を設定します。

/etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

sambaのログ

sambaを運用している場合は、/var/log/samba 下にログが増え続けていきます。
/var/log がRAMディスク上でHDDほどサイズを大きくとれないので、ログを出力しなくてもいい場合は、次のようにします。

/etc/samba/smb.conf

log file = /dev/null

ext4のジャーナルログ無効化

ジャーナルログが有効だと、/var/log/journal に結構大きなサイズのログができます。
/var/log がRAMディスク上でHDDほどサイズを大きくとれないので、ジャーナルログ停止でもいい場合は、次のようにします。

/etc/systemd/journald.conf

Storage=none

systemd-journald サービスを再起動して設定を反映させます。

systemctl restart systemd-journald

ジャーナルログ /var/log/journal を削除します。

rm -r /var/log/journal

参考:ディスク書き込みしているファイルを探す

上記で設定したディレクトリ以外に、ディスク書き込みがあるディレクトリが無いか探す場合は、次のようにします。

findコマンドで -cmin -60 オプションと一緒に、ディレクトリを指定すれば、60分以内の書き込みファイルを検索して列挙します。
(/bin、/sbin、/usr は書き込みが無いと思われますので、検索対象には入れていません)

find /snap/ /var/ /etc/ /opt/ /srv/ -cmin -60

コメント