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
/tmp をramdisk にする
tmp.mount
で /tmp のramdisk 化が行われるはず。年のために確認。
sudo systemctl status tmp.mount
tmpfile になっていない場合は有効にする。
sudo systemctl enable tmp.mount sudo systemctl status tmp.mount
fstab でやる場合は
tmpfs /tmp tmpfs nodev,nosuid,size=90%,mode=1777 0 0
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を掛けるとかで予防できるんじゃないかな。
起動時のext4 チェックを追加
/boot/firmware/cmdline.txt (以前は、/boot/cmdline.txt)にカーネルオプションを追加
fsck.mode=force
commit 間隔を長くしたのでデータ整合性を失う確率は格段に上がるので。
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 のみで閲覧する。
ログをメモリに保存して再起動時に全部捨てる
ログが大量に書かれるとそれだけで遅いので、揮発性なログ(volatile)にして、メモリに乗せる。再起動で全部捨てる
Storage=volatile SystemMaxUse=32M
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 の場合もある。)
cat <<EOF > 01-nodoc # 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/*/copyrigh EOF sudo mv 01-nodoc /etc/dpkg/dpkg.cfg.d/01-nodoc
これでapt install 時に man が省略されるはずです。インストールするファイル数が減ってダメージを減らせる。
全体ramdisk 化←いらなくね?
ログファイルやtmp を ram 化すれば、全体をRamdiskにする必要はないんじゃないかなと。
ramdisk 化は定番だし、raspi-config でも出来る。しかし、殆どの場合、ログファイルの書き込みをへらすのが目的だとおもう。そこは journalctl を voliate (揮発性)にで代用できるので、ramdisk化は実行するか思案する。
私は、Ramdisk化による、OSへセキュリティパッチを自動適用できなくなるセキュリティ・リスクのほうが怖い。apt install でソフトウェア追加も煩雑になる。
ramdisk/tmpfsにログを書いても良いんだけど、そもそも揮発性にしたら再起動して消えるしね
/tmp (tmpfs) を活用する。
全体ramdisk 化じゃなくて必要なところだけ tmpfs に置き換えておけばパフォーマンスもあがるしmicroSDカードの寿命も上がる。
ramdisk なら firefox キャッシュがおすすめ
firefox 起動後に初期設定済みのプロファイルを作成
Raspberry Piを使っていてGUIを使ってFirefoxなどを使うのであれば、キャッシュ・フォルダをRAMDiskにすると良いと思う。
## tmpfs(=ramdisk) をマウントする。 echo tmpfs /home/takuya/.cache/mozilla tmpfs uid=$UID,defaults,nodiratime,noatime,mode=0700 0 0 | tee -a /etc/fstab
プロファイル・フォルダにも結構な量を書き込むのでProfileフォルダはUnionFSでRAMでラッピングしてもいいかなと思う。
tmpfs /home/takuya/.mozilla/volatile tmpfs uid=1000,defaults,nodiratime,noatime,mode=0700 0 0 none /home/takuya/.mozilla/firefox unionfs dirs=/home/takuya/.mozilla/volatile=rw:/home/takuya/.mozilla/firefox=ro 0 0
vi / vim の設定
set noswapfile
または、vi / vim でスワップファイルを /tmp に作るようにする。
set directory=/tmp set backupdir=/tmp
vim を頻繁に使うので、無駄な書き込みが起きないようにする。
2022-08-29 追記
journal と rsyslogd の関係を見直したら、2重でログが保存される仕様なので、言及
2022-02-18
man と ramdisk について修正。