저는 Arch가 있는 노트북에 NFS 파티션을 자동으로 마운트하기 위해 systemd를 사용하고 있습니다.
질문:
돌핀이 종료 시 NFS 공유 폴더를 열고 네트워크를 변경하면 다음에 시작할 때 열리지 않습니다.
zsh 및 기타 소프트웨어에서도 동일한 일이 발생하는 경우가 있습니다.
이 문제는 평소 네트워크가 아닌 다른 네트워크에 연결되어 있고 VPN을 사용하지 않거나 네트워크에 전혀 연결되지 않은 경우에만 발생합니다. 내 시스템이 NFS 서버에 액세스할 수 있는 한 모든 것이 원활하게 실행됩니다.
현재 해결 방법:
현재 저는 자동 설치 단위를 중지하고 애플리케이션을 다시 시작하여 이 문제를 해결하고 있습니다.
관련 유닛 파일은 다음과 같습니다.
/etc/systemd/system/pool1.automount
콘텐츠:
[Unit]
Description=Automount NFS pool1
Requires=NetworkManager.service
After=network-online.target
[Automount]
Where=/pool1
TimeoutIdleSec=10min
[Install]
WantedBy=multi-user.target
/etc/systemd/system/pool1.mount
콘텐츠:
[Unit]
Description=Mount NFS pool1
[Mount]
What=192.168.1.5:/pool1
Where=/pool1
Type=nfs
Options=soft,async
공유가 있는 경우에만 공유를 마운트하도록 systemd에 지시하는 옵션이 있다고 확신하지만 이에 대한 정보를 찾지 못했습니다.
NFS 서버가 없는 경우에도 지연 없이 다양한 네트워크를 원활하게 처리할 수 있는 솔루션을 찾고 있습니다.
고쳐 쓰다
TimeoutSec=5
해당 섹션에 추가했는데 [Mount]
, 유일한 차이점은 이제 돌고래가 5초 후에 포기하고 스스로 닫힌다는 것입니다.
답변1
문제를 재현할 수 있습니다. 여러 가지 문제가 있는 것으로 보입니다. NFS 자체, systemd 및 네트워크 스택에 문제가 있습니다. 자동 마운트는 실제로 일시적인 조건을 위해 설계되지 않았습니다. 어쩌면 더 잘 작동하기 위해 해킹될 수도 있을지 모르겠습니다. 그래도...
무차별 대입 방법을 보여줍니다여기. 기본적으로 자동 마운트를 사용하지 말고 cron에서 서버를 지속적으로 핑하고 상태에 따라 마운트 또는 마운트 해제하세요.
내 실험의 또 다른 방법을 사용하여 networkd-dispatcher
설치 및 제거를 자동화할 수 있습니다. 이벤트 스크립트는 서버나 네트워크를 감지하고 적절한 조치를 취합니다.
설치를 위한 fstab(또는 원하는 방법)을 만듭니다. 최소한 "noauto"로 설정하세요.
에서 다음 스크립트를 만듭니다 /etc/networkd-dispatcher/routable.d/10-nfs-pool1
. 실행 파일을 표시하십시오.
#!/bin/sh
if ping -q -c1 nfs-server >/dev/null; then
mount /pool1
else
umount -f -l /pool1
fi
이제 이 파일을 off.d 및 no-carrier.d에 복사하세요.
ln -s ../routable.d/10-nfs-pool1 /etc/networkd-dispatcher/off.d/
ln -s ../routable.d/10-nfs-pool1 /etc/networkd-dispatcher/no-carrier.d/
불행하게도 위의 두 방법 모두 사용하지 않을 때에도 설치를 활성 상태로 유지합니다. 자동 마운트의 문제점은 마운트 관리를 수동으로 시작하면 자동 마운트가 비활성화된다는 것입니다. 자동 마운트에 사용할 수 있는 기능이 더 많은 것 같지만 이해가 안 될 수도 있습니다.