Version | |
---|---|
Raspberry Pi 4B |
4GB |
Raspberry Pi OS Lite |
Debian 10 (buster) 64bit |
🥧はじめに
Raspberry Pi 4B で、起動ストレージへの書き込みを抑えて寿命を伸ばすために行ったことの備忘録。
🗃️スワップの調整
スワップはストレージの予約領域で読み書きを行うため、理論的には無効化したほうがストレージ寿命を伸ばせる。
ただし、
-
スワップはメモリの利用について最適化する
-
無効化するとシステムが不安定になる恐れがある
という点から、無効化ではなくサイズを調整する方法をとった。
推奨サイズについて サーバーとしての利用&メモリ 2GB 以上 → とりあえずメモリの半分でいい(参考:SwapFaq - Community Help Wiki)。あとはシステムの利用状況を見て増減しておく。 |
変更する場合は /etc/dphys-swapfile
ファイルを修正する。
CONF_SWAPSIZE=100 (1)
CONF_SWAPFILE=/var/swap (2)
1 | MB 単位でスワップサイズを指定。 👉 推奨サイズと異なるが、現在システムがメモリをほとんど使ってないので少なくしている。 |
2 | USBや外付けドライブにスワップファイルを保存したい場合はここのパスを変更する。 |
sudo service dphys-swapfile restart
swapon --show=NAME,TYPE,SIZE,USED
NAME TYPE SIZE USED
/var/swap file 100M 0B
🔪マウントオプションから atime
を除外する
atime
だと頻繁に書き込み処理が発生するため、代わりに noatime
や relatime
を使用する。
ただ、最初から マウントオプションの確認
|
# Use noatime option
tmpfs /tmp tmpfs rw,async,nodev,nosuid,noatime,size=256M,mode=0777 0 0
tmpfs /var/log tmpfs rw,async,noexec,nodev,nosuid,noatime,size=64M,mode=0755 0 0
アクセス日時情報について
|
📊ログ
tmpfs
を使ってメモリ上にログを出力する
事あるごとにログをストレージに書き込むことを止めさせ、代わりにメモリ上へ出力するようにさせる。
👉 /var/log
(とついでに /tmp
)を tmpfs
でマウントすればいい。
この作業を行うと電源を落とす度にログが消えてしまうことに注意する。 |
やっぱりログを保存しておきたいという場合は、以下のような方法が考えられる。
|
/var/log
と /tmp
を tmpfs
としてマウントするよう設定変更する。
### ADD custom tmpfs
tmpfs /tmp tmpfs rw,async,nodev,nosuid,noatime,size=256M,mode=0777 0 0
tmpfs /var/log tmpfs rw,async,noexec,nodev,nosuid,noatime,size=64M,mode=0755 0 0
sudo tar \ (1)
-czf /var/early-logs.tar.gz \
--directory=/var/log .
sudo rm -rf /var/log/* (2)
1 | 現在の /var/log を圧縮してバックアップする。 |
2 | バックアップ後、/var/log を空にする。👉 空ディレクトリ以外に tmpfs をマウントしようとするとエラーが発生するため。 |
sudo systemctl edit rsyslog.service
[Unit]
After=local-fs.target (1)
1 | fstab の処理が終わってから rsyslog.service が起動するように修正。 |
sudo systemctl daemon-reload
上記設定後、再起動して適用する。
sudo reboot
findmnt --target /var/log (1)
TARGET SOURCE FSTYPE OPTIONS
/var/log tmpfs tmpfs rw,nosuid,nodev,noexec,noatime,size=65536k,mode=755
1 | /var/log のマウントオプションが変更されているか確認。 |
ログの出力を抑制
sudo cp /etc/rsyslog.conf{,.bk}
sudo nano /etc/rsyslog.conf
diff -U 0 --label before --label after /etc/rsyslog.conf{.bk,}
--- before
+++ after
@@ -62 +62 @@
-*.*;auth,authpriv.none -/var/log/syslog
+*.info;auth,authpriv.none -/var/log/syslog
@@ -64,5 +64,5 @@
-daemon.* -/var/log/daemon.log
-kern.* -/var/log/kern.log
-lpr.* -/var/log/lpr.log
-mail.* -/var/log/mail.log
-user.* -/var/log/user.log
+daemon.warn -/var/log/daemon.log
+kern.warn -/var/log/kern.log
+#lpr.* -/var/log/lpr.log
+#mail.* -/var/log/mail.log
+user.warn -/var/log/user.log
@@ -74 +74 @@
-mail.info -/var/log/mail.info
+#mail.info -/var/log/mail.info
@@ -81,3 +81,3 @@
-*.=debug;\
- auth,authpriv.none;\
- news.none;mail.none -/var/log/debug
+#*.=debug;\
+# auth,authpriv.none;\
+# news.none;mail.none -/var/log/debug
sudo service rsyslog restart
systemd の journal ログ
デフォルトで /run/log/journal
に保存される。
/run
は tmpfs
なので、何もする必要がない。そのままでOK。
findmnt --target /run/log/journal
TARGET SOURCE FSTYPE OPTIONS
/run tmpfs tmpfs rw,nosuid,nodev,mode=755