概要

SDカードへの書き込みをなるべく減らすため、下記ディレクトリ:

  • /var/log
  • /tmp
  • /var/tmp

をtmpfs*1として構成する。tmpfsとすることで多かれ少なかれメインメモリを消費するため、ログの保存期間を短くしメモリを圧迫しないようにする。

上記ディレクトリが揮発性となることで、その下に所属するファイル・ディレクトリが再起動のたびにクリアされてしまう。特に、一部のサービス・アプリケーションは/var/logにあらかじめファイル・ディレクトリが存在していないとうまく動かないものがあるため、ブートシーケンスの中で必要なものを作成するようにする。

では早速設定を開始する。

作業内容

設定変更するファイル、内容、手順等は下記の通り。

  • /etc/fstab
  • /var/log
  • /var/tmp
  • /tmp
  • /etc/init.d/bootmisc.sh
  • /etc/init.d/bootmisc-sub-varlog.inc (自作)

以下、順に説明する。

/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が居残っていたという・・・。

リブート
リブートして内容を再確認する。

#amazon_omakase(logo=hide,link_target=new)


*1 いわゆるRAM DISKのこと

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-02 (月) 15:44:25 (52d)