19. microSDカード延命設定・アクセスを少なくさせる
この記事はFPVドローン ラップ計測システム【RotorHazard】をRaspberry Piで作成するにあたってのTipsをまとめたものです。ですが一般的なラズパイ構築方法としても参考になるかと思いますので、ぜひご活用ください。
19-1. まずはSWAPサービスの無効化 & /var/logの削除
ラズパイの特徴なのはmicroSDを使ってシステムを起動させ、OSイメージすらもmicroSDの中に収めて使えるというのが特徴なのですが…問題なのはOSそのものとしてはDebian系ディストリビューションの普通のLinux、使い方によってはディスクをガリガリさせるようなものは…microSDの寿命を早まらせることとなります。
別件で打ち合わせしていた会社の別拠点のメンバから『ラズパイはmicroSDの耐久性をやはり求めた方が良いっすねぇ。先日ちょっと必要で適当なものを買ったら1ヶ月で飛ばしちゃいましたー』なんてお話を聞きました。まあこれまた使い方にもよるものとは思いますが、microSDの高耐久性と共になるべくディスクシークを少なくするのは有効と思っています。
この部分に関しても、各ブログやサイトで皆さんテクニカル情報を公開してくれていますが、非常にしっくりしたコラムはこちらです。
まずはSWAP領域の状態を free -h コマンドで確認します。
free -h
total used free shared buff/cache available
Mem: 909Mi 336Mi 66Mi 24Mi 505Mi 471Mi
Swap: 99M 0B 99M
デフォルトでSWAP領域は100MB使われるのですね。LinuxのSWAPはなんだかんだいってシークしちゃうので、これを殺すことでディスクシークが一気に減らすことができます。っということでそのまま続けてSWAP無効化を進めます。
sudo swapoff --all
一度、SWAP無効化された状態を確認します。
free -h
total used free shared buff/cache available
Mem: 909Mi 336Mi 66Mi 24Mi 505Mi 471Mi
Swap: 0B 0B 0B
おぉぉ。SWAP領域がゼロになりました。ですがこのままでは再起動後に復活しちゃうので、永続的にSWAP無効化をするように下記コマンドを打ち込みます。
sudo systemctl stop dphys-swapfile.service
sudo systemctl disable dphys-swapfile.service
sudo rm -rf /var/log
最後に/var/logフォルダを削除することでキレになりました。また他の方のやり方ではSWAPサービスそのものを削除する(sudo apt remove dphys-swapfile)やり方もありますが、まあとりあえずは無効化で。ここいらも参考サイトと同意見であります。
19-2. 必要なテンポラリフォルダをRAMディスクへ変更
次に /etc/fstab を編集し、/tmp、/var/tmp をRAMディスク化(tmpfs化)しまっす。
sudo vi /etc/fstab
tmpfs /tmp tmpfs defaults,size=64m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
この後、microSDの /tmp、/var/tmp を削除し、一旦再起動します。
sudo rm -rf /tmp
sudo rm -rf /var/tmp
sudo reboot
19-3. LogフォルダをRAMディスクへ変更
再起動し次に上がってきたらLogフォルダを再構成するため、再度 /etc/fstab を編集します。
sudo vi /etc/fstab
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
19-4. 起動時にLogフォルダを自動作成するようスクリプトを仕込む
ログフォルダがRAMディスク化してしまうと、当然毎回再起動したら消えてしまうという状況になります。ですが、/var/log以下に指定ディレクトリが存在しないとエラーで怒られるパターンもあるので、起動後にフォルダを生成するスクリプトを走らせるという部分がポイントのようです。ちなみにRotorHazard専用機として利用する場合には、ログは全然違う場所で管理されるため、この処理はやらずとも良いのですが、せっかくなのでちゃんと仕込んでおきましょう。ここは先のサイトの内容をマルっと参考とさせてもらいました。
sudo mkdir /usr/local/bin/command
sudo mkdir /usr/local/bin/command/start
sudo vi /usr/local/bin/command/start/make-folder.sh
#!/bin/sh
#
# 起動時、自動的にディレクトリを作成
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/samba
mkdir -p /var/log/fsck
mkdir -p /var/log/apt
mkdir -p /var/log/ntpstats
#chown root.ntp /var/log/ntpstats
chown root.adm /var/log/samba
# 起動時、自動的にLastlogとwtmp、btmpファイルの空ファイルを作成
touch /var/log/lastlog
touch /var/log/wtmp
touch /var/log/btmp
chown root.utmp /var/log/lastlog
chown root.utmp /var/log/wtmp
chown root.utmp /var/log/btmp
作成したファイルを実行ファイル形式(755)にします。また/etc/rc.localを編集し、スクリプトを起動時に実行するように仕込みます。
sudo chmod +x /usr/local/bin/command/start/make-folder.sh
sudo vi /etc/rc.local
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
#startup <<この場所に追記しました。
/usr/local/bin/command/start/make-folder.sh
exit 0
最後に再度、再起動をします。
sudo reboot
19-5. ログ出力のレベルを落とし、そもそも出力を少なく!
注意
Paspberry Pi OS (bookworm版 Debian12)では、ログ管理がJurnaldのみになりました。rsyslogが最初からインストールされなくなりましたので、rsyslogが必要な際は別途インストールが必要となりますのでご注意ください。
sudo apt update
sudo apt install -y rsyslog
rsyslogでのログ管理の場合、下記ファイルを編集してログ出力の条件を設定します。
sudo vi /etc/rsyslog.conf
下記のような感じでコメントしてログ出力条件を絞って無効化しましたよ。
###############
#### RULES ####
###############
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
#kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.* -/var/log/user.log
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err
#*.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug
最後にまた再起動しちゃいます。これで今回の作業はおしまいっす。
sudo reboot
ラズパイ構築編のつづきはこちら