6
4

More than 1 year has passed since last update.

systemdでマウントする順序をコントロールする方法

Last updated at Posted at 2021-12-16

最近の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ファイルの書き方

/etc/systemd/system/mountpoint1.mount
[Unit]
Description=sakini-mount
Requires=tmp.mount
After=tmp.mount

[Mount]
Want=/dev/sdb
Where=/mountpoint1
Type=ext4

[Install]
WantedBy=multi-user.target
/etc/systemd/system/mountpoint1-mountpoint2.mount
[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 を追加

6
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4