Nota: Este post está em rascunho. Eu sei que pode estar vago, mas alguns poderão notar que já é muito útil do jeito que está. Se precisar de um maior esclarecimento deixe um comentário porque eu irei preenchendo lacunas aos poucos.
NFS (Network File System – Por um tempo eu jurava que significava Network File Server) é um protocolo de compartilhamento de arquivos massivamente usado no mundo Linux e completamente distinto do usado no mundo Windows (CIFS/SMB). Normalmente não tem qualquer utilidade para nós exceto quando precisamos lidar com aparelhos baseados em Linux (cameras ip, nvr, media player, tv, etc), que é o caso que vou abordar neste post. Para muitos dispositivos desse tipo o único meio de trocar arquivos com o mundo exterior, principalmente arquivos que contém o firmware do aparelho, é você ter acesso a um servidor NFS. A maioria dos usuários Windows está a no máximo uma dúzia de cliques de criar um servidor CIFS, mas conseguir um servidor NFS pode ser bem complicado e frustrante quando você não faz a menor idéia de por onde começar.
Outros posts virão onde explicarei como fazer backup e restauração de firmware de alguns aparelhos e o processo vai depender de você ter acesso a um servidor NFS.
Se você tiver acesso ao Windows Server 2008 ou 2012, um servidor NFS supostamente é parte das opções oferecidas, mas não vou tratar disso aqui.
haneWIN NFS Server
Shareware
Prós
- Roda no Windows. Incluindo XP e Windows 8.1 x64 (testado);
- Pequeno, leve, prático e funciona. Do download ao servidor funcionando são só uns poucos minutos.
Contras
- Só pode usar por 30 dias
O procedimento é muito simples
- Baixe e instale o programa;
- Crie um diretório c:\public
- Execute NFS Server pelo ícone deixado no desktop (para configurar você precisa executar como Administrador);
- Vá em Exports -> Edit Exports File e retire o parâmetro -readonly da linha que começa com c:\public
- Clique em Restart Server
Agora você pode montar no cliente com uma seqüência de comandos do tipo (digamos que o servidor esteja em 192.168.0.10);
#mkdir /tmp/nfs
#mount -t nfs 192.168.0.10:/c/public /tmp/nfs
Observe a notação acima. Se o drive fosse “d:”, o caminho a usar começaria com “/d/”
Se der “Connection Refused” experimente acrescentar ‘-o nolock’, assim:
#mount -t nfs -o nolock 192.168.0.10:/c/public /tmp/nfs
Tunkey Linux File Server
Prós:
- Imediatamente após terminar o assistente de configuração o servidor já está funcionando;
- Compartilhamentos são simultaneamente exportados como CIFS e NFS. Assim você pode colocar um arquivo no servidor através do Linux e resgatá-lo do mesmo local usando o Windows e vice-versa;
Contras:
- É irritante que ele não deixa você terminar a instalação enquanto não escolher uma senha complicada (que dois meses depois eu já havia esquecido e tive que instalar tudo de novo);
- Oferece uma enorme quantidade de configurações pela GUI que são todas completamente inúteis para nosso caso e só confundem;
- Embora o servidor NFS rode automaticamente não encontrei opção na GUI para configurá-lo. Eu só descobri quais eram os diretórios exportados quando fiz um webshell e li /etc/exports. Depois foi preciso editar o arquivo /etc/exports manualmente para fazer uma mudança necessária;
- É configurado para atualizar automaticamente e não encontrei opção na GUI para desativar isso. Então para tentar impedi-lo na marra eu forneci endereços de gateway e DNS falsos;
O Turnkey Linux File Server é uma distro do Linux que está disponível como máquina virtual. Basta importar o arquivo .ova disponibilizado no site na sua cópia do Virtualbox e seguir o assistente de instalação. Em poucos passos está quase pronto para o uso.
A primeira tela do assistente vai pedir uma senha para o usuário root. Você precisa combinar letras maiúsculas e minúsculas e colocar ao menos um número.

Confirme a senha
Se a senha não estiver ao agrado do programa vai ser rejeitada logo na primeira tentativa

Em seguida o programa vai oferecer os “hub services”, que são inúteis para nossa finalidade. Você pode pular a instalação com a tecla TAB, até selecionar SKIP
Salte as notificações da mesma forma

Minta internet tem apenas 800kbps. Esperar para fazer atualizações é intolerável. Eu salto isso também.

Se você não quiser mudar as configurações de rede, a configuração acabou. Se quiser mudar, selecione Advanced Menu

Selecione Networking

Selecione Static e configure ao seu gosto. Para evitar que o programa se atualize sem minha permissão, eu forneço informações falsas de gateway e DNS. Isso não afeta a operação na sua rede.

