Tutorial como criar um servidor de arquivos NAS com Raspberry Pi – SMB e AFP

Objetivos

  • Saber o que é um NAS
  • Entender o que é um servidor de arquivos
  • O que é o protocolo SMB
  • O que é o protocolo AFP
  • Passo a passo para configurar um Raspberry Pi como um servidor de arquivos / NAS com suporte a smb (samba) e afp (netatalk e avahi-daemon)

O que significa NAS?

O termo NAS vem do inglês “Network Attached Storage“, que pode ser traduzido como uma unidade de armazenamento ligado à rede. De forma geral, funciona como um servidor de arquivos.

Para que serve um servidor de arquivos?

Um servidor de arquivos ligado em rede tem como objetivo facilitar o fluxo de informação. Pensando em uma rede doméstica ou empresarial, um servidor de arquivos permite que usuários tenham acesso rápido a arquivos de interesse comuns. Seja uma área de transferência temporária para troca de arquivos entre usuários; ou de forma estruturada, visando organizar informações importantes para acesso de longo prazo.

O que é o software Samba e o protocolo SMB?

Samba é um software que provê recursos para transferência de arquivos através do protocolo smb. Desta forma, é um software que provê os recursos de servidor de arquivos. Tem origem em 1992 e suporte aos sistemas operacionais DOS, Windows, OS/2, Linux etc.
O samba também oferece recursos de servidor de impressão, para integrar diversos clientes a uma impressora.

O que é o protocolo AFP?

O termo AFP vem do inglês “Apple Filing Protocol” que antigamente era conhecido apenas como protocolo Appletalk. É um protocolo de rede proprietário desenvolvido pela Apple Inc.
O protocolo AFP foi o protocolo padrão utilizado pelo Mac OS até antes do Mac OS Mavericks (Mac OS 10.9). Em seguida o protocolo smb foi definido como protocolo primário/padrão. A capacidade de autenticação por AFP ainda é mantida no sistema operacional da Apple na versão Ventura.

Necessidades para realização desta tutorial

Para que seja possível realizar este projeto, basta ter um Raspberry Pi disponível e computadores para testar a conexão. Todas as versões do Raspberry Pi são compatíveis, desde a primeira versão do Raspberry.

Tutorial passo a passo para configurar um Raspberry Pi como um NAS

Passo 1 – Conexão ao Raspberry Pi

O primeiro passo é se conectar ao seu Raspberry por conexão SSH. Caso não tenha um nome de usuário e senha configurados, conecte pelo usuário padrão. Neste exemplo nosso raspberry está configurado no ip 192.168.1.52. Então o comando para conexão será:

 ssh pi@192.168.1.52

A senha padrão do Raspbian recém instalado é:

raspberry

Um alerta, por padrão o raspberry não vem com o servidor SSH habilitado. Na hora de salvar a imagem do sistema operacional no cartão SD pelo Raspberry Pi Imager é possível solicitar que o servidor SSH fique habilitado já no primeiro boot.

Passo 2 – Configuração da estrutura de arquivos

Vamos criar agora um usuário com o nome fileserver. Um grupo com o nome fileserver será criado automaticamente junto com a criação deste usuário. Vamos também utilizar o comando -m, para que ao criar o usuário e o grupo a pasta /home/fileserver também seja criada:

sudo useradd -m fileserver

Devemos agora definir uma pasta para ser compartilhada em nosso NAS. Esta pasta poderá receber acesso de vários usuários registrados. Então vamos chamar ela de “shared”. Vamos criar a pasta com o comando:

sudo mkdir /home/fileserver/shared

Interessante configurar a pasta /home/fileserver/shared de forma que todos os arquivos criados dentro dela, mantenham o grupo fileserver. Execute então o comando abaixo para esta configuração:

sudo chmod g+s /home/fileserver -R

Pensando já nos próximos passos, é interessante que todos os usuários que pertençam ao grupo fileserver, possam ter permissão de leitura/escrita na pasta shared. Execute então o comando:

sudo chmod 770 /home/fileserver -R

Raspberry Pi NAS - criar novo usuário fileserver
Raspberry Pi NAS - criar pasta compartilhada
Raspberry Pi NAS - permissão g+s habilitar bit para manter permissão de grupo fixoRaspberry Pi NAS - chmod 770 permissão de escrita para grupos

Passo 3 – Adicionando usuários ao grupo fileserver

Caso tenha outros usuários configurados no raspberry pi e também deseja que eles tenham acesso a esta pasta compartilhada, precisamos adicioná-los ao grupo do fileserver.

Neste exemplo, vou adicionar o usuário viniciuspaes ao grupo fileserver. O comando será:

sudo usermod -a -G fileserver viniciuspaes

Caso tenha mais usuários, utilize o exemplo do comando acima e adicione todos que deseja fornecer acesso a pasta.

Raspberry Pi NAS - adicionar usuário pesoal ao grupo do servidor de arquivos para que possa escrever no diretório

Passo 4 – Instalando o protocolo SMB e Configurando o Samba

