インストールユニットの1つに `Before = local-fs.target`がないのはなぜですか?

インストールユニットの1つに `Before = local-fs.target`がないのはなぜですか?
$ systemctl show -p Before /home/.shared-separate
Before=umount.target

$ systemctl show -p Before /data
Before=umount.target local-fs.target

取り付けユニットが/home/.shared-separate欠けているのはなぜですかBefore=local-fs.target?これは私が期待したものではありませんman systemd.mount-

DefaultDependencies=yes「[Unit]」セクション(デフォルト)に、インストール単位にいくつかの追加の依存関係を追加しました。ローカルファイルシステムを参照するマウントデバイスは、自動的 After=に依存関係を取得しますlocal-fs-pre.target。ネットワークマウントデバイスは自動的にnetwork.targetとnetwork-online.targetAfter=へのremote-fs-pre.target依存関係を取得します。後者の場合、Wants= ユニットも追加されました。ローカルおよびネットワークファイルシステムを参照するマウントデバイスは、ファイルシステムタイプの仕様によって区別されます。場合によっては、これだけでは不十分です(たとえば、iSCSIなどのネットワークブロックデバイスベースのマウント)。この場合、_netdevデバイスのマウントオプション文字列にそれを追加して、systemdを強制的にデバイスがネットワークマウントとして処理されるようにすることができます。インストールされているデバイス(ローカルでもネットワークでも)も自動的に取得され、開かれてシャットダウン中にBefore=停止します。Conflicts=umount.target

...

/etc/fstab を読むと、systemd はマウントポイントが依存関係を生成する方法に影響するいくつかの特別なマウントオプションを理解します。 systemdは、ファイルシステムがローカルであるかリモートであるかに応じて、local-fs.targetまたはremote-fs.targetでWants =またはRequires(以下のnofailオプションを参照)タイプの依存関係を生成します。

これはDebian 8にあります。システムバージョンは232-25+deb9u6

これは望ましくないようです。終了中にコンソールとディレクトリにログインすると、時々アンインストール/home/.shared-separateが失敗するようです。これは、systemdがインストールを停止しようとする前にセッションが停止することを保証する順次依存関係がないことを意味するためです。

$ journalctl -u /home/.shared-separate -b -1
Jan 06 21:26:59 drystone systemd[1]: Mounting /home/.shared-separate...
Jan 06 21:26:59 drystone systemd[1]: Mounted /home/.shared-separate.
Jan 06 21:28:18 drystone systemd[1]: Unmounting /home/.shared-separate...
Jan 06 21:28:18 drystone systemd[1]: home-.shared\x2dseparate.mount: Mount process exited, code=exited status=32
Jan 06 21:28:18 drystone systemd[1]: Failed unmounting /home/.shared-separate.

systemd自体は、起動中に警告や通知メッセージを記録しません。閉じるときの注意事項は次のとおりです。

journalctl -p notice -u init.scope
...
-- Reboot --
Jan 06 21:28:18 drystone systemd[1]: home-.shared\x2dseparate.mount: Mount process exited, code=exited status=32
Jan 06 21:28:18 drystone systemd[1]: Failed unmounting /home/.shared-separate.
Jan 06 21:28:18 drystone systemd[1]: Requested transaction contradicts existing jobs: Transaction is destructive.
Jan 06 21:28:18 drystone systemd[1]: systemd-coredump.socket: Failed to queue service startup job (Maybe the service file is missing or not a non-template unit?): Transaction is destructive.
Jan 06 21:28:18 drystone systemd[1]: systemd-coredump.socket: Unit entered failed state.
Jan 06 21:28:21 drystone systemd[1]: Failed to propagate agent release message: Transport endpoint is not connected
Jan 06 21:28:21 drystone systemd[1]: Failed to propagate agent release message: Transport endpoint is not connected
Jan 06 21:28:21 drystone systemd[1]: dev-disk-by\x2duuid-642a335b\x2da00a\x2d4f63\x2d9a36\x2dd689b0d15099.swap: Swap process exited, code=exited status=255
Jan 06 21:28:21 drystone systemd[1]: dev-disk-by\x2duuid-642a335b\x2da00a\x2d4f63\x2d9a36\x2dd689b0d15099.swap: Unit entered failed state.
Jan 06 21:28:21 drystone systemd[1]: Shutting down.
-- Reboot --
...

coredumpが発生するため、シャットダウン中にsystemd-coredumpを起動しようとすると、gnome-sessionの一部で発生します。明らかに、これは私がインストールしたデバイスがチェックされるという事実とは何の関係もありません。今後終了するとディスプレイが失われます Before=local-fs.target

Jan 06 21:15:58 drystone kernel: gnome-session-f[14384]: segfault at 0 ip 00007f30cf45de19 sp 00007ffd77e4bd50 error 4 in libgtk-3.so.0.2200.11[7f30cf17b000+700000]

どちらのインストール方法も定義されています/etc/fstab。両方のマウントにオプションはありません_netdev。しかし、ユニットファイルを見ると違いがわかります。

# Extract from /etc/fstab :
UUID=8bf8198a-02d4-450b-a4e7-461194aff2ec /data ext4 nosuid,nodev,errors=remount-ro 0 0
/home/.shared-separate-internal /home/.shared-separate fuse.bindfs nofail,allow_other,force-group=jenkins-photos,perms=g+rwX

$ systemctl cat /home/.shared-separate
# /run/systemd/generator/home-.shared\x2dseparate.mount
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)

[Mount]
What=/home/.shared-separate-internal
Where=/home/.shared-separate
Type=fuse.bindfs
Options=nofail,allow_other,force-group=jenkins-photos,perms=g+rwX

$ systemctl cat /data
# /run/systemd/generator/data.mount
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target

[Mount]
What=/dev/disk/by-uuid/8bf8198a-02d4-450b-a4e7-461194aff2ec
Where=/data
Type=ext4
Options=nosuid,nodev,errors=remount-ro

ベストアンサー1

これはオプションによるものですnofail。同じmanページから読んでください:-).

nofail

を使用すると、nofailこのマウントはlocal-fs.targetまたはremote-fs.targetでのみ必要ですが、必須ではありません。さらに、設置装置は、これらの対象装置の前に注文されない。これは、デバイスがインストールされるのを待たずにマウントポイントが正常にマウントされているかどうかに関係なく、起動が続行されることを意味します。


私はArch Wiki(または他の場所)で間違っているか古いと思われる次の情報を読んだので、その逆を期待していたようです。

オプションはオプションnofailと最もよくx-systemd.device-timeout結合されます。これは、デフォルトのデバイスタイムアウトが90秒であるため、切断された外部デバイスはタイムアウトを再設定しないnofail限り(図を参照)、起動時間を90秒だけ長くするためです。タイムアウトを0に設定するとタイムアウトが無限に発生しますのでご注意ください。

https://wiki.archlinux.org/index.php/Fstab#External_devices

おすすめ記事