raspberrypi tempfs化備忘録

rasppiはhddがなく、sdカードに書き込む。 SDカードの寿命を延ばすためにtempfs化は必須。 また、デフォルトでswapが有効化されている。 swap も無効化しないと、sdカードへガリガリ書き込むため、swap無効化も合わせて行なったほうが良い。

swap

swapの確認

free を行うと、swapのfreeが0でないことがわかる

$ free
               total        used        free      shared  buff/cache   available
Mem:         3885496       94256     3411824         936      379416     3719992
Swap:         102396           0      102396

swap無効化

起動している状態でswapを無効化する

sudo swapoff --all

freeで確認するとfreefが0になることがわかる。

free
               total        used        free      shared  buff/cache   available
Mem:         3885496       93344     3411704         936      380448     3720772
Swap:              0           0           0

再起動後もswapを無効化する

swapサービスは dphys-swapfile

sudo systemctl stop dphys-swapfile.service
sudo systemctl disable dphys-swapfile.service

確認

sudo systemctl status dphys-swapfile

tempfs

tempfs化の対象ディレクトリは?

/var 配下の検討

  • /var/tmpは再起動後に残るディレクトリ。そのため通常は削除してはいけない。ただ今回はSDカードの寿命が短くなるのは許容できないためtmpfsにする。-> 更新日時が古く、そこまで問題ないと判断しtmpfs化は行わない。
$ ls -l /var
合計 102436
drwxr-xr-x  2 root root       4096  8月 14 06:25 backups
drwxr-xr-x  7 root root       4096  1月 28  2022 cache
drwxr-xr-x 24 root root       4096  1月 28  2022 lib
  -> 
drwxrwsr-x  2 root staff      4096 12月 12  2021 local
lrwxrwxrwx  1 root root          9  1月 28  2022 lock -> /run/lock
drwxr-xr-x  6 root root       4096  8月 14 00:00 log
drwxrwsr-x  2 root mail       4096  1月 28  2022 mail
drwxr-xr-x  2 root root       4096  1月 28  2022 opt
lrwxrwxrwx  1 root root          4  1月 28  2022 run -> /run
drwxr-xr-x  4 root root       4096  1月 28  2022 spool
  ->crontab=設定ファイルが書き込まれるためtmpfsにしない
-rw-------  1 root root  104857600  1月 28  2022 swap
drwxrwxrwt  4 root root         80  8月 14 00:00 tmp

/varを全てtmpfsにすると不足する。

kawawa@rpi4-2:/var $ sudo du -hs backups
584K    backups
kawawa@rpi4-2:/var $ sudo du -hs cache
105M    cache
kawawa@rpi4-2:/var $ sudo du -hs lib
145M    lib
kawawa@rpi4-2:/var $ sudo du -hs local
4.0K    local
kawawa@rpi4-2:/var $ sudo du -hs log
98M     log
kawawa@rpi4-2:/var $ sudo du -hs mail
4.0K    mail
kawawa@rpi4-2:/var $ sudo du -hs opt
4.0K    opt
kawawa@rpi4-2:/var $ sudo du -hs spool
16K     spool
  • /var/cache
rpi4-2:/var/cache $ find . -maxdepth 1 -type d | grep -v "\.$" | xargs -I{} sudo du -hs {}
100M    ./apt
4.0K    ./private
1.4M    ./man
28K     ./ldconfig
3.9M    ./debconf
  • aptのcacheは入りきらない。
  • manも無理。
  • debconfは用途が不明だが、そもそも/var/cacheのtmpfs化は諦めた方が良さそう.

  • /var/lib

rpi4-2:/var/lib $ find . -maxdepth 1 -type d | grep -v "\.$" | xargs -I{} sudo du -hs {}
20K     ./dhcpcd
8.0K    ./logrotate
4.0K    ./dhcp
125M    ./apt
28K     ./pam
8.0K    ./vim
4.0K    ./private
4.0K    ./usb_modeswitch
20M     ./dpkg
12K     ./nfs
8.0K    ./bluetooth
4.0K    ./misc
4.0K    ./udisks2
4.0K    ./dbus
12K     ./raspberrypi
8.0K    ./alsa
8.0K    ./sudo
4.0K    ./python
4.0K    ./man-db
48K     ./ucf
428K    ./systemd
36K     ./polkit-1
  • 支配的なものはapt. PGP
/var/lib $ ls -l
合計 88
drwxr-xr-x  2 root root 4096  8月 15 08:08 alsa
drwxr-xr-x  5 root root 4096  8月 13 19:33 apt
drwx------  3 root root 4096  1月 28  2022 bluetooth
drwxr-xr-x  2 root root 4096  1月 28  2022 dbus
drwxr-xr-x  2 root root 4096  5月 27  2021 dhcp
drwxr-xr-x  2 root root 4096  8月 14 08:44 dhcpcd
drwxr-xr-x  7 root root 4096  8月 13 19:33 dpkg
drwxr-xr-x  2 root root 4096  8月 16 00:00 logrotate
drwxr-xr-x  2 root root 4096  1月 28  2022 man-db
drwxr-xr-x  2 root root 4096 12月 12  2021 misc
drwxr-xr-x  4 root root 4096  1月 28  2022 nfs
drwxr-xr-x  2 root root 4096  1月 28  2022 pam
drwx------  3 root root 4096  1月 28  2022 polkit-1
drwx------  2 root root 4096  1月 28  2022 private
drwxr-xr-x  2 root root 4096  1月 28  2022 python
drwxr-xr-x  3 root root 4096  1月 28  2022 raspberrypi
drwxr-xr-x  3 root root 4096  1月 28  2022 sudo
drwxr-xr-x 11 root root 4096  1月 28  2022 systemd
drwxr-xr-x  3 root root 4096  1月 28  2022 ucf
drwx------  2 root root 4096  1月 28  2022 udisks2
drwxr-xr-x  2 root root 4096  7月 11  2020 usb_modeswitch
drwxr-xr-x  3 root root 4096  1月 28  2022 vim
rpi4-2:/var/lib $ date
2022年  8月 16日 火曜日 06:23:39 JST
  • 更新日時を確認しても1回/日程度のため許容範囲と判断。

  • tmpfsにするのは /var/log だけで良さそう

    • /var/logの更新日時が古い?
    • journalctlの保存先がSDカードだと対策不十分
      • journalctlのデフォルトログ保存先は/run配下。
      • /run はtmpfs化既にされているため問題なし.

- 容量はどうする?

Raspberry Pi OSにtmpfsを活用しSDカードに優しいシステムを - Fun Scripting 2.0

ではrpi3にて/tmp,/var それぞれ 16mとしている。 - rpi4 4GB でrpi3よりメモリは増えている。そのため16Mは問題ないように思える。

  • tmpfiles.dとfstabの棲み分け
    • fstabは起動時にマウントする設定
    • tmpfiles.dは一時ファイルのマウント?、アンマウント、初期化、後処理などができる。典型的にはマウント後の初期化処理にてtmpfsにシンボリックリンクを作成するといったことが簡便に実現できる。
    • see tmpfiles.d(5)

最終的に以下2行を/etc/fstabに書き込むことで完了

tmpfs  /tmp           tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs  /tmp/log       tmpfs defaults,size=16m,noatime,mode=1777 0 0