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: