Da Wikipedia:
Network File System (NFS) é um protocolo de sistema de ficheiros distribuído originalmente desenvolvido pela Sun Microsystems em 1984, permitindo a um utilizador num computador cliente aceder a ficheiros através de uma rede de uma forma semelhante à forma como se acede ao armazenamento local.
- NFS não é encriptado. Túnel NFS através de um protocolo encriptado como Kerberos ou VPN (seguro) quando se lida com dados sensíveis.
- Unlike Samba, NFS não tem qualquer autenticação de utilizador por defeito, o acesso do cliente é restringido pelo seu endereço IP/nome de utilizador.
- NFS espera que os IDs do utilizador e/ou grupo de utilizadores sejam os mesmos tanto no cliente como no servidor. Habilitar NFSv4 idmapping ou anular o UID/GID manualmente usando
anonuid
anongid
juntamente comall_squash
em/etc/exports
.
Instalação
Cuja cliente e servidor requerem apenas a instalação do pacote nfs-utils.
É altamente recomendável utilizar um daemon de sincronização de tempo para manter os relógios cliente/servidor em sincronia. Sem relógios precisos em todos os nós, NFS pode introduzir atrasos indesejados.
Configuração
Servidor
Opções de configuração global são definidas em /etc/nfs.conf
. Os utilizadores de configurações simples não devem precisar de editar este ficheiro.
O servidor NFS precisa de uma lista de exportações (ver exports(5) para detalhes) que são definidas em /etc/exports
ou /etc/exports.d/*.exports
. Estas quotas são relativas à chamada raiz NFS. Uma boa prática de segurança é definir uma raiz NFS numa árvore de directório discreta que irá manter os utilizadores limitados a esse ponto de montagem. As montagens Bind são utilizadas para ligar o ponto de montagem da partilha ao directório real noutro local do sistema de ficheiros.
Considere-se este exemplo em que:
- A raiz NFS é
/srv/nfs
. - A exportação é
/srv/nfs/music
através de uma montagem bind para o alvo real/mnt/music
.
# mkdir -p /srv/nfs/music /mnt/music# mount --bind /mnt/music /srv/nfs/music
Para tornar a montagem de bind persistente através de reboots, adicione-a à fstab:
/etc/fstab
/mnt/music /srv/nfs/music none bind 0 0
Adicionar directórios a serem partilhados e limitá-los a uma gama de endereços através de um CIDR ou nome(s) da(s) máquina(s) cliente que será(ão) permitido(s) montá-los em /etc/exports
, e.g.:
/etc/exports
/srv/nfs 192.168.1.0/24(rw,sync,crossmnt,fsid=0)/srv/nfs/music 192.168.1.0/24(rw,sync)/srv/nfs/home 192.168.1.0/24(rw,sync,nohide)/srv/nfs/public 192.168.1.0/24(ro,all_squash,inseguro) desktop(rw,sync,all_squash,anonuid=99,anongid=99) # map to user/group - in this case nobody
- A opção
crossmnt
torna possível aos clientes acederem a todos os sistemas de ficheiros montados num sistema de ficheiros marcado comcrossmnt
e os clientes não serão obrigados a montar cada exportação de criança separadamente. Note-se que isto pode não ser desejável se uma criança for partilhada com uma gama diferente de endereços. - Em vez de
crossmnt
, também se pode usar a opçãonohide
nas exportações de crianças para que possam ser montadas automaticamente quando um cliente monta a exportação de raiz. Sendo diferente decrossmnt
nohide
ainda respeita as gamas de endereços de exportação de crianças. - Utilizar um asterisco (*) para permitir o acesso a partir de qualquer interface.
De notar que a modificação de /etc/exports
enquanto o servidor estiver a funcionar exigirá uma reexportação para que as alterações produzam efeito:
# exportfs -arv
Para ver o estado actual das exportações carregadas com mais detalhe, utilizar:
# exportfs -v
Para mais informações sobre todas as opções disponíveis ver exports(5).
fsid=1
é necessária.Iniciar o servidor
Iniciar e activar nfs-server.service
.
rpc-gssd.service
) irá esperar até que o grupo gerador de números aleatórios seja suficientemente inicializado, possivelmente atrasando o processo de arranque. Isto é particularmente prevalecente em servidores sem cabeça. É altamente recomendado povoar o pool de entropia usando um utilitário como o Rng-tools (se o TPM for suportado) ou Haveged nestes cenários.zfs-share.service
. Sem isto, as quotas ZFS deixarão de ser exportadas após uma reinicialização. Ver ZFS#NFS.Restrição de NFS a interfaces/IPs
Por defeito, começando nfs-server.service
ouvirá ligações em todas as interfaces de rede, independentemente de /etc/exports
. Isto pode ser alterado definindo quais os IPs e/ou nomes de hosts a ouvir em.
/etc/nfs.conf
host=192.168.1.123# Em alternativa, usar o hostname.# host=myhostname
Restart nfs-server.service
para aplicar as alterações imediatamente.
Configuração do firewall
Para permitir o acesso através de um firewall, portas TCP e UDP 111
2049
, e 20048
pode ter de ser aberto quando se utiliza a configuração por defeito; usar rpcinfo -p
para examinar as portas exactas em uso no servidor:
$ rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 3 tcp 2049 nfs_acl
quando utilizar NFSv4, certifique-se de que a porta TCP 2049
está aberta. Nenhuma outra abertura de porta deve ser exigida:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
Ao utilizar uma versão NFS mais antiga, certifique-se de que outras portas estão abertas:
# iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT# iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT# iptables -A INPUT -p tcp -m tcp --dport 20048 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 20048 -j ACCEPT
Para ter esta carga de configuração em cada arranque do sistema, editar /etc/iptables/iptables.rules
para incluir as seguintes linhas:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 111 -j ACCEPT-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT-A INPUT -p tcp -m tcp --dport 20048 -j ACCEPT-A INPUT -p udp -m udp --dport 111 -j ACCEPT-A INPUT -p udp -m udp --dport 2049 -j ACCEPT-A INPUT -p udp -m udp --dport 20048 -j ACCEPT
Os comandos anteriores podem ser guardados através da execução:
# iptables-save > /etc/iptables/iptables.rules
Se utilizar NFSv3 e as portas estáticas acima listadas para rpc.statd
e lockd
as seguintes portas podem também precisar de ser adicionadas à configuração:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 32765 -j ACCEPT-A INPUT -p tcp -m tcp --dport 32803 -j ACCEPT-A INPUT -p udp -m udp -dp --dport 32765 -j ACCEPT-A INPUT -p udp -m udp --dport 32803 -j ACCEPT
p>Para aplicar alterações, Reiniciariptables.service
.
Enabling NFSv4 idmapping
Este artigo ou secção precisa de expansão.
- NFSv4 idmapping não funciona com a opção padrão
sec=sys
mount option. - NFSv4 idmapping precisa de ser activado tanto no cliente como no servidor.
- Outra opção é certificar-se de que as IDs do utilizador e do grupo (UID e GID) coincidem tanto no cliente como no servidor.
- Habilitar/iniciar
nfs-idmapd.service
não deve ser necessário pois foi substituído por um novo id mapper:
# dmesg | grep id_resolver
NFS: Registo do tipo de chave id_resolver tipo de chave id_resolver registada
O protocolo NFSv4 representa os valores UID e GID do sistema local no fio como cordas do formulário user@domain
. O processo de tradução de UID para string e string para UID é referido como mapeamento de ID. Ver nfsidmap(8) para detalhes.
Even embora idmapd possa estar em execução, pode não estar totalmente activado. Se /sys/module/nfs/parameters/nfs4_disable_idmapping
ou /sys/module/nfsd/parameters/nfs4_disable_idmapping
retorna Y
num cliente/servidor, activá-lo por:
nfs4
e nfsd
precisam de ser carregados (respectivamente) para que os seguintes caminhos estejam disponíveis.No cliente:
# echo "N" | tee /sys/module/nfs/parameters/nfs4_disable_idmapping
No servidor:
# echo "N" | tee /sys/module/nfsd/parameters/nfs4_disable_idmapping
Configurar como opção de módulo para tornar esta alteração permanente, i.e.:
/etc/modprobe.d/nfsd.conf
opções nfs nfs4_disable_idmapping=0opções nfsd nfs4_disable_idmapping=0
Para utilizar plenamente o idmapping, certifique-se de que o domínio está configurado em /etc/idmapd.conf
tanto no servidor como no cliente:
/etc/idmapd.conf
# O seguinte deve ser definido para o nome de domínio local NFSv4# O padrão é o nome de domínio DNS do anfitrião.Domínio = domain.tld
Ver para detalhes.
Cliente
Os utilizadores que pretendam utilizar NFS4 com Kerberos precisam de iniciar e activar nfs-client.target
.
Montagem manual
Para NFSv3 usar este comando para mostrar os sistemas de ficheiros exportados do servidor:
$ showmount -e servername
Para NFSv4 montar o directório NFS raiz e procurar por montagens disponíveis:
# mount server:/ /mountpoint/on/client
Então montar omitindo a raiz de exportação do NFS do servidor:
# mount -t nfs -o vers=4 servername:/music /mountpoint/on/client
Se a montagem falhar tente incluir a raiz de exportação do servidor (necessária para Debian/RHEL/SLES, algumas distribuições precisam de -t nfs4
em vez de -t nfs
):
# mount -t nfs -o vers=4 servername:/srv/nfs/music /mountpoint/on/client
Montar usando /etc/fstab
Usar fstab é útil para um servidor que está sempre ligado, e as partilhas NFS estão disponíveis sempre que o cliente arranca. Editar /etc/fstab
ficheiro, e adicionar uma linha apropriada reflectindo a configuração. Mais uma vez, a raiz de exportação do NFS do servidor é omitida.
/etc/fstab
servername:/music /mountpoint/on/client nfs defaults,timeo=900,retrans=5,_netdev0 0
algumas opções adicionais de montagem a considerar:
tamanho rsize e wsize O valorrsize
é o número de bytes utilizados na leitura a partir do servidor. O valor
wsize
é o número de bytes utilizados quando se escreve no servidor. Por defeito, se estas opções não forem especificadas, o cliente e o servidor negociam os maiores valores que ambos podem suportar (ver nfs(5) para detalhes). Depois de alterar estes valores, recomenda-se testar o desempenho (ver #Performance tuning). soft ou hard Determina o comportamento de recuperação do cliente NFS após uma requisição NFS vezes fora. Se nenhuma das opções for especificada (ou se a opçãohard
for especificada), os pedidos de NFS são novamente testados indefinidamente. Se a opçãosoft
for especificada, então o cliente NFS falha um pedido NFS após retransmissões terem sido enviadas, fazendo com que o cliente NFS devolva um erro à aplicação de chamada.
soft
timeout pode causar corrupção silenciosa de dados em certos casos. Como tal, utilizar a opção soft
apenas quando a resposta do cliente for mais importante do que a integridade dos dados. Usando NFS sobre TCP ou aumentando o valor da opção retrans
pode mitigar alguns dos riscos de usar a opção soft
opção.timeo O valortimeo
é a quantidade de tempo, em décimos de segundo, para esperar antes de reenviar uma transmissão após um timeout RPC. O valor por defeito para NFS sobre TCP é 600 (60 segundos). Após o primeiro timeout, o valor do timeout é duplicado para cada nova tentativa durante um máximo de 60 segundos ou até que ocorra um timeout maior. Se a ligação a um servidor lento ou através de uma rede ocupada, pode ser alcançada uma melhor estabilidade aumentando este valor de timeout. retrans O número de vezes que o cliente NFS volta a tentar um pedido antes de tentar uma nova acção de recuperação. Se a opçãoretrans
não for especificada, o cliente NFS tenta cada pedido três vezes. O cliente NFS gera uma mensagem de “servidor não responde” depois de retransmitir as tentativas, depois tenta uma nova recuperação (dependendo se a opção de montagem dura está em vigor). A opção
fs_passno
) para um valor não zero pode levar a um comportamento inesperado, por exemplo, fica pendurado quando o sistemad automount espera por uma verificação que nunca irá acontecer.Montar usando /etc/fstab com systemd
Outro método é usar o x-systemd.opção de montagem automática que monta o sistema de ficheiros no acesso:
/etc/fstab
servername:/home /mountpoint/on/client nfs _netdev,noauto,x-systemd.autount,x-systemd.mount-timeout=10,timeo=14,x-systemd.idle-timeout=1min 0 0
Para tornar o systemd consciente das alterações ao fstab, recarregar systemd e reiniciar .
- O
noauto
opção de montagem não montará a partilha NFS até ser acedida: useauto
para que esteja disponível imediatamente.
Se tiver algum problema com a montagem falhar devido ao facto de a rede não estar disponível, activeNetworkManager-wait-online.service
. Irá assegurar quenetwork.target
tem todas as ligações disponíveis antes de estar activa. - A opção
users
de montagem permitiria montagens pelo utilizador, mas esteja ciente de que implica outras opções comonoexec
por exemplo. - A opção
x-systemd.idle-timeout=1min
desmonta automaticamente a partilha NFS após 1 minuto de não utilização. Bom para computadores portáteis que possam desconectar-se subitamente da rede. - Se o desligamento/inicialização for demasiado longo devido ao NFS, activar
NetworkManager-wait-online.service
para garantir que o NetworkManager não sai antes dos volumes NFS serem desmontados. - Não adicionar a opção
x-systemd.requires=network-online.target
de montagem, pois isto pode levar a ciclos de encomenda dentro do sistemad . systemd adiciona a opçãonetwork-online.target
dependência à unidade para_netdev
montar automaticamente. - Utilizando a opção
nocto
pode melhorar o desempenho para montagens só de leitura, mas só deve ser utilizada se os dados no servidor mudarem apenas ocasionalmente.
As systemd unit
Criar um novo .mount
ficheiro dentro /etc/systemd/system
, por exemplo mnt-myshare.mount
. Ver systemd.mount(5) para detalhes.
mnt-myshare.mount
só pode ser utilizado se for montar a acção sob /mnt/myshare
. Caso contrário, poderá ocorrer o seguinte erro: systemd: mnt-myshare.mount: Where= setting does not match unit name. Refusing.
.What=
caminho para a acção
Where=
caminho para montar a acção
Options=
opções de montagem da acção
- Unidades de montagem de rede adquirem automaticamente
After
dependências deremote-fs-pre.target
network.target
enetwork-online.target
, e ganhar umaBefore
dependência deremote-fs.target
a menos quenofail
a opção de montagem esteja definida. Para esta última umaWants
unidade também é adicionada. - Append
noauto
aOptions
impedindo automaticamente a montagem durante o arranque (a menos que seja puxada por alguma outra unidade). - Se desejar utilizar um nome de anfitrião para o servidor que deseja partilhar (em vez de um endereço IP), adicione
nss-lookup.target
aAfter
. Isto pode evitar erros de montagem no momento do arranque que não surjam ao testar a unidade.
/etc/systemd/systemd/mnt-myshare.mount
Description=Mount Share at bootWhat=172.16.24.192:/mnt/myshareOnde=/mnt/myshareOptions=Type=nfsTimeoutSec=30WantedBy=multi-user.target
ForceUnmount=true
a
, permitindo que a partilha seja (força-)desmontada. para utilizar mnt-myshare.mount
, iniciar a unidade e permitir a sua execução no arranque do sistema.
automount
Para montar automaticamente uma acção, pode-se utilizar a seguinte unidade de montagem automática:
/etc/systemd/systemd/mnt-myshare.automount
Description=Automount myshareWhere=/mnt/myshareWantedBy=multi-user.target
Disable/stop the mnt-myshare.mount
unit, and enable/start mnt-myshare.automount
to automount the share when the mount path is being accessed.
TimeoutIdleSec
para activar a auto desmontagem. Ver systemd.automount(5) para detalhes.Mount usando autofs
Utilizar autofs é útil quando várias máquinas querem ligar-se via NFS; podem ser tanto clientes como servidores. A razão pela qual este método é preferível ao anterior é que se o servidor for desligado, o cliente não cometerá erros por não ser capaz de encontrar acções NFS. Ver autofs#NFS network mounts para detalhes.
Tips and tricks
Performance tuning
Quando se utiliza NFS numa rede com um número significativo de clientes pode-se aumentar os threads NFS por defeito de 8 para 16 ou mesmo mais, dependendo dos requisitos do servidor/rede:
/etc/nfs.conf
threads=16
Pode ser necessário afinar o rsize
e wsize
opções de montagem para satisfazer os requisitos da configuração da rede.
Em núcleos recentes de linux (>2.6.18) o tamanho das operações de E/S permitido pelo servidor NFS (tamanho máximo do bloco por defeito) varia dependendo do tamanho da RAM, com um máximo de 1M (1048576 bytes), o tamanho máximo do bloco do servidor será utilizado mesmo que os clientes nfs necessitem de maiores rsize
e wsize
. Ver https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/5.8_Technical_Notes/Known_Issues-kernel.htmlIt é possível alterar o tamanho máximo por defeito do bloco permitido pelo servidor escrevendo para /proc/fs/nfsd/max_block_size
antes de iniciar o nfsd. Por exemplo, o seguinte comando restaura o iosize por defeito anterior de 32k:
# echo 32768 > /proc/fs/nfsd/max_block_size
Para tornar a alteração permanente, criar um ficheiro systemd-tmp:
/etc/tmpfiles.d/nfsd-block-size.conf
w /proc/fs/nfsd/max_block_size - - - - - 32768
para montar com o aumento rsize
e wsize
opções de montagem:
# mount -t nfs -o rsize=32768,wsize=32768,vers=4 servername:/srv/nfs/music /mountpoint/on/client
Furthermore, apesar da violação do protocolo NFS, a configuração async
em vez de sync
ou sync,no_wdelay
pode potencialmente alcançar um ganho de desempenho significativo, especialmente em discos de fiação. Configurar exportações com esta opção e depois executar exportfs -arv
para aplicar.
/etc/exports
/srv/nfs 192.168.1.0/24(rw,async,crossmnt,fsid=0)/srv/nfs/music 192.168.1.0/24(rw,async)
Automatic mount handling
Este truque é útil para acções NFS numa rede sem fios e/ou numa rede que pode não ser fiável. Se o host NFS se tornar inalcançável, a partilha NFS não será montada para evitar que o sistema fique pendurado ao utilizar a opção de montagem hard
.
Certifique-se de que os pontos de montagem NFS são correctamente indicados em fstab:
/etc/fstab
lithium:/mnt/data /mnt/data nfs noauto 0 0lithium:/var/cache/pacman /var/cache/pacmannfs noauto 0 0
- Utilizar hostnames em fstab para que isto funcione, não endereços IP.
- Para montar partilhas NFS com utilizadores não-root.
- O
noauto
opção de montagem diz ao systemd para não montar automaticamente as partilhas no arranque, caso contrário isto pode fazer com que o processo de arranque pare.
criar o auto_share
script que será usado pelo cron ou systemd/Timers para usar o ICMP ping para verificar se o host NFS é alcançável:
/usr/local/bin/auto_share
#!/bin/bashfunction net_umount { umount -l -f $1 &>/dev/null}function net_mount { mountpoint -q $1 ||| mount $1}NET_MOUNTS=$(sed -e '/^.*#/d' -e '/^.*:/!d' -e 's/\t/ /g' /etc/fstab | tr -s " ") | while IFS= read -r linedo SERVER=$(echo $line | cut -f1 -d":") MOUNT_POINT=$(echo $line | cut -f2 -d" ") # Verifique se o servidor já foi testado se }" =~ "${SERVER}" ]]; então # O servidor está em cima, certifique-se de que as acções estão montadas net_mount $MOUNT_POINT elif }" =~ "${SERVER}" ]; então # O servidor não pôde ser alcançado, desmonte o valor líquido da acção $MOUNT_POINT else # Verifique se o servidor está acessível ping -c 1 "${SERVER}". &>/dev/null if ; então server_notok}]=$SERVER # O servidor não pôde ser alcançado, desmontar a acção net_umount $MOUNT_POINT else server_ok}]=$SERVER # O servidor está em cima, certificar-se que a acção está montada net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
with:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
no auto_share
script acima.
Certifique-se de que o script é executável:
# chmod +x /usr/local/bin/auto_share
P>Configuração do script para executar cada X, nos exemplos abaixo isto é a cada minuto.
Cron
# crontab -e
* * * * /usr/local/bin/auto_share
systemd/Timers
/etc/systemd/system/auto_share.temporizador
Descrição=Participações NFS por minutoOnCalendar=*-*-* *:*:00WantedBy=timers.target
/etc/systemd/system/auto_share.service
Description=Automount NFS sharesDepois=syslog.target network.targetType=oneshotExecStart=/usr/local/bin/auto_shareWantedBy=multi-user.target
Finally, enable and start auto_share.timer
.
Usando um NetworkManager dispatcher
NetworkManager também pode ser configurado para executar um script sobre a alteração do estado da rede.
O método mais fácil para montar partilhas na alteração do estado da rede é a ligação simbólica do auto_share
script:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
No entanto, nesse caso particular a desmontagem só acontecerá depois da ligação de rede já ter sido desactivada, o que é impuro e pode resultar em efeitos como o congelamento de applets Plasma KDE.
O seguinte script desmonta com segurança as partilhas NFS antes da ligação de rede relevante ser desactivada, ouvindo para o pre-down
e vpn-pre-down
eventos, tornar o script executável:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Encontra a ligação UUID com "nmcli con show" no terminal.# Todos os tipos de ligação NetworkManager são suportados: sem fios, VPN, com fios...WANTED_CON_UUUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9 "if ]; then # Script parameter $1: NetworkManager connection name, not used # Script parameter $2: caso de evento enviado "$2" em "up") mount -a -t nfs4,nfs ;; "pre-down");& "vpn-pre-down") umount -l -a -t nfs4,nfs -f >/dev/null ;; esacfi
noauto
, remover esta opção de montagem ou usar auto
para permitir ao despachante gerir estas montagens.Criar uma ligação simbólica dentro /etc/NetworkManager/dispatcher.d/pre-down
para apanhar o pre-down
eventos:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Solução de problemas
Existe um artigo dedicado NFS/Solução de problemas.
Veja também
- Veja também Avahi, uma implementação Zeroconf que permite a descoberta automática de acções NFS.
li>HOWTO: Inicialização de rede sem disco NFS raiz li>Microsoft Services for Unix NFS Client infoli>NFS on Snow Leopardli>>http://chschneider.eu/linux/server/nfs.shtml/li>>li>Como fazer Sintonia e Optimização do Desempenho NFS Linuxli>Linux: Sintonizar o Desempenho NFS
\n’bprintf %s “$NET_MOUNTS” | while IFS= read -r linedo SERVER=$(echo $line | cut -f1 -d”:”) MOUNT_POINT=$(echo $line | cut -f2 -d” “) # Check if server already tested if }” =~ “${SERVER}” ]]; then # The server is up, make sure the share are mounted net_mount $MOUNT_POINT elif }” =~ “${SERVER}” ]]; then # The server could not be reached, unmount the share net_umount $MOUNT_POINT else # Check if the server is reachable ping -c 1 “${SERVER}” &>/dev/null if ; then server_notok}]=$SERVER # The server could not be reached, unmount the share net_umount $MOUNT_POINT else server_ok}]=$SERVER # The server is up, make sure the share are mounted net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
with:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
in the auto_share
script above.
Make sure the script is executable:
# chmod +x /usr/local/bin/auto_share
Next check configure the script to run every X, in the examples below this is every minute.
Cron
# crontab -e
* * * * * /usr/local/bin/auto_share
systemd/Timers
/etc/systemd/system/auto_share.timer
Description=Automount NFS shares every minuteOnCalendar=*-*-* *:*:00WantedBy=timers.target
/etc/systemd/system/auto_share.service
Description=Automount NFS sharesAfter=syslog.target network.targetType=oneshotExecStart=/usr/local/bin/auto_shareWantedBy=multi-user.target
Finally, enable and start auto_share.timer
.
Using a NetworkManager dispatcher
NetworkManager can also be configured to run a script on network status change.
The easiest method for mount shares on network status change is to symlink the auto_share
script:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
However, in that particular case unmounting will happen only after the network connection has already been disabled, which is unclean and may result in effects like freezing of KDE Plasma applets.
The following script safely unmounts the NFS shares before the relevant network connection is disabled by listening for the pre-down
and vpn-pre-down
events, make the script is executable:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Find the connection UUID with "nmcli con show" in terminal.# All NetworkManager connection types are supported: wireless, VPN, wired...WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"if ]; then # Script parameter $1: NetworkManager connection name, not used # Script parameter $2: dispatched event case "$2" in "up") mount -a -t nfs4,nfs ;; "pre-down");& "vpn-pre-down") umount -l -a -t nfs4,nfs -f >/dev/null ;; esacfi
noauto
option, remove this mount option or use auto
to allow the dispatcher to manage these mounts.Create a symlink inside /etc/NetworkManager/dispatcher.d/pre-down
to catch the pre-down
events:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Troubleshooting
There is a dedicated article NFS/Troubleshooting.
See also
- See also Avahi, a Zeroconf implementation which allows automatic discovery of NFS shares.
- HOWTO: Diskless network boot NFS root
- Microsoft Services for Unix NFS Client info
- NFS on Snow Leopard
- http://chschneider.eu/linux/server/nfs.shtml
- How to do Linux NFS Performance Tuning and Optimization
- Linux: Tune NFS Performance