A partir desse ponto você pode fazer muita coisa com o mouse. Basta acessar o servidor via browser, no endereço IP que você definiu.
O único real problema que encontrei foi que apesar de não existir username e password para acessar um servidor NFS pois as permissões são definidas por IP, por default o servidor NFS não permite gravação se você estiver acessando como usuário root, mas normalmente esse é justamente o usuário com que fazemos login nos dispositivos (dá permission denied). Mas uma pequena configuração extra no arquivo /etc/exports resolve.
Exemplo de arquivo /etc/exports
|
1 2 3 4 5 |
# export to all known non-routable (local) networks /srv 10.0.0.0/8(rw,fsid=0,no_subtree_check) 172.16.0.0/12(rw,fsid=0,no_subtree_check) 192.168.0.0/16(rw,fsid=0,no_subtree_check) /srv/storage 10.0.0.0/8(rw,fsid=1,no_subtree_check) 172.16.0.0/12(rw,fsid=1,no_subtree_check) 192.168.0.0/16(rw,fsid=1,no_subtree_check) /srv/homes 10.0.0.0/8(rw,fsid=2,no_subtree_check) 172.16.0.0/12(rw,fsid=2,no_subtree_check) 192.168.0.0/16(rw,fsid=2,no_subtree_check) |
Após a instalação você precisa acrescentar a opção no_root_squash ao compartilhamento que quer liberar completamente.
Você não pode simplesmente copiar e colar o meu arquivo exports porque o arquivo é criado com endereços que dependem da sua rede.
O modo simples de editar o arquivo exports é fazer login pelo webshell para copia-lo para o compartilhamento, editá-lo usando o seu editor preferido no Windows mesmo e depois transferi-lo de volta:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Acesse: https://endereço_servidor_nfs:12320/ Entre com usuário e senha cp /etc/exports /srv/storage/exports <- copia para um diretório acessível via Windows Edite o arquivo usando o Explorer (acrescente <em>no_root_squash</em> às opções) e o Bloco de Notas e salve-o. cp /srv/storage/exports /etc/exports <-copia o arquivo editado sobre o arquivo original exportfs -ra <- faz as mudanças entrarem em vigor |
O arquivo editado fica mais ou menos assim (observe o que foi acrescentado em negrito):
|
1 2 3 4 5 |
# export to all known non-routable (local) networks /srv 10.0.0.0/8(rw,fsid=0,no_subtree_check) 172.16.0.0/12(rw,fsid=0,no_subtree_check) 192.168.0.0/16(rw,fsid=0,no_subtree_check) /srv/storage 10.0.0.0/8(rw,fsid=1,no_subtree_check,<strong>no_root_squash</strong>) 172.16.0.0/12(rw,fsid=1,no_subtree_check) 192.168.0.0/16(rw,fsid=1,no_subtree_check) /srv/homes 10.0.0.0/8(rw,fsid=2,no_subtree_check) 172.16.0.0/12(rw,fsid=2,no_subtree_check) 192.168.0.0/16(rw,fsid=2,no_subtree_check) |
A partir do servidor telnet de uma câmera, consegui fazer o mount com:
# mkdir /tmp/nfs
# mount -t nfs -o nolock 10.0.0.39:/srv/storage /tmp/nfs
Não funcionaram
FreeNFS e FreeNFSe – Free. A versão FreeNFSe é destinada a instalação a partir do Windows XP e é especificamente destinada ao que desejamos: a conexão de clientes NFS “embutidos” ou “embarcados” e é extremamente simples de usar, mas não consegui fazer funcionar. O compartilhamento é criado mas tentar copiar para ele dá muitos erros e os arquivos são criados com zero bytes.
Windows Services For Unix – Gratuito e da própria Microsoft. Pode ser instalado até no Windows XP, mas foi descontinuado e não é mais oferecido para download. Complica demais porque requer que você faça um mapeamento entre os usuários do Windows e do Unix antes de poder compartilhar pastas. Se você quiser procurar por ele aqui estão informações de autenticidade para a versão 3.5 (a última), da cópia que baixei anos atrás:
CRC-32: 87cfd0f3
MD4: 95aac2b26bfd9971b73efe9e6c62d462
MD5: d632c1bd7bed8af2ddb2a00c81aafcab
SHA-1: cd9cc633d967a2186c6f55ec8e362c1efb370661
Problemas diversos
- “Connection refused” no comando mount – A maioria dos tutoriais diz que isso está relacionado ao seu firewall. Mas descobri que acrescentar ao mount a opção ‘-o nolock’ resolve o problema;
- Comando mount demora demais e depois dá “RPC timed out” – O firewall está atrapalhando
- “Permission denied” no comando mount – Se você é o usuário ‘root’ na máquina onde está dando o comando mount, o servidor NFS está configurado para negar acesso ao usuário root;
… Jurava que já havia feito comentário aqui nesse post. Mas devo ter caído em alguma regra ou se perdeu.
Não sei se funciona corretamente ( talvez se você tiver tempo e saco para testar o windows 10 ) mas com o advento do Bash do Ubuntu 14.04 no Windows – acho que seria possível utilizar o NFS Server nativo do linux rodando sob o windows.
Uma das limitações até onde eu sei é editar coisas parece que o Bash não tem permissão de escrita na camada do HD Windows. Mas leitura ele faz. Acredito que um pouco de apt-get e algumas configurações e você poderia compartilhar a pasta usando o NFS.
Vale o teste, já que muitos serviços as coisas funcionam no Bash, como LAMP e até mesmo o X eu vi que é possivel usar com muito truque.
Pra fins de teste e desafio embora sei que seu tempo seja limitado. Acho que vale a pena !!!
Ygor,
Eu não uso o Windows 10 ainda. E por causa da característica “mutante” desse SO eu ainda estou reticente quanto à validade de se fazer qualquer tutorial baseado nele.
Eu expandi os tutoriais e documentei alguns possíveis problemas.