最近のLinuxディストリビューションでは、systemdが使われている関係で、
OS起動時の挙動がパラレルに行われることが多くなり、それに伴った問題点が
出てくることがあります。
今回はfstab から2つのファイルシステムをマウントする場合に起きること
がある、タイミングの問題を解決する方法を紹介します。
テストした条件
RHEL8
/dev/sdb /にある /mountpoint1 へマウント
/dev/sdc /mountpoint1/mountpoint2 へマウント
ファイルシステムは ext4
一般的なfstabの設定例
/dev/sdb /mountpoint1 ext4 defaults 1 1
/dev/sdc /mountpoint1/mountpoint2 ext4 defaults 1 1
このfstabの設定でOSを再起動した際に、sdbはマウントしても、
sdc がマウントされないと言うことが稀に発生します。
マウントする順序をコントロールする unitファイルの書き方
[Unit]
Description=sakini-mount
Requires=tmp.mount
After=tmp.mount
[Mount]
Want=/dev/sdb
Where=/mountpoint1
Type=ext4
[Install]
WantedBy=multi-user.target
[Unit]
Description=atokara-mount
Requires=mountpoint1.mount
After=mountpoint1.mount
[Mount]
Want=/dev/sdc
Where=/mountpoint1/mountpoint2
Type=ext4
[Install]
WantedBy=multi-user.target
設定を有効にする
# systemctl daemon-reload
# systemctl enable mountpoint1.mount
# systemctl enable mountpoint1-mountpoint2.mount
OSを再起動する
Where= に指定しているマウントポイントとUnitファイルの名前を同じにしなくては
いけないというルールがあるものの、2番目の例のようにマウントポイントに / が入っ
ている場合にどのように記載するかは man には書かれていない。
これは systemd generatorが作ったunitファイル(/run/systemd/generatorの下)
を見ていた時に / は - となることがわかった。
別な解決方法としては、2番目にマウントするファイルシステムをautomount に
することで、マウントするタイミングを後ろにずらすことができる。
(x-systemd.automount でautomount してもtimeoutはしないので、マウントした状態が
継続する)
/dev/sdb /mountpoint1 ext4 defaults 1 1
/dev/sdc /mountpoint1/mountpoint2 ext4 noauto,x-systemd.automount 1 1
参考
systemd.mount(5)
systemd.automount(5)
変更履歴
12月16日:初版
12月16日: [Install] section を追加