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
だからそれは
- systemd-tmpfilesがソースディレクトリを作成した後、マウントが正しく発生します。
- その後、systemd-tmpfilesがソースディレクトリを削除しました。
- バインドマウントされたソースディレクトリを削除できます(?!)
- その後、systemd-tmpfilesは2番目にソースディレクトリを作成します。
質問が多いと思います。 1)に依存して働くことはできますか? 1) systemd-tmpfiles以外のものがソースディレクトリを作成しても動作しますか? 2)と4)が発生するのはなぜですか? 3)いつもこんなことがありましたか?
ベストアンサー1
systemdを使用するシステムのfstabで定義されているバインドは信頼できません。 Systemd は fstab を解析し、オブジェクトがマウントされバインドされる順序を特定しようとします。私の経験では、100%間違っている可能性が高いです。最善の方法は、すべてのバインディングをfstabから移動し、systemd用の独自のxxx.mountシステムファイルを作成することです。つまり、注文などに対する制御権を持つことになります。