설치 단위 중 하나에 `Before=local-fs.target`이 누락된 이유는 무엇입니까?

설치 단위 중 하나에 `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.target After=에 대한 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 옵션 참조) 유형의 종속성을 생성합니다.

이것은 데비안 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

관련 정보