Construír un sistema NAS doméstico económico en Linux

Construír un sistema NAS doméstico económico en Linux

Eu, como moitos outros usuarios de MacBook Pro, afrontei o problema da memoria interna insuficiente. Para ser máis precisos, o rMBP que utilizaba a diario estaba equipado cun SSD cunha capacidade de só 256 GB, o que, por suposto, non foi suficiente durante moito tempo.

E cando, por riba de todo, comecei a gravar vídeos durante os meus voos, a situación non fixo máis que empeorar. O volume de imaxes filmadas despois destes voos foi de máis de 50 GB e o meu pobre SSD de 256 GB encheuse moi pronto, o que me obrigou a comprar unha unidade externa de 1 TB. Non obstante, despois dun ano, xa non puido manexar a cantidade de datos que estaba xerando, sen esquecer a falta de redundancia e de copia de seguridade facíao inadecuado para aloxar información importante.

Entón, nun momento dado decidín construír un NAS grande coa esperanza de que este sistema durase polo menos un par de anos sen requirir outra actualización.

Escribín este artigo principalmente como un recordatorio do que fixen exactamente e como o fixen por se teño que facelo de novo. Espero que tamén che sexa útil se decides facer o mesmo.

Quizais sexa máis doado mercar?

Entón, sabemos o que queremos conseguir, a pregunta segue sendo: como?

Primeiro mirei solucións comerciais e mirei en particular a Synology, que se suponía que proporcionaba os mellores sistemas NAS para consumidores do mercado. Non obstante, o custo deste servizo resultou ser bastante elevado. O sistema de 4 bahías máis barato custa máis de 300 dólares e non inclúe discos duros. Ademais, o recheo interno deste kit en si non é particularmente impresionante, o que pon en dúbida o seu rendemento real.

Entón pensei: por que non construír eu mesmo un servidor NAS?

Buscar un servidor axeitado

Se vas montar un servidor deste tipo, primeiro debes atopar o hardware adecuado. Un servidor usado debería ser bastante axeitado para esta compilación, xa que non necesitaremos moito rendemento para as tarefas de almacenamento. Entre as cousas necesarias, debemos destacar unha gran cantidade de RAM, varios conectores SATA e boas tarxetas de rede. Dado que o meu servidor funcionará no lugar da miña residencia permanente, o nivel de ruído tamén importa.

Comecei a busca en eBay. Aínda que atopei alí moitos Dell PowerEdge R410/R210 usados ​​por menos de 100 dólares, tendo experiencia traballando nunha sala de servidores, sabía que estas unidades 1U facían demasiado ruído e non eran aptas para o uso doméstico. Como regra xeral, os servidores de torre adoitan ser menos ruidosos, pero, por desgraza, había poucos deles en eBay e todos eran caros ou pouco potenciados.

O seguinte lugar para buscar foi Craiglist, onde atopei a alguén que vendía un HP ProLiant N40L usado por só 75 dólares. Estaba familiarizado con estes servidores, que normalmente custaban uns 300 dólares ata usados, así que enviei un correo electrónico ao vendedor coa esperanza de que o anuncio aínda estivese activo. Decatándome de que era así, eu, sen pensalo dúas veces, dirixínme a San Mateo para recoller este servidor, que a primeira vista me gustou definitivamente. Tiña un desgaste mínimo e, salvo un pouco de po, todo o demais era xenial.

Construír un sistema NAS doméstico económico en Linux
Foto do servidor, inmediatamente despois da compra

Aquí están as especificacións do kit que merquei:

  • CPUProcesador AMD Turion(tm) II Neo N40L de dobre núcleo (64 bits)
  • RAM: 8 GB de RAM non ECC (instalado polo propietario anterior)
  • flash: Unidade USB de 4 GB
  • Conectores SATA:4+1
  • NIC: NIC integrada de 1 Gbps