O protocolo smb é amplamente utilizado pelo windows para transferência de arquivos entre cliente e servidor. Instalando o conjunto de aplicativos do Samba temos suporte ao protocolo smb. Para instalar o samba, utilize o comando:

sudo apt install samba samba-common-bin

Agora vamos editar o arquivo de configuração com o comando:

sudo nano /etc/samba/smb.conf

Caminhe até o fim do arquivo e adicione as linhas:

[shared]
path = /home/fileserver/shared
writable = Yes
create mask = 0770
directory mask = 0770
public = no

Com o comando acima, vamos criar o compartilhamento com o nome “shared”. A pasta onde os arquivos deste compartilhamento serão armazenados é a “/home/fileserver/shared”. A máscara de permissão dos diretórios e arquivos vai ser “770” para escrita de grupo. Este compartilhamento não é público, é necessário que o usuário informe login e senha para acesso.

O samba nesta configuração padrão, não utiliza os usuários do linux para autenticação, sendo necessário definir os usuários que podem se autenticar.

Desta forma, vamos adicionar o usuário “viniciuspaes” como um usuário que pode se autenticar no samba e acessar o compartilhamento “shared”:

sudo smbpasswd -a viniciuspaes

Agora vamos reiniciar o daemon do samba com o comando:

sudo systemctl restart smbd

Raspberry Pi NAS - sudo apt install samba samba-common-bin
Raspberry Pi NAS - editar arquivo smb.conf
Raspberry Pi NAS - inicio do arquivo smb.conf
Raspberry Pi NAS - ir para fim do arquivo smb.conf
Raspberry Pi NAS - criar configurações no arquivo smbd
Raspberry Pi NAS - smbdpasswd -a novousuario
Raspberry Pi NAS - service smbd restart

Passo 5 – Testando conexão Samba no Windows

No windows, acesse o windows explorer, e no canto esquerdo localize o item:

Rede (Network)

Clique com botão direito em cima de “Rede” e escolha a opção:

Mapear unidade de rede… (Map network drive…)

Neste exemplo o raspberry pi está configurado no IP 192.168.1.52 e o nome do compartilhamento que criamos se chama “shared” ([shared]). Então no campo de Pasta (Folder) preencha com:

\\192.168.1.52\shared

Caso queira que a pasta de rede se conecte automaticamente a cada vez que iniciar o windows, deixe marcado o campo:

Reconectar ao realizar login (Reconnect at sign-in)

Como minhas credenciais de login do windows são diferentes do servidor (login samba), vou marcar a caixa:

Conectar utilizando credenciais diferentes (Connect using different credentials)

Clique agora no botão:

Terminar (Finish)

Para testar se a conexão está funcional e temos permissão de escrita na pasta do servidor, vamos criar um arquivo chamado “teste.txt”. Caso tudo ocorra como planejado, o arquivo estará criado dentro da pasta do servidor e estará disponível.

No terminal do servidor, podemos verificar quais arquivos estão presentes na pasta “shared”, com o comando:

ls -lah /home/fileserver/shared/

Podemos verificar o arquivo teste.txt que criamos para testar a funcionalidade.

Raspberry Pi NAS - configurar acesso servidor de arquivos pelo windows usando protocolo smb - samba

Raspberry Pi NAS - mapear unidade de rede

Raspberry Pi NAS - digitar endereço do servidor

Raspberry Pi NAS - conectado com sucesso ao servidor nad por smb

Raspberry Pi NAS - criar um arquivo de teste na pasta compartilhada do NAS

Raspberry Pi NAS - arquivo de teste criado com sucesso

Raspberry Pi NAS - ls -lah na pasta compartilhada do servidor para verificar se o arquivo de teste foi criado corretamente

Passo 5 – Instalando o protocolo AFP e Bonjour com pacote Netatalk e Avahi

O sistema operacional Mac OS tem suporte tanto para samba, quanto para AFP nativos.
Porém, desde o OS Mavericks a Apple adotou o protocolo smb como padrão. Mas como os usuários possam estar utilizando o protocolo AFP ou precisem utilizar este protocolo em versões mais antigas no Mac OS, é interessante também conceder este acesso ao nosso servidor de arquivos/NAS.

A configuração do Bonjour é realizada através do pacote avahi-daemon, garante descobrimento automático do servidor na rede, e também há suporte/anúncio para configuração de time machine.

Para ter suporte ao AFP e Bonjour, vamos instalar o pacote:

sudo apt install netatalk

Após a instalação podemos verificar um panorama geral do suporte do AFP, assim como características do local de instalação, versão do protocolo, etc. Execute o comando para verificar diversas informações sobre o suporte ao AFP:

afpd -V

Agora é necessário editar o arquivo de configuração do AFP e definir as formas de login, suporte ao time machine, caminho da pasta compartilhada, etc:

sudo nano /etc/netatalk/afp.conf

Agora caminhe até o final do arquivo e cole a configuração:

[shared]
    path = /home/fileserver/shared
    time machine = yes
    vol size limit = 20000
    valid users = viniciuspaes

