systemctl은 시작 시 전체 공유 경로를 사용하지 않습니다.

systemctl은 시작 시 전체 공유 경로를 사용하지 않습니다.

내 홈 라우터에서 실행 중인 삼바 서버가 있고 시스템 시작 시 해당 서버에 연결하려고 합니다.

중요한 것은 라우터가 자동으로 공유 이름을 설정해 주는데 그 이름은 다음과 같습니다.foo (at Elements)

Linux 서버에 삼바 공유를 마운트하기 위해 fstab 항목을 추가했는데 마운트 명령을 직접 실행하면 제대로 작동합니다.sudo mount /media/sambashare

fstab 항목은 다음과 같습니다.

//192.168.50.1/andy\040\050at\040Elements\051  /media/samba_share  cifs  credentials=/etc/samba/user,noexec,vers=2.0,gid=1002,uid=114,_netdev,x-systemd.requires=network.target 0 0

그러나 시스템이 부팅될 때마다 드라이브가 마운트되지 않습니다.

마침내 문제를 발견했습니다.

수동으로 실행하면 mount다음과 같은 Journalctl 항목을 찾을 수 있습니다.

Jan 01 21:56:59 media-server sudo[5624]:   andymc : TTY=pts/0 ; PWD=/home/andymc ; USER=root ; COMMAND=/usr/bin/mount /media/samba_share
Jan 01 21:56:59 media-server kernel: CIFS: Attempting to mount \\192.168.50.1\andy (at Elements)

그러나 시스템 시작 시 로그 항목이 약간 다르게 보입니다.

Jan 01 21:51:03 media-server systemd[1]: Mounting /media/samba_share...
Jan 01 21:51:03 media-server kernel: CIFS: Attempting to mount \\192.168.50.1\andy
Jan 01 21:51:03 media-server kernel: CIFS: VFS: cifs_mount failed w/return code = -2
Jan 01 21:51:03 media-server mount[1250]: mount error(2): No such file or directory
Jan 01 21:51:03 media-server mount[1250]: Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
Jan 01 21:51:03 media-server systemd[1]: media-samba_share.mount: Mount process exited, code=exited, status=32/n/a
Jan 01 21:51:03 media-server systemd[1]: media-samba_share.mount: Failed with result 'exit-code'.
Jan 01 21:51:03 media-server systemd[1]: Failed to mount /media/samba_share.

at Elements두 번째 로그 항목에는 탑재하려는 공유 이름의 비트가 포함되지 않습니다 . 이것이 실패의 원인이라고 확신하지만 이를 방지하는 방법을 모르겠습니다.

어떤 아이디어가 있나요?

답변1

Systemd는 내용을 직접 사용하지 않지만 fstab 파일의 비어 있지 않고 주석이 아닌 각 줄을 /etc/fstab실행하여 마운트 유닛을 빌드합니다. systemd-fstab-generator(자세한 내용은 , 및 을 참조하십시오 man 8 systemd-fstab-generator. man 5 systemd.mount)man 7 systemd.generator

이러한 메시지는 이스케이프된 공백과 괄호가 프로세스에서 분명히 유지되지 않으며 공유 이름이 끝에서 잘린다는 것을 나타냅니다 \\192.168.50.1\andy.

프로세스로 인해 문제가 발생했는지 확인하려면 다음과 같이 공유 라인을 systemd-fstab-generator주석 처리 /etc/fstab하고 이에 대한 마운트 유닛을 직접 작성할 수 있습니다 /etc/systemd/system/media-samba_share.mount.

[Unit]
Documentation=man:fstab(5)
After=network.target
Requires=network.target
Before=remote-fs.target

[Mount]
What=//192.168.50.1/andy\x20\x28at\x20Elements\x29
# if the above won't work, try this form:
# What=//192.168.50.1/andy (at Elements)
Where=/media/samba_share
Type=cifs
Options=credentials=/etc/samba/user,noexec,vers=2.0,gid=1002,uid=114

[Install]
WantedBy=remote-fs.target

systemd 는 man systemd.unit에 설명된 대로 전통적인 8진수 대신 16진수 기반 문자 이스케이프를 사용합니다.

실제로 이와 같이 사용자 정의 마운트 유닛을 작성할 때 이스케이프를 전혀 수행하지 않을 수도 있습니다. 16진수 이스케이프가 작동하지 않으면 이 방법을 시도해 보세요.

마운트 유닛 파일을 생성한 후 실행하여 systemctl daemon-reload변경 사항을 적용한 후 실행하여 systemctl start media-samba_share.mount테스트합니다. 지금 작동하면 시작 시 작동해야 합니다.

관련 정보