systemdのバインドマウントはsystemd-tmpfilesで魔法のように動作しませんか?

systemdのバインドマウントはsystemd-tmpfilesで魔法のように動作しませんか?

Debian 8コンピュータで奇妙な問題が発生しました。

背景は、物理IO(ディスクウェイクアップ/フラッシュ摩耗)を防ぐために、いくつかのディレクトリをtmpfsにマウントしたいということです。

たぶん、各ディレクトリに別々のtmpfsをインストールする必要があります。しかし、私が試した最初のタスクは/tmp/mnts.

だから起動時にtmpfsにディレクトリを作成したいと思います。それはsystemd-tmpファイルです。次に、/varの下のさまざまな場所にバインドしてマウントします。

# /etc/tmpfiles.d/tmpfs-mnts.conf snippet
# Type Path    Mode UID  GID  Age Argument
d /tmp/mnts/var-lib-icinga-spool-checkresults 0750 nagios nagios -

# /etc/fstab snippet
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/tmp/mnts/var-lib-icinga-spool-checkresults /var/lib/icinga/spool/checkresults none bind

systemd-tmpfiles --create+mount -aうまく動作します。ただし、起動時には動作しないため、競合状態が発生します。しかし、失敗は少し面白いです。 findmnt はソースディレクトリが削除されたことを示します。

# findmnt|grep /var/lib/icinga/spool/checkresults
└─/var/lib/icinga/spool/checkresults                     tmpfs[/mnts/var-lib-icinga-spool-checkresults//deleted] tmpfs       rw
# cd /var/lib/icinga/spool/checkresults/
# mkdir ./test
mkdir: cannot create directory ‘./test’: No such file or directory
# ls --inode /tmp/mnts
7414 var-lib-icinga-spool-checkresults
# ls --inode /var/lib/icinga/spool/
6254 checkresults

だからそれは

  1. systemd-tmpfilesがソースディレクトリを作成した後、マウントが正しく発生します。
  2. その後、systemd-tmpfilesがソースディレクトリを削除しました。
  3. バインドマウントされたソースディレクトリを削除できます(?!)
  4. その後、systemd-tmpfilesは2番目にソースディレクトリを作成します。

質問が多いと思います。 1)に依存して働くことはできますか? 1) systemd-tmpfiles以外のものがソースディレクトリを作成しても動作しますか? 2)と4)が発生するのはなぜですか? 3)いつもこんなことがありましたか?

ベストアンサー1

systemdを使用するシステムのfstabで定義されているバインドは信頼できません。 Systemd は fstab を解析し、オブジェクトがマウントされバインドされる順序を特定しようとします。私の経験では、100%間違っている可能性が高いです。最善の方法は、すべてのバインディングをfstabから移動し、systemd用の独自のxxx.mountシステムファイルを作成することです。つまり、注文などに対する制御権を持つことになります。

おすすめ記事