Crie seu NAS com Raspberry 1B ou Zero

Uma grande utilidade do Raspberry Pi é criar um NAS, temos uma ótima opção pronta que é o OMV, porém ele não funciona, ou não é recomendado para versões abaixo do Raspberry Pi 2B. Então a solução para quem quer ter um NAS com um Raspberry Pi antigo ou um de custo mais baixo como o Zero, é montar seu próprio sistema eliminando a interface gráfica. Isso vai deixar o sistema mais leve, liberando processamento e memoria para o necessário.


Além do Raspberry Pi você vai precisar de um cartão SD, e aqui também você pode economizar recursos, se não desejar usar um servidor DLNA, o que sim também é possível, um cartão de apenas 2GB é suficiente, se desejar usar o servidor DLNA um de 4GB é suficiente.

Para o HD externo use alguma interface USB como gaveta ou cabo direto. Este HD costuma necessitar de alimentação independente das portas USB do Raspberry Pi, o que pode ser feito com um HUB USB alimentado.

A partir daqui todas as informações serão baseadas em quem já tenha conhecimento de linha de comando em Linux, afinal como foi dito acima o sistema não irá possuir interface gráfica. Plugue o teclado no Raspberry Pi, deixe o mouse na gaveta e vamos em frente.

Uma dica: não use seu NAS pelo WIFI, na conexão cabeada você terá maior velocidade e estabilidade.

Outra dica: você não precisa saber o IP para conexões remotas, basta usar o hostname:

raspberrypi.local


Instalando e preparando o sistema: 


A distribuição Linux que usaremos aqui é a Raspbian Lite que pode ser encontrada no site oficial:
https://www.raspberrypi.org/downloads/raspbian/

Instruções de gravação no cartão SD também é encontrada no site oficial em "Writing the image":
https://www.raspberrypi.org/documentation/installation/installing-images/README.md

Após a instalação faça as atualizações:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get clean

O comando clean serve para apagar os arquivos baixados para a instalação e liberar espaço no cartão SD, use constantemente caso tenha um cartão SD de tamanho pequeno.

Entre nas configurações do Raspberry Pi para habilitar o SSH:
sudo raspi-config
Vá em:
5 Interfacing Options
P2 SSH

Aproveite e sete seu locale também se desejar que a data / hora do sistema fique de acordo com seu país.

Com o SSH habilitado você pode optar em fazer o acesso pelo PC utilizando o Putty no Windows ou qualquer terminal no Linux. Dessa forma você poderá copiar e colar comandos, facilitando o trabalho.

Para configurar o teclado para o ABNT2, vá no arquivo de configuração:
sudo nano /etc/default/keyboard

E altere para:
XKBMODEL="abnt2"
XKBLAYOUT="br"
XKBVARIANT=""
XKBOPTIONS="lv3:alt_switch,compose:rctrl"

Como o sistema irá permanecer ligado constantemente é aconselhável mudar a senha padrão, para isso use o comando:
passwd

Outra mudança possível de fazer é mudar o hostname que por padrão é raspberrypi. Você pode colocar o que desejar, para isso edite os arquivos abaixo e troque pelo nome desejado:
sudo nano /etc/hosts
sudo nano /etc/hostname

Para efetivar a mudança reinicie o sistema:
sudo reboot

Com o HD plugado é preciso fazer com que ele monte automaticamente na pasta desejada a cada inicializada do sistema. É aconselhável montar em uma pasta criada dentro do home, o programa minidlna que usaremos não se dá bem com montagens fora da pasta de usuário.

Primeiro veja qual o dev o HD está, normalmente é /dev/sda1:
sudo fdisk -l

Procure algo como:
Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1        2048 488396799 488394752 232.9G 83 Linux

Crie uma pasta em seu home e dê permissão total para ela, utilizando os comandos abaixo trocando meuhd para o nome desejado:
mkdir meuhd
chmod -R 777 meuhd

Edite o fstab:
sudo nano /etc/fstab

Adicione a linha abaixo substituindo a pasta de montagem e seu dev de acordo com seu sistema:
/dev/sda1   /home/pi/meuhd       ext4    defaults          0       0

Neste caso o HD a ser montado está formatado em EXT4, para NTFS substitua ext4 por ntfs.


Instalação de programas: 


Instalando o Samba:


Para ter um servidor de arquivos Windows é necessário instalar o Samba.

Para a instalação use:
sudo apt-get install samba

Após a instalação entre no arquivo de configuração do samba:
sudo nano /etc/samba/smb.conf

Vá para o fim do arquivo e adicione as linhas abaixo de acordo com a configuração desejada:

