Essa wiki documenta todas as etapas de implementação de um sistema de arquivos NFS proposto pelo professor Paulo Henrique Sousa Barbosa na disciplina de Sistemas Operacionais do curso de Ciência da Computação do Instituto Federal de Educação, Ciência e Tecnologia do Maranhão - Campus Imperatriz (IFMA). Projeto implementado pelos os discentes do 6º período Elvis Rodrigues Almeida e Wenderson Oliveira Melo.
NFS (Network File System) é um sistema de arquivos distribuídos com um protocolo baseado em RPC, com um relacionamento cliente/servidor entre a máquina que possui um sistema de arquivo a ser distribuído e a máquina que aguarda o acesso a estes sistemas de arquivos.
O NFS é útil para compartilhar diretórios de arquivos entre múltiplos usuários da mesma rede. Por exemplo: um grupo de usuários trabalhando no mesmo projeto podem ter acesso aos arquivos deste projeto usando um diretório compartilhado do sistema de arquivo NFS (comumente conhecido como partilha do NFS) montado no diretório /myproject. Para accessar os arquivos compartilhados, o usuário vai ao diretório /myproject. Não há senhas ou comandos especiais para lembrar. Os usuários trabalham como se o diretório estivesse em suas máquinas locais assim tendo um trabalho mais eficiente e rápido.
Processador: Intel® Core™ i5-9300H CPU @ 2.40GHz × 8
Memória ram: 8GB
Placa de vídeo: GTX 1650
Sistema operacioal: Linux Pop!_OS 22.04 LTS
Disco: SSD NVMe m.2 512GB
Placa de rede: Gigabit
Processador: Intel i3-1005G1 CPU @ 1.20GHz × 4
Memória ram: 4GB
Sistema operacioal: Ubuntu 22.04.1 LTS
Disco: SSD NVMe 256GB
Placa de rede: Gigabit
- Baixe e instale o servidor NFS pelo seguinte comando:
sudo apt-get install nfs-kernel-server
- Após a finalização da instalação, vamos criar um diretório na pasta raiz do sistema operacional. No nosso caso o diretório irá se chamar
/fast
. Podemos ver que nosso diretório foi criado com o comando ``ls:
- Nosso próximo passo é abrir o arquivo
/etc/exports
com o comandosudo nano /etc/exports
para podermos adicionar as permissões ao nosso diretório recém criado. Nessa janela vamos adicionar as seguintes permissões derw
-leitura e escrita,sync
- atualização automática,no_subtree_check
- não vericação de subárvore eno_root_squash
- permite que root remotos possam ser capazes de mudar quaisquer arquivos no sistema de arquivos compartilhados:
- Agora vamos negar todas as permissões de host, para isso vamos abrir o arquivo
/etc/hosts.deny
com o seguinte comandosudo nano /etc/hosts.deny
e iremos adicionar as seguintes linhas:
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
- Nesse passo vamos aprovar todas as permissões de host, para isso precisamos abrir o arquivo
/etc/hosts.allow
com o comandosudo nano /etc/hosts.allow
e com isso adicionar as seguintes permissões para hosts na rede192.168.0.0
:
portmap: 192.168.0.0/24
lockd: 192.168.0.0/24
rquotad 192.168.0.0/24
mountd: 192.168.0.0/24
statd: 192.168.0.0/24
- E antes de finalizarmos nossa configuração iremos reinicar nosso servidor, usando o seguinte comando
sudo /etc/init.d/nfs-kernel-server restart
:
Após reiniciar aparecerá deve apareceer essa mensagem:
- E como utilizaremos uma conexão via cabo, configurei com
ifconfig
a placa de rede com oIP 192.168.0.1
:
Dessa forma, o servidor já está pronto para uso!!
- Baixe e instale o cliente NFS pelo seguinte comando:
sudo apt-get install nfs-common
- Agora crie um diretório que será montado para o acesso. No meu caso chamei-o de /fast (é interessante ser o mesmo nome usado no servidor para facilitar a nomeação e lembrança dos diretórios), o diretório foi criado como mostra o comando
ls
:
- Abra o arquivo
/etc/fstab
e adicione o link do servidor que no caso é oIP 192.168.0.1
como mostra a imagem abaixo:
Perceba que na imagem após o caminho da pasta que criei para ser montada há nfs rw 0 0
. Os significados são os seguintes: nfs
- Network System File, rw
- sistema de arquivos para leitura e escrita, o primeiro 0
- Este campo define se o dump do utilitário de backup fará backup do sistema de arquivos. Se definido como o sistema de arquivos "0" ignorado, o sistema de arquivos "1" será copiado e o segundo 0
- o Fsck order informa ao fsck qual ordem verificar os sistemas de arquivos, se definido como "0" o sistema de arquivos será ignorado. Para saber mais veja aqui.
- Antes de montar definitivamente o diretório
/fast
, configurei o IP da minha placa como192.168.0.2
para ser da mesma classe de IP do servidor como mostra a imagem abaixo utilizando do comandoifconfig
:
- Agora é montar o diretório com o seguinte comando:
Pronto, finalmente temos a pasta montada e podemos iniciar os testes!!
Testaremos nosso sistema NFS usando um cabo cat5e, serão transferidos arquivos de aproximadamente 15GB, 5GB, 1GB, 100MB, 50MB, 10MB e 1MB entre o cliente(Wenderson) e o servidor(Elvis). Mediremos o tempo decorrido com o seguinte comando time rsync -avh --info=progress2 --stats pastaorigem pastadestino
.
Abaixo os prints dos testes:
E utilizando o comando sudo iptraf
no servidor podemos ver a taxa de transferência em Mbps, mostrando que a transferência é em Gigabit:
A tabela seguinte mostra os resultados, de maneira resumida, que obtivemos:
Tamanho do Arquivo | Tempo de Transferência(em segundos) | Taxa Média de Transferência(em MB/s) |
---|---|---|
1MB | 00,12 | 39,93 |
10MB | 00,23 | 75,49 |
50MB | 00,81 | 89,27 |
100MB | 01,18 | 89,48 |
1GB | 13,66 | 131,56 |
5GB | 47,90 | 110,31 |
15GB | 145,72 | 110,06 |
Concluímos que todo o nosso sistema NFS obteve uma ótima performance, grande parte por causa dos dispositivos usados e o cabo cat5e.