現: 2020-12-26 (土) 15:07:35 yuji ソース
Line 1: Line 1:
 +* Raspberry PiでMicroSDカード寿命を延ばすためにRAMディスクを使う [#k42589ac]
 +MicroSDカードやSDカードは,NANDフラッシュが使われていて,このNANDフラッシュには書き換え寿命が存在する。
 +
 +Raspberry PiはOSをSDカードに書き込んで利用しているため,数ヶ月から1年程度でMicroSDカードやSDカードが寿命で使えなくなってしまう。
 +
 +対策で考えられるのは,~
 ++ swapを使わないようにする~
 ++ 頻繁に書き換えられる場所を,RAMディスクにする~
 ++ ルートファイルシステムをRAM上で運用する~
 ++ 別のメディア等に定期的にバックアップを取る~
 +壊れたらバックアップしたSDカードに入れ替える。~
 ++ Networkブートにし,ストレージとしてSD/MicroSDカードは使わない~
 ++ SDカードのファイルシステムをRead-Onlyな読み込み専用にする~
 +
 +などが考えられます。
 +
 +そこで,SD/MicroSDカードの寿命を伸ばすため,とりあえずswapを使わないようにし,ログファイルをRAM Disk化して,出来るだけSD/MicroSDカードへの書き込み回数を減らすようにしてみる。
 +
 +以下は,Raspbian Jessie/Stretchを使用している場合。
 +
 +** SWAPを使わないようにする [#b23577ee]
 +
 +freeコマンドでswapサイズを確認してみる。
 + $ free
 +               total      used      free    shared    buffers    cached
 + Mem:        750632    523468    227164      5460      53252    361196
 + -/+ buffers/cache:    109020    641612
 + Swap:      102396          0    102396
 +
 +と,スワップファイルとして100MBが確保されている。usedは0なんで,スワップは発生していないが・・・
 +
 +まず,swapを無効化してみる。
 + # dphys-swapfile swapoff
 +確認してみると,
 + # free
 +             total      used      free    shared    buffers    cached
 + Mem:        750632    527064    223568      5460      53652    361688
 + -/+ buffers/cache:    111724    638908
 + Swap:            0          0          0
 +使用されなくなった。
 +
 +再度swapを有効化するには,
 + # dphys-swapfile swapon
 +でOK。
 + 
 +swapは使用しなくなったが,電源ONでswapが自動起動しないようにsystemctlで設定します。
 + # systemctl stop dphys-swapfile
 + # systemctl disable dphys-swapfile
 +
 +Raspberry Piを再起動してswapが使用されていないか確認しておく。
 +
 +** RAMディスクの設定 [#obcfb496]
 +
 +メインRAMの一部をRAM Diskとして使用し,そこをテンポラリファイル保存場所に利用するようにする。~
 +RAMディスクは,電源OFF-ONやブートしたりした場合消えてしまうが,テンポラリのログ等では消えてしまってもまあ問題ない。
 +
 +/etc/fstabを編集して,/tmpと/var/tmpと/var/logを移動するようにしてみる。
 + proc            /proc          proc    defaults          0      0
 + /dev/mmcblk0p1  /boot          vfat    defaults          0      2
 + /dev/mmcblk0p2  /              ext4    defaults,noatime  0      1
 + # a swapfile is not a swap partition, no line here
 + #  use  dphys-swapfile swap[on|off]  for that
 +これを,
 + proc            /proc          proc    defaults          0      0
 + /dev/mmcblk0p1  /boot          vfat    defaults          0      2
 + /dev/mmcblk0p2  /              ext4    defaults,noatime  0      1
 + # a swapfile is not a swap partition, no line here
 + #  use  dphys-swapfile swap[on|off]  for that
 + tmpfs          /tmp            tmpfs  defaults,size=32m,noatime,mode=1777      0      0
 + tmpfs          /var/tmp        tmpfs  defaults,size=16m,noatime,mode=1777      0      0
 + tmpfs          /var/log        tmpfs  defaults,size=32m,noatime,mode=0755      0      0
 +とtmpfsとして3個追加する。
 +
 +再起動して,マウント確認をする。
 + # df -h
 + ファイルシス  サイズ  使用  残り 使用% マウント位置
 + /dev/root        15G  4.6G  8.9G  34% /
 + devtmpfs        363M    0  363M    0% /dev
 + tmpfs            367M    0  367M    0% /dev/shm
 + tmpfs            367M  5.1M  362M    2% /run
 + tmpfs            5.0M  4.0K  5.0M    1% /run/lock
 + tmpfs            367M    0  367M    0% /sys/fs/cgroup
 + tmpfs            32M  88K  32M    1% /var/log
 + tmpfs            16M    0  16M    0% /var/tmp
 + tmpfs            32M    0  32M    0% /tmp
 + /dev/mmcblk0p1    63M  21M  42M  34% /boot
 + tmpfs            74M    0  74M    0% /run/user/1001
 +
 +** 不要なログは作成しないようにする [#zacbd2e1]
 +
 +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
 + 
 + #
 + # Logging for the mail system.  Split it up so that
 + # it is easy to write scripts to parse these files.
 + #
 + #mail.info                      -/var/log/mail.info
 + #mail.warn                      -/var/log/mail.warn
 + #mail.err                      /var/log/mail.err
 + 
 + #
 + # Logging for INN news system.
 + #
 + #news.crit                      /var/log/news/news.crit
 + #news.err                      /var/log/news/news.err
 + #news.notice                    -/var/log/news/news.notice
 + 
 + #
 + # Some "catch-all" log files.
 + #
 + #*.=debug;\
 + #      auth,authpriv.none;\
 + #      news.none;mail.none    -/var/log/debug
 + *.=info;*.=notice;*.=warn;\
 +         auth,authpriv.none;\
 +         cron,daemon.none;\
 +         mail,news.none          -/var/log/messages
 + 
 + #
 + # Emergencies are sent to everybody logged in.
 + #
 + *.emerg                        :omusrmsg:*
 + 
 +テンポラリ用のディレクトリが無いと困るプログラム用に,起動時にディレクトリを作っておく。
 +/etc/rc.localで,これを行う。
 + #!/bin/sh -e
 + #
 + # rc.local
 + #
 + # This script is executed at the end of each multiuser runlevel.
 + # Make sure that the script will "exit 0" on success or any other
 + # value on error.
 + #
 + # In order to enable or disable this script just change the execution
 + # bits.
 + #
 + # By default this script does nothing.
 + 
 + # Print the IP address
 + _IP=$(hostname -I) || true
 + if [ "$_IP" ]; then
 +   printf "My IP address is %s\n" "$_IP"
 + fi
 + 
 + 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.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
 + 
 + exit 0
  

  • PC/RaspberryPi/RAMディスクの利用 のバックアップ差分(No. All)
    • 現: 2020-12-26 (土) 15:07:35 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 2607, today: 2, yesterday: 0