Na configuração acima, lembre-se de adicionar os usuários que vão ter permissão de acessar a pasta compartilhada por AFP. No exemplo acima temos o usuário viniciuspaes com permissão de acesso, basta substituir por seu usuário e adicionar mais usuários na mesma linha separados por espaço.

Lembrete

A conexão do AFP será feita pelas credenciais de login e senha dos usuários já configurados no sistema operacional linux (raspberry pi). E lembrando que no Samba (SMB) é necessário adicionar cada usuário que tem permissão de login no serviço (smbpasswd -a ).

Raspberry Pi NAS - sudo apt install netatalk
Raspberry Pi NAS - afpd -V
Raspberry Pi NAS - sudo apt install netatalk - resultado

Raspberry Pi NAS - editar arquivo afp.conf
Raspberry Pi NAS - início arquivo afp.conf
Raspberry Pi NAS - adicionar configuração fim do arquivo afp.conf
Raspberry Pi NAS - sudo service netatalk start
Raspberry Pi NAS - sudo service avahi-daemon start

Passo 6 – Testando conexão AFP no Mac OS (netatalk + avahi-daemon)

No Mac OS, abra o aplicativo finder. No menu superior, clique na opção:

Ir (Go)

No submenu que vai abrir, escolha a opção:

Conectar no servidor… (Connect to server…)

A janela de conexões ao servidor vai abrir. Nesta janela podemos escolher qual protocolo queremos nos conectar. Lembrando que podemos nos conectar por samba também (smb://), mas neste exemplo vamos optar por conectar com AFP. No campo para digitar o endereço, preencha o protocolo de conexão (afp://) seguido do IP do servidor (192.168.1.52) juntamente com o nome da conexão que definimos no arquivo afp.conf ([shared]):

afp://192.168.1.52/shared

Caso queira salvar este endereço na lista de favoritos para conexão, lembre de clicar no campo “+”. Clique agora no botão:

Conectar (Connect)

Uma janela solicitando as credenciais de conexão vai abrir. Digite o usuário e senha do seu usuário criado no raspberry. Caso queira armazenar as credenciais de login e senha, marque a opção para que elas fiquem salvas em seu keychain. Agora clique novamente no botão:

Conectar (Connect)

Ao se conectar no servidor, será possível que o hostname do servidor (raspberry) irá aparecer no menu lateral na parte de “Locations”. Você estará dentro da aba da conexão da pasta de rede “shared” e poderá ver o arquivo de teste.txt que criamos quando nos conectamos no samba no windows.

Raspberry Pi NAS - conexão AFP no MAC OS, clicar em Ir/GO

Raspberry Pi NAS - conexão AFP no MAC OS, selecionar conectar no servidor

Raspberry Pi NAS - conexão AFP no MAC OS, inserir endereço do servidor e pasta compartilhada

Raspberry Pi NAS - conexão AFP no MAC OS, inserir endereço do servidor e pasta compartilhada

Raspberry Pi NAS - conexão AFP no MAC - conectado no servidor e arquivos compartilhados disponíveis

Conlusões

Caso tenha seguido o tutorial acima, foi possível verificar o passo a passo para criar um NAS com o Raspberry Pi, tanto com suporte ao protocolo smb, quanto o afp. A configuração é bem simples e lembrando que este recurso também é uma comodidade caso utilize o raspberry em outros projetos que necessitam a troca de arquivos entre seu computador e o dispositivo.

Lembrando que até o modelo do Raspberry Pi 3 a porta ethernet é limitada a 100Mbps (100mbps/8 = ~12,5MB/s transferência). Porém nessas versões mais antigas, é possível utilizar um dongle USB/Ethernet de 1Gbps e aproveitar a banda de 480mbps da porta USB 2.0. Porém a conexão deve ficar algo próximo/máximo de 320mbps (~40MB/s transferência), por limitação da banda do controlador do USB 2.0 e o compartilhamento da velocidade com outros dispositivos.

Caso utilize um SSD como unidade de armazenamento, consegui velocidades próximas a 25Mb/s em escrita e leitura sequencial com testes realizados com o software DD do linux na porta USB 2.0.

Caso utilize muita troca de informações, lembre-se que estas transferências consomem processamento da CPU. O raspberry pi na versão 4 ou superior pode ser uma opção mais eficiente. Com a porta USB 3.0 e um SSD Sata, consegui velocidades próximas a 220MB/s com testes utilizando o DD.

No geral, percebo que o Raspberry ainda possui muitas limitações de IO perante seus concorrentes que já tem suporte a armazenamento em M.2 NVME e eMMC. Mas ainda é um gadget super recomendado, pois há extenso suporte ao dispositivo, desde sua primeira versão.
Tenho por exemplo um ODROID-X2 com recursos próximos a um Raspberry Pi 3 e não há mais suporte oficial do fabricante, nem para o uboot, nem para o kernel e nem imagens atualizadas do linux. Desta forma, continuo recomendando o raspberry pelo suporte a longo prazo.

 

Espero que tenham gostado deste passo a passo e qualquer dúvida ou sugestão, basta informar nos comentários!