Compartilhando a pasta /home/pi e exigindo senha de acesso:
[pi]
comment=pi home
path=/home/pi
browseable=yes
writeable=yes
only guest=no
create mask=0740
directory mask=0750
public=no
Sendo necessário criar a senha do usuário pi (neste caso) no samba com o comando:
sudo smbpasswd -a pi
Ao tentar o acesso remoto, será pedido o usuário e senha, use pi para usuário e a senha criada no samba. A senha do linux não funciona no acesso remoto.
Dica: Use a mesma senha do linux, assim fica mais fácil lembrar.

Compartilhando a pasta /home/pi sem exigir senha de acesso:
[pi]
comment=pi home
path=/home/pi
browseable=yes
writeable=yes
guest ok = yes
create mask=0644
directory mask=0755
force user = pi

Reinicie o serviço com:
sudo service smbd restart

Para fazer o acesso pelo Windows aperte a tecla Win e entre com uma das duas linhas:
\\raspberrypi
\\raspberrypi.local

Para fazer o acesso pelo Linux, vá para a barra de algum gerenciador de arquivos entre com:
smb://raspberrypi.local

Após instalação do samba pode ocorrer o erro locale abaixo:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en_US.UTF-8",
LC_MONETARY = "en_US.UTF-8",
LC_ADDRESS = "en_US.UTF-8",
LC_TELEPHONE = "en_US.UTF-8",
LC_NAME = "en_US.UTF-8",
LC_MEASUREMENT = "en_US.UTF-8",
LC_IDENTIFICATION = "en_US.UTF-8",
LC_NUMERIC = "en_US.UTF-8",
LC_PAPER = "en_US.UTF-8",
LANG = "en_GB.UTF-8"

Para corrigir entre no raspi-config e vá para:
4 Localisation Options
I1 Change Locale

Mude para:
en_US.UTF-8 UTF-8

Seguido de:
en_GB.UTF-8

Execute um update e o erro vai desaparecer:
sudo apt-get update


Instalando o NFS:


Para ter um servidor de arquivos Linux é necessário instalar NFS:

Para a instalação use:
sudo apt-get install nfs-common nfs-kernel-server

Após a instalação entre no arquivo de configuração do NFS:
sudo nano /etc/exports

Vá para o fim do arquivo e adicione a linha abaixo de acordo com a configuração de pasta e rede desejada. 

Neste caso todos os hosts da rede 192.168.1.x terão acesso a pasta:
/home/pi/ 192.168.1.0/24 (rw)

Você pode definir que apenas um host tenha acesso a pasta usando:
/home/pi/ 192.168.25.5 (rw)

Reinicialize o serviço com:
sudo service nfs-kernel-server restart

Para fazer acesso da maquina Linux, crie uma pasta e use:
sudo mount -t nfs -o rw raspberrypi.local:/home/pi   /home/linux/raspberrypi

Neste caso a pasta criada foi raspberrypi na pasta de usuário linux.

Para inicializar o sistema com a pasta já montada, adicione uma linha no fstab:
raspberrypi.local:/home/pi   /home/linux/raspberrypi       nfs    defaults


Instalando o DLNA:


Para ter um servidor DLNA/UPnP é necessário instalar o MiniDLNA:

Para a instalação use:
sudo apt-get install minidlna

Após a instalação entre no arquivo de configuração do MiniDLNA:
sudo nano /etc/minidlna.conf

Adicione e/ou edite as linhas existentes de acordo com sua pasta de arquivos:
media_dir=P,/home/pi/meuhd/minhasimagens
media_dir=V,/home/pi/meuhd/meusvideos
media_dir=A,/home/pi/meuhd/meusaudios
friendly_name=Raspberry Pi
inotify=yes

Onde nas três primeiras linhas o P é de picture, o V de vídeos e o A de audios, o servidor irá descobrir todos os arquivos mesmo estando dentro de outras pastas. O friendly_name será o nome que vai aparecer nos clientes e inotify vai descobrir novos arquivos nas pastas automaticamente.

Reinicialize o serviço com:
sudo service minidlna restart

Nos clientes como o VLC ou Kodi basta procurar o serviço de stream DLNA/UPnP que além de encontrar os arquivos, eles estarão ordenados por categorias.

Acessando de um cliente pelo browser o endereço abaixo, você terá um resumo da quantidade de arquivos encontrados e clientes conectados:
http://raspberrypi.local:8200


Instalando a VPN ZeroTie:


Para ter acesso aos seus arquivos de fora da internet da sua casa, como uma conexão 4G por exemplo, uma ótima opção é usar um serviço de VPN. O ZeroTier é um bom serviço gratuito que atende bem este proposito.

Primeiro é necessário entrar no site do ZeroTier e criar uma conta. Após a conta criada, logue em https://my.zerotier.com, entre em network e crie uma nova rede. Pegue o numero do ID e guarde para ser usado nos hosts.