Nin que dicir ten que, a pesar de ter varios anos de antigüidade, a especificación deste servidor segue sendo superior á maioría das opcións de NAS do mercado, especialmente en canto á memoria RAM. Un pouco máis tarde, incluso actualicei a 16 GB ECC cun maior tamaño do búfer e unha maior protección de datos.

Selección de discos duros

Agora temos un excelente sistema de traballo e só queda seleccionar discos duros para el. Obviamente, por eses 75 dólares só conseguín o propio servidor sen o disco duro, o que non me sorprendeu.

Despois de investigar un pouco, descubrín que os discos duros WD Red son os máis axeitados para executar sistemas NAS 24 horas ao día. Para compralos, acudín a Amazon, onde merquei 7 copias de 4 TB cada unha. Basicamente, podes conectar calquera disco duro que prefires, pero asegúrate de que teñan a mesma capacidade e velocidade. Isto axudarache a evitar posibles problemas de rendemento RAID a longo prazo.

Configuración do sistema

Creo que moitos usarán o sistema para as súas compilacións de NAS FreeNAS, e non hai nada de malo con iso. Non obstante, a pesar da posibilidade de instalar este sistema no meu servidor, preferín utilizar CentOS, xa que o sistema ZFS en Linux está preparado inicialmente para un ambiente de produción e, en xeral, a xestión dun servidor Linux é máis familiar para min. Ademais, non me interesaba a elegante interface e as funcións que ofrece FreeNAS: a matriz RAIDZ e a compartición AFP eran suficientes para min.

Instalar CentOS en USB é bastante sinxelo: só tes que especificar USB como fonte de arranque e, ao iniciar o asistente de instalación, guiarache por todas as súas etapas.

Construción RAID

Despois de instalar con éxito CentOS, tamén instalei ZFS en Linux seguindo o indicado pasos aquí.

Unha vez completado este proceso, carguei o módulo ZFS Kernel:

$ sudo modprobe zfs

E creou a matriz RAIDZ1 usando o comando zpool:

$ sudo zpool create data raidz1 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609145 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609146 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609147 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609148
$ sudo zpool add data log ata-SanDisk_Ultra_II_240GB_174204A06001-part5
$ sudo zpool add data cache ata-SanDisk_Ultra_II_240GB_174204A06001-part6

Teña en conta que aquí estou usando os ID dos discos duros en lugar dos seus nomes de visualización (sdx) para reducir a posibilidade de que non se instalen despois do arranque debido a un cambio de letra.

Tamén engadín a caché ZIL e L2ARC que se executa nun SSD separado, dividindo ese SSD en dúas particións: 5 GB para ZIL e o resto para L2ARC.

En canto a RAIDZ1, pode soportar un fallo de disco. Moitos argumentan que esta opción de grupo non se debe usar debido á probabilidade de que o segundo disco falle durante o proceso de reconstrución do RAID, o que pode provocar a perda de datos. Ignorei esta recomendación, xa que facía regularmente copias de seguridade de datos importantes nun dispositivo remoto e o fallo de toda a matriz só pode afectar á dispoñibilidade dos datos, pero non á súa seguridade. Se non tes a posibilidade de facer copias de seguridade, sería mellor utilizar solucións como RAIDZ1 ou RAID2.

Podes verificar que a creación do grupo foi exitosa executando:

$ sudo zpool status

и

$ sudo zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
data                               510G  7.16T   140K  /mnt/data

De forma predeterminada, ZFS monta directamente o grupo recén creado /, que é xeralmente indesexable. Podes cambiar isto executando:

zfs set mountpoint=/mnt/data data

Desde aquí pode optar por crear un ou máis conxuntos de datos para almacenar os datos. Creei dous, un para a copia de seguridade de Time Machine e outro para o almacenamento de ficheiros compartidos. Limitei o tamaño do conxunto de datos Time Machine a unha cota de 512 GB para evitar o seu crecemento infinito.

Optimización

zfs set compression=on data

