Добрый вечер. Есть в локальной сети NFS-сервер, есть ноут с арчем (и systemd), хочу сделать так, чтобы при подключении к домашней wi-fi сети подключалась NFS.
Прописал монтирование в /etc/NetworkManager/dispatcher.d/01-nfs :
#!/bin/bash
INTERFACE=$1
ACTION=$2
MOUNT_PATH="/home/stormchild/public"
MNT_ARGS="rw,noatime,noexec,nosuid,tcp,async,rsize=32768,wsize=32768,intr,nolock,soft,noauto,_netdev"
SERVERIP="192.168.1.3"
HOME_NETWORK_UNAVAILABLE=`ping $SERVERIP -c 1 2>&1 | grep -i "unreachable" | wc -l`
function mount_scserver {
mount -t nfs $SERVERIP:/m/public $MOUNT_PATH -o $MNT_ARGS
}
function umount_scserver {
umount -fl $MOUNT_PATH
}
case "$ACTION" in
up)
if [ "$HOME_NETWORK_UNAVAILABLE" == "0" ]; then
SRV_MOUNTED=`grep scsrv /etc/mtab`
if [ -z "$SRV_MOUNTED" ]; then
mount_scserver
fi
fi
;;
down)
if [ "$HOME_NETWORK_UNAVAILABLE" == "1" ]; then
SRV_MOUNTED=`grep scsrv /etc/mtab | wc -l`
if [ -n "$SRV_MOUNTED" ]; then
umount_scserver
fi
fi
;;
esac
Проверка по пингу выглядит идиотской, но пока не придумал ничего лучше.
Всё хорошо до момента, пока не теряется связь с сервером. Насколько я понимаю, в таком случае доступ к отпавшему ресурсу блокируется и его нельзя даже отмонтировать, не прибив использующие его процессы. Особенно забавно получается при выключении ноута, если открыт файл из nfs: NetworkManager вырубается успешно, а отмонтировать у системы не получается из-за заблокированного ресурса... Хотелось бы, чтобы по истечению какого-то таймаута недоступный сетевой ресурс сам отмонтировался. Как об этом сообщить systemd ?