Para a instalação use:
curl -s https://install.zerotier.com | sudo bash

Para entrar na sua rede criada use:
zerotier-cli join ID_DA_REDE

Caso ocorra o erro abaixo:
zerotier-cli: missing authentication token and 
authtoken.secret not found (or readable) in /var/lib/zerotier-one

Execute o comando para dar permissão ao arquivo:
sudo chmod 777 /var/lib/zerotier-one/authtoken.secret

Para verificar qual o IP da VPN, dê o comando ifconfig e procure pela rede que começa com ztppixxxx.

Para acessar seu NAS de outros hosts, com o ZeroTier instalado no host, basta entrar na rede com o mesmo ID e fazer o acesso pelo IP ZeroTier do seu NAS. Por exemplo:

Caso o IP do seu NAS criado pelo ZeroTier seja 192.168.195.44 e deseje acessar o servidor Samba de uma maquina Windows use:
\\192.168.195.44

Clientes como Kodi possuem embutidos a opção de acesso a servidores Samba. O ZeroTier possui aplicativos para Smartphone Android e iOS, com o ZeroTier habilitado no celular e por exemplo o App VLC instalado, também será possível acessar seu servidor Samba. O VLC de smartphones possue embutido a opção de acesso a servidores Samba.


Desligando o giro do HD por inatividade:


Como a ideia de um NAS é um servidor permanentemente ligado, não é muito bom para a saúde do HD ficar permanentemente ligado. Uma boa opção é desligar apenas o giro dele por inatividade, também chamado de Spin Down. Existe dois programas que fazem isto, o HDPARM ou HD-IDLE.


Instalando o HDPARM:


Para a instalação use
sudo apt-get install hdparm

Após a instalação verifique se o hdparm suporta seu HD com:
sudo hdparm -y /dev/sda

Veja se o comando retorna:
/dev/sda:
 issuing standby command

Se retornar uma terceira linha iniciada com "SG_IO: bad/missing sense data..." é porque ele não suporta. Então tente o HD-IDLE logo abaixo.

Verifique se ele possui suporte a cache:
sudo hdparm -I /dev/sda | grep 'Write cache'

O * indica que ele possui suporte:
* Write cache

Caso todo suporte esteja ok, abra o arquivo de configurações com:
sudo nano /etc/hdparm.conf

Vá para o fim do arquivo e adicione:
/dev/sda {
write_cache = on
spindown_time = 120
}

Onde no exemplo, o tempo de espera para desligar o giro será em segundos de 120 x 5 = 600 ou 10 minutos. Se o serviço do hdparm estiver rodando, a partir daqui o HD irá desligar o giro a cada inatividade de 10 minutos.

Nas versões mais novas de Linux baseadas em Debian, o hdparm não está sendo instalado como um serviço, para checar se ele está com o serviço ativo use:
sudo service hdparm status

Se não tiver a informação de estar ativo, tente ativar com:
sudo service hdparm start

Se retornar erro, a opção mais fácil é coloca-lo para trabalhar como um programa e adicionar no /etc/rc.local para inicializar a cada boot. Ou então criar as chamadas para inicializa-lo como serviço, o que é bem mais complexo. O comando para o hdparm trabalhando como programa desligar o giro do HD é:
sudo hdparm -B127 /dev/sda


Instalando o HD-IDLE:


Para a instalação use:
wget -c http://sourceforge.net/projects/hd-idle/files/hd-idle-1.05.tgz
tar -xvzf hd-idle-1.05.tgz
cd hd-idle
sudo apt-get install debhelper
dpkg-buildpackage -rfakeroot
cd ..
sudo dpkg -i ../hd-idle_*.deb

Para fazer um teste de desligar o giro do HD use:
sudo hd-idle -t sda1

Se estiver ok, abra o arquivo de configuração com:
sudo nano /etc/default/hd-idle

Edite o arquivo com as opções:


Habilitar o HD-IDLE:
START_HD_IDLE=true

Parar o giro com 60 segundos ou 10 minutos para apenas um HD:
HD_IDLE_OPTS="-i 600"

Parar o giro para vários HDs com tempos diferentes em cada um:
HD_IDLE_OPTS="-i 600 -a sda1 -i 300 -a sda5 -i 150" 

Se o serviço do hd-idle estiver rodando, a partir daqui o HD irá desligar o giro a cada inatividade de acordo com o tempo setado.

Para checar se o serviço do hd-idle está ativo use:
sudo service hd-idle status

Para inicializar o serviço use:
sudo service hd-idle start


Torrent:


Eu tentei colocar um serviço automático para downloads de torrent mas não consegui, a dica é usar o rtorrent em conjunto com o screen. Caso consiga, irei editar este post com a informação.


Referencias:


Comentários