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化の対象ディレクトリは?
- 常時書き込むディレクトリ
- /tmp
- /var ?
/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