Raspberry Pi(Raspbian)にやっといたほうがいい設定(マイクロSDカードの延命:swapやlog)

投稿者: | 2020年4月28日

Raspberry piはMicro SDカードをディスクとして使用します。Micro SDカードは書き換え回数に上限があるため頻繁な書き込みを行うと寿命が付くてしまいます。
できるだけMicro SDカードに書きこみをしないで寿命を延ばす設定になります。

Micro SDカード延命処置

できるだけMicro SDカードに書きこみをしない方法は以下のものがあります。

①スワップ(Swap)を無効化
②ログファイルと一次作成場所をtmpfs(RAMdisk上)にする
③ログ出力を減らす
④容量の大きなSDカード/マイクロSDカードを使う

スワップ(Swap)を無効化

スワップ(Swap)は仮想メモリをつかうもので、Windowsにもあるスワップファイルです。
実メモリが不足すると、一時的にディスク上に作成したスワップファイルに使っていないメモリ領域を保存して、実メモリに空きを作るものです。
スワップ(Swap)を無効化することで、ディスク(Micro SDカード)へのアクセス量は減りますが、場合によってはメモリ不足でアプリケーションが動作しなくなることがあります。

無効化の方法

まず、現在の状態を確認します。

$ free -h

        total   used    free  shared   buff/cache    available
Mem:    925Mi   69Mi   417Mi    54Mi        438Mi        738Mi
Swap:    99M     0B     99M

この例では、スワップ領域に99Mb確保されていて、使用量は0B(使っていない)ことになります。
スワップ(Swap)を無効化します。

$ sudo swapoff --all
$ free -h

        total   used    free  shared   buff/cache    available
Mem:    925Mi   69Mi   417Mi    54Mi        438Mi        738Mi
Swap:     0B     0B      0B

続いて、再起動してもこの状態が続くようにします。
スワップサービスの削除(apt-get remove dphys-swapfile)もいいのですが、ここではサービスの停止を行います。

# スワップを無効化
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile

# 確認
$ sudo systemctl status dphys-swapfile

#旧フォルダを削除
$ sudo rm -rf /var/log

これでスワップ(Swap)を無効化できました。

スワップ(Swap)を有効化

メモリ不足になり、スワップ(Swap)が必要になった場合は以下のようにスワップを復活させます。

# スワップを有効化
$ sudo systemctl enable dphys-swapfile
$ sudo systemctl start dphys-swapfile

# 確認
$ sudo systemctl status dphys-swapfile

これでスワップ(Swap)を有効化できました。

ログファイルと一次作成場所をtmpfs(RAMdisk上)にする

テンポラリ領域(一時的保存領域)の 「/tmp」 と 「/var/tmp」、およびログファイルの 「/var/log」 が、RAMdisk(メモリ上のファイルシステム)の tmpfs に作られるように設定します。

なお、RAMdisk(メモリ上のファイルシステム)はRaspberry piの再起動でリセットされデータは消えてしまうので、消えてほしくないデータはRAMdisk(メモリ上のファイルシステム)に置かない、もしくは再起動やシャットダウンの前にSDカードへ避難させる必要があります。

tmpフォルダをtmpfs(RAMdisk上)にする

fstabを修正して、/tmp と /var/tmp をtmpfs(Ramdisk上)に設定します。

$ sudo nano /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

次に、SDカード上の /tmp と /var/tmp を消します。

$ sudo rm -rf /tmp
$ sudo rm -rf /var/tmp

再起動します。

$ sudo reboot

なお、上記の設定では
・/tmp : 64MB
・/var/tmp:16MB
となっています。アプリケーションなどで多くの一時領域が必要な場合は、この数値を多くします。ただし、あまり多くすると実メモリがなくなるので注意が必要です。

logフォルダをtmpfs(RAMdisk上)にする

ログフォルダをRAMdisk上に置きます。Raspberry pi が再起動するとログは消えてしまうので、ある意味どうでもいいログを置く場所となります。もし、logの中で残しておきたいログがあれば保存しておく必要があります。

$ sudo nano /etc/fstab

#以下の行を追加します
tmpfs    /var/log       tmpfs    defaults,size=32m,noatime,mode=0755      0       0

なお、Raspberry pi の起動時にログフォルダはりせってされるので何も残りません。
アプリケーションによっては ”ログフォルダがそこにあること” を前提にしているものもあるのでエラーとなる場合があります。
そのため、以下のようなスクリプトをRaspberry pi の起動時に走らせて(rc.localなど)おくのが良いでしょう。
以下は起動時にログフォルダを作成する例です。
ここでは「/usr/local/bin/command/start/make-folder.sh」を作成して「rc.local」に登録します。

$ sudo mkdir /usr/local/bin/command
$ sudo mkdir /usr/local/bin/command/start
$ sudo nano /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

作成したファイルを起動可能にします。

sudo chmod +x /usr/local/bin/command/start/make-folder.sh

起動時に実行できるように「rc.local」に登録します。

$ sudo nano /etc/rc.local

#以下を追記します
#startup
/usr/local/bin/command/start/make-folder.sh

再起動します。

$ sudo reboot

ログ出力を減らす

いろいろなログが出力されていますが、使っていないサービスのログ出力を減らしてます。「/etc/rsyslog.conf」 を編集してログ出力を抑えます。

「/etc/rsyslog.conf」 を開きます。

$ sudo nano /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

メール、InterNetNewsもいらないでしょう。

#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
#mail.err /var/log/mail.err

#news.crit /var/log/news/news.crit
#news.err /var/log/news/news.err
#news.notice -/var/log/news/news.notice

デバッグもいらないでしょう。

#*.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug

再起動します。

$ sudo reboot

容量の大きなSDカード/マイクロSDカードを使う

これは、ある意味力業です。
SDカードの容量が大きいとそれだけ書き込める箇所が増えるので、同じ場所に書き込む割合が少なくなります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です