Este comando activa o soporte de compresión ZFS. A compresión usa unha potencia mínima da CPU, pero pode mellorar significativamente o rendemento de E/S, polo que sempre se recomenda.

zfs set relatime=on data

Con este comando reducimos o número de actualizacións a atimepara reducir a xeración de IOPS ao acceder aos ficheiros.

Por defecto, ZFS en Linux usa o 50% da memoria física para ARC. No meu caso, cando o número total de ficheiros é pequeno, pódese aumentar con seguridade ata o 90% xa que non se executarán outras aplicacións no servidor.

$ cat /etc/modprobe.d/zfs.conf 
options zfs zfs_arc_max=14378074112

Despois empregando arc_summary.py Podes verificar que os cambios teñan efecto:

$ python arc_summary.py
...
ARC Size:				100.05%	11.55	GiB
	Target Size: (Adaptive)		100.00%	11.54	GiB
	Min Size (Hard Limit):		0.27%	32.00	MiB
	Max Size (High Water):		369:1	11.54	GiB
...

Configurar tarefas recorrentes

usei systemd-zpool-scrub para configurar temporizadores do sistema para realizar a limpeza unha vez por semana e zfs-auto-snapshot para crear instantáneas automaticamente cada 15 minutos, 1 hora e 1 día.

Instalación de Netatalk

netalk é unha implementación de código aberto de AFP (Protocolo de arquivo de Apple). Seguindo instrucións oficiais de instalación para CentOS, recibín literalmente un paquete RPM montado e instalado en só un par de minutos.

Configuración da configuración

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
mimic model = TimeCapsule6,106

; [Homes]
; basedir regex = /home

; [My AFP Volume]
; path = /path/to/volume

; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes

[Datong's Files]
path = /mnt/data/datong
valid users = datong

[Datong's Time Machine Backups]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Nótese que vol dbnest é unha gran mellora no meu caso, xa que por defecto Netatalk escribe a base de datos CNID na raíz do sistema de ficheiros, o que non era nada desexable xa que o meu sistema de ficheiros principal funciona en USB e, polo tanto, é relativamente lento. Acendendo vol dbnest resulta en gardar a base de datos na raíz do volume, que neste caso pertence ao grupo ZFS e xa é unha orde de magnitude máis produtiva.

Activando portos no Firewall

$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp

sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp
Se todo estaba configurado correctamente, a túa máquina debería aparecer no Finder e Time Machine tamén debería funcionar.

Axustes adicionais
Monitorización SMART

Recoméndase supervisar o estado dos seus discos para evitar fallos do disco.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon para UPS

Supervisa a carga do UPS APC e apaga o sistema cando a carga se fai críticamente baixa.

$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd

Actualización de hardware

Unha semana despois de configurar o sistema, comecei a preocuparme cada vez máis pola memoria non ECC do servidor. Ademais, no caso de ZFS, a memoria adicional para almacenar en búfer será moi útil. Entón, volvín a Amazon onde merquei 2x Kingston DDR3 8GB ECC RAM por 80 dólares cada un e substituín a RAM de escritorio instalada polo propietario anterior. O sistema iniciouse a primeira vez sen ningún problema, e asegúrese de que o soporte ECC estaba activado:

$ dmesg | grep ECC
[   10.492367] EDAC amd64: DRAM ECC enabled.

Resultado

Quedei moi satisfeito co resultado. Agora podo manter constantemente ocupada a conexión LAN de 1 Gbps do servidor copiando ficheiros e Time Machine funciona perfectamente. Entón, en xeral, estou feliz coa configuración.

Custo total:

  1. 1 * HP ProLiant N40L = $75
  2. 2 * 8 GB de RAM ECC = 174 $
  3. 4 * WD Red 3 TB HDD = $440

En total = $ 689

Agora podo dicir que o prezo valeu a pena.

Fai os seus propios servidores NAS?

Construír un sistema NAS doméstico económico en Linux

Construír un sistema NAS doméstico económico en Linux

Fonte: www.habr.com

Engadir un comentario