それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

raspberry pi のSDカードの寿命を意識した設定をする。

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 について修正。