시스템 시작 후( 을 사용하여 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을 기다리는 설치를 찾을 수 있습니다.