【RotorHazard】microSDカード延命…頻繁な読み書きをしないように設定

# 19. microSDカード延命設定・アクセスを少なくさせる

この記事はFPVドローン ラップ計測システム【RotorHazard】をRaspberry Piで作成するにあたってのTipsをまとめたものです。ですが一般的なラズパイ構築方法としても参考になるかと思いますので、ぜひご活用ください。

### 19-1. まずはSWAPサービスの無効化 ＆ /var/logの削除
ラズパイの特徴なのはmicroSDを使ってシステムを起動させ、OSイメージすらもmicroSDの中に収めて使えるというのが特徴なのですが…問題なのはOSそのものとしてはDebian系ディストリビューションの普通のLinux、使い方によってはディスクをガリガリさせるようなものは…microSDの寿命を早まらせることとなります。
別件で打ち合わせしていた会社の別拠点のメンバから『ラズパイはmicroSDの耐久性をやはり求めた方が良いっすねぇ。先日ちょっと必要で適当なものを買ったら1ヶ月で飛ばしちゃいましたー』なんてお話を聞きました。まあこれまた使い方にもよるものとは思いますが、microSDの高耐久性と共になるべくディスクシークを少なくするのは有効と思っています。
この部分に関しても、各ブログやサイトで皆さんテクニカル情報を公開してくれていますが、非常にしっくりしたコラムはこちらです。

https://gris-et-blanc.net/raspi/841/

まずは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
```

```/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
```

```/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
```

```/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
```
```/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. ログ出力のレベルを落とし、そもそも出力を少なく！

:::note warn
注意
Paspberry Pi OS (bookworm版 Debian12)では、ログ管理がJurnaldのみになりました。rsyslogが最初からインストールされなくなりましたので、rsyslogが必要な際は別途インストールが必要となりますのでご注意ください。
```
sudo apt update
sudo apt install -y rsyslog
```



:::

rsyslogでのログ管理の場合、下記ファイルを編集してログ出力の条件を設定します。
```
sudo vi /etc/rsyslog.conf
```
下記のような感じでコメントしてログ出力条件を絞って無効化しましたよ。
```/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
```

ラズパイ構築編のつづきはこちら

https://qiita.com/tmac116/items/4c372e476ddbb36b561b?1