systemd-nspawn Advent Calendar 2017 2日目の記事です。
systemd-nspawnで/tmpディレクトリはメモリ上に置かれます
なので/tmpディレクトリに沢山置くとメモリ不足になっちゃうよという話
あと、/var/lib/machines/container/tmp/a.txt
みたいなファイルがあったとしても、tmpfsで被せてしまうので見えない
確認
# df -h /tmp/
ファイルシス サイズ 使用 残り 使用% マウント位置
tmpfs 1.9G 0 1.9G 0% /tmp
確かにtmpfsになってる
対策1
tmpマウントを止めてしまう
systemctl stop tmp.mount
起動時にこれを発動させたかったら、systemdのboot処理が全部終わった後に発動するrc.localとかcrontabの@rebootとかを遅延かけてやるしかないと思う
(というのも、なんかこれtmp.mountがdisableでもmaskされても発動されちゃうのでsystemdのサービス止めてもsystemd-nspawnが起動かけてるように思えるので・・・)
対策2
bindでつなげちゃう
systemd-nspawn --bind /var/lib/machines/hogecontainer/tmp:/tmp -D /var/lib/machines/hogecontainer
注意
--bootフラグを立てて、boot処理を行うとtmpの削除処理が走るので、注意すること
なので、ホスト側の/tmpとつなげちゃうとコンテナ上げるたびに/tmpがクリアされてしまう