raspberry pi のSDカードはこわれます。
過去何枚も使い潰してきました。32GBを使うようになってからあまり壊れてないので、32GBぐらいがOSのログ頻度でも寿命を維持できるサイズなのかと思ってる。
それでも枚数を使い潰すと、安くない出費である。台数も増えてきたので設定を見直しておく。
単純に ramdisk にしてしまってもいいのだけれどね。
準備
ネットワーク設定関連を切り替えるまえに、ttyS0/ttyUSB0を使う。
sudo systemctl enable serial-getty@ttyUSB0 sudo systemctl start serial-getty@ttyUSB0 ## 終わったら sudo systemctl stop serial-getty@ttyUSB0
シリアルコンソールでトラブルがおきたときにネットワーク設定がうまくいくことを確認するためポートを用意しておく。
swap を無効にする
sudo systemctl status dphys-swapfile sudo systemctl disable dphys-swapfile ## または ## sudo apt remove dphys-swapfile
ext4 の同期タイミングを制御する。
takuya@pi-zero:~ $ sudo cat /etc/fstab | grep ext4 PARTUUID=48c4552a-02 / ext4 defaults,noatime,commit=200 0 1
なお、300秒以上はwarningが表示されるとのことなので290としています。
https://iot-plus.net/make/raspi/extend-sdcard-lifetime-5plus1/#toc_id_2_7
なお、この設定では不用意な電源切断でext4がおかしくなるので、起動時にfsckを掛けるとかで予防できるんじゃないかな。
/boot/firmware/cmdline.txt にカーネルオプションを追加
fsck.mode=force
wifi 関連
WiFiは pi zero には搭載されてないので止めちゃう
sudo systemctl disable wpa_supplicant.service sudo sed -i '2i\ \ \ \ \ \ \ \ exit 0' /etc/profile.d/wifi-check.sh
ログ関連/journalctl
みんな頑張ってログを設定してるんだろうけど、ログを揮発性にすれば終わりじゃね?
/etc/systemd/journald.conf:
[Journal] #Storage=auto Storage=volatile
https://superuser.com/questions/1452659/how-can-i-set-quotas-for-var-log-journal
ログが残らないのが心配なら、何処か別の場所に転送しよう。
ログの保存場所について
systemd-journaldがあると、rsyslog にもログを転送する。
イベント発生 -> journald -> 転送 -> rsyslog -> ログ保存 ↓ ログ保存
どう考えても無駄である。
rsyslogで残す。
journald でもrsyslog でも同じものを残しても無駄。journald を volatileならrsyslog だけに残る。
そこで、先程の設定ではjournald を volatile (揮発性)にして、rsyslog だけにした。
さらに、rsyslog側でも余計なログを記録しないようにする。
rsyslog で別のマシンにsyslog転送を行えばいいので、ログの取り扱いとして王道だと思う。
# # First some standard log files. Log by facility. # # auth,authpriv.* /var/log/auth.log #*.*;auth,authpriv.none -/var/log/syslog # 2022-08-29 #cron.* /var/log/cron.log
逆に rsyslogへの転送を辞める
または、journalctl を信じて、rsyslog への転送をやめる
/etc/systemd/journald.conf
#ForwardToSyslog=yes ForwardToSyslog=no
rsyslog は使わないとする。これもありだと思う。この場合ログは、syslogを使わない。journalctl のみで閲覧する。
HDMIオフ
電源チューニングをやろうと思ったが、tvservice
がbullseyesに含まれないので、どうしようかな困った。
apt関連
apt install 時に doc locale man を使わないようにする。初心者はman 見たほうがいいのでやっちゃ駄目。manは別のサーバーで見るよってときはこれを設定する。
/etc/dpkg/dpkg.cfg.d/01-nodocを 新規作成 (/etc/dpkg/dpkg.cfg.d/ は、/etc/dpkg/dpkg.conf.d の場合もある。)
# Delete locales path-exclude=/usr/share/locale/* # Delete man pages path-exclude=/usr/share/man/* # Delete docs path-exclude=/usr/share/doc/* path-include=/usr/share/doc/*/copyright
これでapt install 時に man が省略されるはずです。インストールするファイル数が減ってダメージを減らせる。
ramdisk 化←いらなくね?
ログファイルやtmp を ram 化すれば、全体をRamdiskにする必要はないんじゃないかなと。
ramdisk 化は定番だし、raspi-config でも出来る。しかし、殆どの場合、ログファイルの書き込みをへらすのが目的だとおもう。そこは journalctl を voliate (揮発性)にで代用できるので、ramdisk化は実行するか思案する。
私は、Ramdisk化による、OSへセキュリティパッチを自動適用できなくなるセキュリティ・リスクのほうが怖い。
ramdisk/tmpfsにログを書いても良いんだけど、そもそも揮発性にしたら再起動して消えるしね
2022-08-29 追記
journal と rsyslogd の関係を見直したら、2重でログが保存される仕様なので、言及
2022-02-18
man と ramdisk について修正。