システムの起動後(を使用してsystemd
)CIFSデバイスをマウントしようとしましたが、ネットワークが構築される前にシステムがマウントを試みて失敗しました。
システムにログインした後に使用できますsudo mount -a
。
Archにネットワークが利用できるまで待つとどうすればいいですか?
答え1
_netdev
インストールオプションを追加すれ/etc/fstab
ば十分です。
ローカルおよびネットワークファイルシステムを参照するマウントデバイスは、ファイルシステムタイプの仕様によって区別されます。場合によっては、これだけでは不十分です(たとえば、iSCSIなどのネットワークブロックデバイスベースのマウント)。この場合、 _netdev をデバイスのマウントオプション文字列に追加して、systemd を強制的にデバイスがネットワークマウントとして処理できるようにします。
systemd
マウントアイテムと他のデバイス間の明示的な逐次依存関係もサポートされています。x-systemd.after=network-online.target
_netdevが十分でない場合は、マウントオプションを追加すると機能します。
バラよりsystemd インストールデバイスのドキュメント詳細については。
答え2
その項目_netdev
に追加してください。/etc/fstab
"mount(8)" のマニュアルページから:
_netdevファイルシステムは、ネットワークアクセスが必要なデバイスに常駐します(システムでネットワーキングが有効になる前にシステムがこれらのファイルシステムをマウントするのを防ぐために使用されます)。
答え3
少しハッキング的ですが、WINS / DNSがまだ実行されていないため、すべての_netdevおよびx-systemdオプションは役に立ちません。
ルートcrontabエントリから始めました。
@reboot /usr/bin/mount -a
これは起動プロセスの後半に実行されます。
したがって、systemdが最初にfstabで定義されたCIFSマウントのマウントに失敗した場合でも、後でmount -a
aが再実行され、今回はマウントが成功します。
答え4
動作する場合と動作しない可能性があるシステムの前提条件と従来のオプションに対抗するのではなく、サービスとマウント対象をそれに依存させてください。
私のSMB共有は192.168.1.2でマウントされました。状況に合わせて変更してください。
# /etc/systemd/system/wait-for-ping.service
[Unit]
Description=Blocks until it successfully pings 192.168.1.2
After=network-online.target
[Service]
ExecStartPre=/usr/bin/bash -c "while ! ping -c1 192.168.1.2; do sleep 1; done"
ExecStart=/usr/bin/bash -c "echo good to go"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
以下を介してサービスを有効にします。
sudo systemctl daemon-reload
sudo systemctl enable --now wait-for-ping.service
次に、fstab を次のように編集して、最後のマウントオプションとして含めます。
x-systemd.after=wait-for-ping.service
再実行すると、インストール先systemctl daemon-reload
に正しいオプションが設定されていることを確認できます。私のマウントターゲットはです/mnt/media
。作成される予定mnt-media.mount
なので、次のようにします。
systemctl cat mnt-media.mount
タイトルは次のとおりです。
# Automatically generated by systemd-fstab-generator
[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
After=wait-for-ping.service
# ... rest of file follows ...
コンピュータを再起動すると、正常なpingを待つインストールを見つけることができます。