SDカードへの書き込みをなるべく減らすため、下記ディレクトリ:
をtmpfs*1として構成する。tmpfsとすることで多かれ少なかれメインメモリを消費するため、ログの保存期間を短くしメモリを圧迫しないようにする。
上記ディレクトリが揮発性となることで、その下に所属するファイル・ディレクトリが再起動のたびにクリアされてしまう。特に、一部のサービス・アプリケーションは/var/logにあらかじめファイル・ディレクトリが存在していないとうまく動かないものがあるため、ブートシーケンスの中で必要なものを作成するようにする。
では早速設定を開始する。
設定変更するファイル、内容、手順等は下記の通り。
以下、順に説明する。
/etc/fstab
起動時にマウントするtmpfsの定義を追加する。
下記の行を末尾あたりに追加する。
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=16m,noatime,mode=0755 0 0
補足:size=XXmの部分は、そのファイルシステムの最大容量。これは最初からメモリを最大量確保するわけではなく、使用した分だけメモリが自動拡張され、size=で指定された容量まで拡大する、ということ。
サイズは各自で適宜調整願う。
リブートはせず、次の手動マウントを試してから。
/var/logの手動マウント
/var/logはマウントポイントとなるため、現在の内容はすべて不要である。
一度バッサリ削除(必要ならバックアップ)して再作成し、tmpfsを手動でマウントしてみる。
$ su # cd /var # ls -ld log drwxr-xr-x 8 root root 4096 12月 26 06:25 log/ # パーミッションを覚えておく # rm -rf log # mkdir -m 755 log # chown root:root log # ls -ld log drwxr-xr-x 2 root root 4096 12月 26 13:52 log/ # mount log
マウントできたかどうかは、下記で確認するとよい。
# df -h | grep /var/log tmpfs 16M 0 16M 0% /var/log
おまけ:rsyslogdを再起動すると、新しい/var/logの下にログファイルが生成されるはず。
$ sudo /etc/init.d/rsyslog restart
/var/tmpの手動マウント
初期状態に近いならば、おそらく空であると思われるので、単に手動マウントし、確認してみる。
$ su # mount /var/tmp # df -h | grep /var/tmp tmpfs 16M 0 16M 0% /var/tmp
/tmpの手動マウント
一応クリーンな状態とするため、/var/logと同様に全部削除~再作成。
$ su # cd / # ls -ld tmp drwxrwxrwt 4 root root 4096 12月 26 13:43 tmp/ # rm -rf tmp # mkdir -m 1777 tmp # chown root:root tmp # mount tmp # df -h | grep /tmp tmpfs 16M 0 16M 0% /var/tmp tmpfs 32M 0 32M 0% /tmp
mkdirの-mオプションのパーミッションの先頭1桁目の'1'を忘れずに(スティッキービット)。 grepの結果に/var/tmpが含まれるのはご愛嬌。
/etc/init.d/bootmisc.sh , /etc/init.d/bootmisc-sub-varlog.inc
/var/log/内にあらかじめ存在していないと問題があるファイル、ディレクトリをここで作成する。
このスクリプトは /etc/rcS.d/ にて、ローカルファイルシステムのマウント完了後(実際はさらにずっとあと)に起動されるので、当然 /var/log もtmpgsとして存在し、都合がよい、。
下記のファイルを作成し、bootmisc.shの do_start() 内でインクルードする。
作成するファイル /etc/init.d/bootmisc-sub-varlog.inc
内容:
# include by bootmisc.sh LOGFILES="/var/log/lastlog /var/log/wtmp" touch $LOGFILES chmod 664 $LOGFILES chown root:utmp $LOGFILES mkdir -p /var/log/fsck exit 0
補足:/var/log/fsck/に対して、起動時のfsckの結果をsavelogコマンドが遅延書き込みしてくるので、適当なタイミングでディレクトリを作っておけばよい。そうしないと、savelogプロセスがず~~~~と居残ってしまう(ディレクトリが作成された時点で、ログ書き出してsavelogが終了するので、手動でディレクトリ作成してもよい)。
かくいう管理人もつい最近まで気づかず、1号機のプロセスに何か月もsavelogが居残っていたという・・・。
リブート
リブートして内容を再確認する。