systemd-nspawn

systemd-nspawnでのtmpディレクトリの扱いについて

More than 1 year has passed since last update.

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がクリアされてしまう

参考にしたリンク

systemd-nspawn: prevent guest from mounting /tmp as tmpfs