symphonic-mpdへのSD書込を減らす(その1)
symphonic-mpdでは元々raspbianというディストリビューションを使用しており、
これの元となる物はPC向けのdebianとなります。
debian自体はaptというパッケージ管理ソフトを利用することで最新のソフトウェアに容易に更新できる大変便利な代物ですが、Raspberry Piという組込用途に近いワンボードPCである以上、ブートデバイスのSDカードの書込はできるだけ減らしたほうが良いでしょう。
幸いsymphonic-mpdではパパリウスさまが調整した設定によりSDカードの書込頻度はかなり落ちていますが、ここでは更なる書込を減らす方向性について複数回に分けて説明します。
(同時に皆さん一緒になって方向性を考えていきたい事項もありますので提案も兼ねたいと思います)。
-
既に実施済みのOS書込の省略化
近代的なOSではメインメモリの不足に備えて外部記録領域にスワップを用意します。raspbianも標準ではスワップの設定がonになっていますが、symphonic-mpdでは予めオフになっています。
また、ログを書込領域についても既にtmpfsを採用し、メインメモリに作成したディスク領域に保存されます(そのため、現況ではリブート後に過去のログは消去されます)
↑これはそのうち再起動時前にバックアップするスクリプトを紹介予定。
-
今回ご紹介するネタ(一時保存領域もメインメモリに確保)
正直ネタとしては効果が薄い(ファイルの一時保存領域を真面目に使うプログラムがどのくらいあるのか不明なことと、これを行う上でのリスクを天秤にかけた場合)ですが、紹介します。
やることとしては/tmpと/var/tmpの両方のディレクトリをtmpfsでメインメモリ上に移動してしまうということです。
※警告:今回のネタは最悪の場合、ディスクイメージからの起動ができなくなる恐れがあります。各コマンドの意味のある程度の事前理解と、自己責任で試行頂ますようお願いします。
①/etc/fstabの書替
書替は# NAS Setting
の手前に2行を追加する形になります。下記に書替済みのfstabを貼り付けします。
proc /proc proc defaults 0 0
PARTUUID=55575038-01 /boot vfat defaults 0 2
PARTUUID=55575038-02 / ext4 defaults,noatime,nobarrier 0 1
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
tmpfs /var/lib/mpd/music/RAM tmpfs defaults,size=650m,noatime,mode=0777 0 0
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=0777 0 0
tmpfs /var/tmp tmpfs defaults,size=32m,noatime,mode=0777 0 0
# NAS Setting
//192.168.11.151/qmultimedia/Music/ /var/lib/mpd/music/NAS cifs ro,noauto,x-systemd.automount,sec=ntlmssp,vers=2.1,rsize=129940,cache=none,iocharset=utf8,username=********,password=********
#//xxx.xxx.x.x/xxxxx/xxxxx /var/lib/mpd/music/NAS cifs ro,cache=none,noauto,x-systemd.automount,username=xxx,password=xxx
今回追加した行の意味を簡単に説明すると以下の通りです。
・tmpfsというファイルシステムを使用して/tmpと/var/tmpをブート時に生成してマウントさせます。
・オプション設定のdefaults,noatimeはお呪いだと思っても結構です。size=32mはディレクトリの最大サイズを指定しています。
・mode=0777は生成されたディレクトリのパーミッションです(元々に合わせてあります)。
・更にデフォルトの設定を見ると/var/logと/var/lib/mpd/music/RAMはtmpfsでメインメモリに作られているのがお分かりでしょうか?
②SDカードのディレクトリを削除
以下の通りコマンド入れます(先に/tmpを消した場合、/var/tmpを消そうとする間に/tmpが見つからない旨の警告が出て鬱陶しいです。)
sudo rm -fr /var/tmp
sudo rm -fr /tmp
削除するディレクトリをくれぐれも間違えないようにして下さい。
③ラズパイのリブート+再起動
以下の通りコマンドを入れます。いつもの起動音が鳴れば、恐らく成功です。
sudo reboot
念のため、sshでリモートシェルに入り、
ll /
ll /var
の両コマンドで/tmp・/var/tmpが作られているか確認して下さい。
- 最後に補足と今後の展望について
/tmpと/var/tmpの"size=32m"が足りるのかについては色々調整が必要かもしれません。
今後の展望ですが、普段の音楽再生時は/ディレクトリ(SDカード自体)をリードオンリーで再マウントするようにしようと思っています。この場合、MPDで問題になりそうなのはstate・sticker.sql・tag_cacheの3つの取扱になるかと思います。
という訳でご質問
①sticker.sqlを使いますか?(私の調べた限りでは楽曲のレーティングに使われるようですが、一般的にsymphonic-mpdを使っている方はympd経由のため不要に見えます)
②tag_cacheを頻繁に更新しますか?(過去の使い方ですと、自分のライブラリを頻繁に更新しない場合はtag_cacheは作成済みのファイルを読込専用でも特に問題ないかと思います)