ROCK Pi Sを設定してみる (/var/log.hddの扱い変更)

ROCK Pi S

最近のArmbianではシステム稼働中に発生したログがzramの/var/logに書き込まれ、システム停止前に/var/log.hddにコピーし、次回システム起動時に/var/log.hddから/var/logにコピーされる。正確ではないがこんな感じ。

zramはRAMディスクなので電源を落とすと消えてしまう。しかし、ハードディスクと違ってmicroSDカードなどのNANDメモリをストレージに使用するSBCでは、発生したログをその都度直接NANDメモリストレージに追記なんてことをすると劇的に寿命を縮めてしまう。そこで先のような方法で稼働時に発生したログは逐次RAMディスクに書き込み、システム終了時などに必要に応じてmicroSD等のストレージにまとめて書き込む、このような方法が採られるようになったみたい。
個人的には稼働中に発生したログをRAMディスクに置くところまでは良いとして、システム終了時にmicroSDカードに書き出すというところが気に入らない。重要なログなら逐次外部のログサーバ(syslogサーバ)に飛ばしてしまう方が良いし、どうでもよいログなら残す必要が無いと思うから。
つまり、システム起動時に/var/log.hddの中身を/var/logにコピーする、システム停止時に/var/logのログを中身を/var/log.hddにコピーするというこの挙動が要らないと思う。特にシステム終了時の方。

RAMディスクの/var/logとmicroSDカードの/var/log.hddの間でのログファイルのコピーに関係ありそうな設定。
  • /etc/default/armbian-ramlog
  • /etc/default/armbian-zram-config
  • /etc/cron.d/armbian-truncate-logs /var/logの整理用なのであまり関係ない
  • /etc/cron.daily/armbian-ram-logging これは要らない

最後のファイルは要らないのでファイルを削除するか中の行をコメント化する。他の3つは設定を触る必要はなさそう、というか触りたいフラグなどは無い。つまり設定は触らない。

/etc/cron.daily/armbian-ram-logging (変更)
1
2
3
4
5
#!/bin/sh
#/usr/lib/armbian/armbian-ramlog write >/dev/null 2>&1
/usr/bin/truncate /var/log/lastlog --size 0
/usr/bin/truncate /var/log/btmp --size 0
/usr/bin/truncate /var/log/wtmp --size 0

個人的にはこんな感じにすることが多い。2行目は行頭に # を挿入してコメント行にする。最後のtruncateの3行はそれぞれの引数で指定しているファイルを空にしている。これが日次で実行されることになるが、利用履歴は重要だと思うならtruncateの3行は無しで。

RAMディスクの/var/logとmicroSDストレージの/var/log.hddの間でのログファイルのコピーに関する本体は /usr/lib/armbian/armbian-ramlog で、このファイルに存在するsyncToDisk()という関数が実行されるのを防ぎたい。

/usr/lib/armbian/armbian-ramlog (最後の方)
        stop)
#               syncToDisk
                umount -l $RAM_LOG
                umount -l $HDD_LOG
                ;;
        write)
#               syncToDisk
                ;;

syncToDiskという行の頭の方に # を付けてコメント行にする。他の関数はコメント化しない。特にsyncFromDiskをコメント化すると/var/logがzramのRAMディスクにならないので注意。(ログが逐次microSDカードに書かれてしまうのでとてもヤバい)

$ sudo rm -R /var/log.hdd/*

/var/log.hddの中身を消しておく。
あとは、システムを再起動するなどして/var/log.hddにログが置かれないことを確認する。ただし、armbian-hardware-monitor.log と armbian-ramlog.logは無視で。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            209M     0  209M   0% /dev
tmpfs            43M  1.5M   42M   4% /run
/dev/mmcblk0p1   29G  1.4G   28G   5% /
tmpfs           213M     0  213M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           213M     0  213M   0% /sys/fs/cgroup
tmpfs           213M  4.0K  213M   1% /tmp
/dev/zram1       49M  392K   45M   1% /var/log
tmpfs            43M     0   43M   0% /run/user/1000

/var/logがzramファイルシステムであることを必ず確認する。/usr/lib/armbian/armbian-ramlogの編集を間違えるなどすると黄色の字の行が存在しない状態になる。そうなると、microSDカードの極めて脆弱な媒体のファイルシステム上に直接/var/logが作られて、そこにログファイルを追記しまくる(ブロックを消して書き直すのを繰り返す)という恐ろしい行為が行われる。TLC/QLCのカードだとあっというまに寿命を迎えることになる。