NFS (Português)

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.

Nota:

  • 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 anonuidanongid juntamente com all_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:

  1. A raiz NFS é /srv/nfs.
  2. 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
Nota: Os sistemas de ficheiros ZFS requerem um manuseamento especial de montagem bindmounts, ver ZFS#Bind mount.

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

Tip:

  • A opção crossmnt torna possível aos clientes acederem a todos os sistemas de ficheiros montados num sistema de ficheiros marcado com crossmnt 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ção nohide nas exportações de crianças para que possam ser montadas automaticamente quando um cliente monta a exportação de raiz. Sendo diferente de crossmntnohide 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).

Dica: ip2cidr é uma ferramenta para converter um intervalo de IP para uma especificação CIDR correctamente estruturada.
Nota: Se a exportação alvo for um sistema de ficheiros tmpfs, a opção fsid=1 é necessária.

Iniciar o servidor

Iniciar e activar nfs-server.service.

Aviso: Uma forte dependência de servir NFS (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.
Nota: Se exportar acções ZFS, também start/enable 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 1112049, 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
Aviso: Este comando irá substituir a configuração actual do iptables iniciar com a configuração actual do iptables!

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.

Motivo: Falta de informação de pesquisa, exemplos de ligação estática, etc. (Discuss in Talk:NFS#)

Nota:

  • 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:

Nota: Os módulos do kernel 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
Nota: O nome do servidor precisa de ser um nome de anfitrião válido (não apenas o endereço IP). Caso contrário, a montagem da partilha remota será pendurada.

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
Nota: Consulte nfs(5) e mount(8) para mais opções de montagem.

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çãohardfor especificada), os pedidos de NFS são novamente testados indefinidamente. Se a opçãosoftfor 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.

Aviso: A 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çãoretransnã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_netdev diz ao sistema para esperar até que a rede esteja operacional antes de tentar montar a partilha – systemd assume isto para NFS.

Nota: Definir o sexto campo (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 .

Tip:

  • O noauto opção de montagem não montará a partilha NFS até ser acedida: use auto 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, active NetworkManager-wait-online.service. Irá assegurar que network.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 como noexec 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ção network-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.

Nota: Certifique-se que o nome do ficheiro corresponde ao ponto de montagem que pretende utilizar. Por exemplo, o nome da unidade 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

nota:

  • Unidades de montagem de rede adquirem automaticamente After dependências de remote-fs-pre.targetnetwork.target e network-online.target, e ganhar uma Before dependência de remote-fs.target a menos que nofail a opção de montagem esteja definida. Para esta última uma Wants unidade também é adicionada.
  • Append noauto a Options 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 a After. 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
Tip: No caso de um sistema inalcançável, anexar 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.

Tip: Anexe 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
Nota:

  • 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
Nota: Teste utilizando uma sonda TCP em vez de ICMP ping (o padrão é a porta tcp 2049 no NFS4) e depois substitua a linha:

# 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
Nota: Este script ignora montagens com a opção 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

Note: Test using a TCP probe instead of ICMP ping (default is tcp port 2049 in NFS4) then replace the line:

# 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
Note: This script ignores mounts with the 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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *