Raspberry PiのSDカード/マイクロSDカードの寿命を延ばす

Raspberry Piをサーバーとして使っていますが、
予想される一番最初に壊れる箇所はSDカード/マイクロSDカードです。

サーバーみたいに24時間動かし続けるとSDカードへの読み書きが増えて寿命で壊れる。
1年くらいで壊れても不思議じゃない気がします。

ということで、できるだけSDカード/マイクロSDカードを延命させるための対策を取ります。
(サーバーみたく24時間使わなければ気にしなくていいと思います)


参考
How can I extend the life of my SD card?
Raspberry PiでRAMDiskを使う

Swapを無効にする

Raspberry Piから
free
             total       used       free     shared    buffers     cached
Mem:        382868     113852     269016          0       9932      48188
-/+ buffers/cache:      55732     327136
Swap:       102396          0     102396

スワップが100MBほどあります。
この利用を無効にします。

話によるとスワップは(マイクロ)SDカードへ負荷をかけるらしく、あってもあまり速くならない。デメリットのわりにメリットが少ないのがRaspberry Piのスワップです。とは言うものの、スワップしているところ見たことないんだけど。。

とにかくスワップを無効にします。

sudo swapoff --all
free
             total       used       free     shared    buffers     cached
Mem:        382868     127168     255700          0      10600      60524
-/+ buffers/cache:      56044     326824
Swap:            0          0          0

スワップがゼロになった。
これだけだとリブートしたときに復活するので下記の呪文を唱える。
sudo apt-get remove dphys-swapfile

Raspbian以外の場合は下記のファイルから適切なものを削除するらしい。僕はRaspbianなので省略。
/etc/fstab

とりあえずリブートして確かめてみる。
起動しなくなった・・・・。

電源引っこ抜いて再度電源を入れた。
起動した。
free
             total       used       free     shared    buffers     cached
Mem:        382868     113636     269232          0       9928      48056
-/+ buffers/cache:      55652     327216
Swap:            0          0          0

スワップの無効に成功しました。

RAMディスクを使う

RAMディスクを使えばSDカードへの負担が減るらしい。
負担を減らす代わりにリブートまたは電源を切るとRAMディスクのデータが消えます。

消えてほしくないデータは電源を切る前に避難させる必要があります。または消えてほしくないデータに対してはRAMディスクを使わない。

tmpフォルダをRAMディスクに移す

sudo vim /etc/fstab
tmpfs                   /tmp            tmpfs    defaults,size=32m,noatime,mode=1777      0       0
tmpfs                   /var/tmp        tmpfs    defaults,size=16m,noatime,mode=1777      0       0
sudo reboot

df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           15G  2.8G   12G  20% /
/dev/root        15G  2.8G   12G  20% /
devtmpfs        183M     0  183M   0% /dev
tmpfs            38M  228K   38M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            75M     0   75M   0% /run/shm
/dev/mmcblk0p1   56M  9.6M   47M  18% /boot
tmpfs            32M     0   32M   0% /tmp
tmpfs            16M     0   16M   0% /var/tmp

※追記
Wordpressなんかを運用する場合で比較的大きな容量のファイルをアップロードする場合、tmpフォルダのサイズがアップロードできる最大容量になります。

WordPressで2MB超のファイルをアップロードする方法で100MBに設定しても、tmpが32MBの場合は、32MB超のファイルをアップロードすると、

『“何とかファイル” は、エラーのためアップロードに失敗しました
ディスクへのファイルの書き込みに失敗しました。』

というメッセージが出てきてアップロードできません。

tmpのsizeを32mから64mにすると、64MBまでアップロードできるようになります。

logフォルダをRAMディスクに移す

logの中で残しておきたいログがあれば保存する。apache2のログなんかはどこか違う場所に保存するようにしたほうがいいかもしれない。
sudo vim /etc/fstab
tmpfs                  /var/log         tmpfs    defaults,size=32m,noatime,mode=0755      0       0

mount /var/log
[mntent]: line 7 in /etc/fstab is bad
mount: can't find /var/log in /etc/fstab or /etc/mtab

あれ?マウントできない・・。
コピペと編集繰り返しているうちにマウントできるようになった。

sudo vim /etc/fstab
tmpfs                   /var/log        tmpfs    defaults,size=32m,noatime,mode=0755      0       0

何が違うんだろう?
まぁいいや。
df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           15G  2.8G   12G  20% /
/dev/root        15G  2.8G   12G  20% /
devtmpfs        183M     0  183M   0% /dev
tmpfs            38M  228K   38M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            75M     0   75M   0% /run/shm
/dev/mmcblk0p1   56M  9.6M   47M  18% /boot
tmpfs            32M     0   32M   0% /tmp
tmpfs            16M     0   16M   0% /var/tmp
tmpfs            32M     0   32M   0% /var/log
tmpfs            32M     0   32M   0% /var/log

sudo vim /etc/rsyslog.conf
#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

#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</code>

<code>sudo vim  /etc/rc.local
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
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 reboot

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

容量が大きいとそれだけ書き込める箇所が増えて、連続して書き込む割合が少なくなるので、SDカード/マイクロSDカードは容量の大きなものを使う。少なくとも8GB、推奨16GB。無名なブランドではなく有名ブランドを使う。無名なブランドだと容量を増やすことで負担を減らす機能がないことも考えられる。


以上がRaspberry PiのSDカード/マイクロSDカードの寿命を延ばす主要なポイントでした。

他に有用なテクニックがある場合、随時ここに載せていきます。

コメントを残す

メールアドレスが公開されることはありません。