systemctlは起動時に共有パス全体を使用しません。

systemctlは起動時に共有パス全体を使用しません。

私のホームルーターで実行されているSambaサーバーがあり、システムの起動時にそのサーバーに接続しようとしています。

重要なのは、ルータが自動的に共有名を設定することです。その名前は次のとおりです。foo (at Elements)

LinuxサーバーにSamba共有をマウントするために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 Elements2番目のログエントリには、マウントする共有名のビットは含まれません。これが失敗の原因であると確信していますが、これを防ぐ方法がわかりません。

どんなアイデアがありますか?

答え1

Systemd は内容を直接使用しませんが、fstab ファイルの空ではなくコメントではなく各行を/etc/fstab実行してマウントユニットを構築します。systemd-fstab-generator(詳細は、およびを参照してくださいman 8 systemd-fstab-generatorman 5 systemd.mountman 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テストします。今すぐ動作する場合は、起動時に動作する必要があります。

関連情報