O que é o NFS?


Um sistema de arquivos distríbuido baseado na arquitetura cliente-servidor.

"O NFS foi desenvolvido para simplificar o compartilhamento de recursos de sistema de arquivos em uma rede de máquinas não homogêneas." SANDBERG, 1986.

"Nosso objetivo de design era fazer o NFS tão rápido quanto um pequeno disco local numa interface SCSI." SANDBERG, 1986.

Estrutura do NFS


A estrutura pode ser entendida como composta de três partes(cliente, servidor e o protocolo) onde cliente faz requerimento, servidor atende requerimento, protocolo manipula.

Servidor


O servidor NFS é um servidor sem estado(stateless)

Servidor sem estado: sem necessidade de guardar informações de requerimentos de um cliente, facilidade no tratamento de falhas, necessidade de requerimentos compostos.

Uma analogia entre os servidores com estado e sem estado pode ser feita em relação à definição de caixas, onde um servidor sem estado seria como uma caixa preta onde a saída depende exclusivamente da entrada independente do que há no interior da caixa. Já os servidores com estado(statefull) seriam equivalentes a uma caixa branca onde a saída depende da entrada porém é influenciada, também por um estado interno que está presente na caixa similar a uma memória.
Um exemplo desta analogia pode ser visto nas imagens:


























Cliente


O cliente NFS acessa o sistema de arquivos remoto montando o sistema de arquivo:

Comando de montagem: mount

Necessita do hostname do servidor apenas no momento da montagem (nesse momento o servidor pode verificar as credenciais do cliente), e os arquivos só estarão disponíveis após a montagem.

O NFS possui uma estrutura que é utilizada para manipular os arquivos, ela é chamada de fhandle.

Um fhandle é a estrutura mais utilizada como parâmetro de procedimento no NFS, e cliente utiliza um fhandle para referenciar um arquivo no servidor.

Estrutura do fhandle: número de inode, número de geração de inode e o identificador de sistema de arquivo.

Inode: estrutura de dados utilizada para representar um objeto no sistema de arquivos (contém informações sobre arquivos ou diretórios e contém ponteiros para os blocos alocados para o arquivo).

Um inode identifica um arquivo.

Uma analogia pode ser feito com o header dos blocos livres de memória que contém as informações sobre os blocos livres.

Um exemplo de um inode pode ser visto na imagem abaixo: