Construcción de un sistema NAS doméstico económico en Linux.

Construcción de un sistema NAS doméstico económico en Linux.

Yo, al igual que muchos otros usuarios de MacBook Pro, enfrenté el problema de la falta de memoria interna. Para ser más preciso, mi rMBP, que uso a diario, estaba equipado con un SSD de solo 256GB, lo cual, por supuesto, no era suficiente a largo plazo.

Y cuando además empecé a grabar videos durante mis vuelos, la situación solo se agravó. El volumen de los materiales grabados después de esos vuelos era de más de 50 GB, y mi desafortunado SSD de 256GB se llenó muy pronto, obligándome a comprar un disco externo de 1TB. A pesar de eso, después de un año, tampoco pudo manejar los volúmenes de datos que generaba, sin mencionar que la falta de redundancia y copias de seguridad lo hacían inadecuado para almacenar información importante.

Así que, en un momento, decidí construir un NAS de gran capacidad con la esperanza de que este sistema durara al menos un par de años sin requerir una nueva actualización.

Escribí este artículo principalmente como un recordatorio de qué y cómo hice las cosas en caso de que necesite hacerlo de nuevo. Espero que también les sea útil si deciden hacer lo mismo.

¿Quizás sería más fácil comprar?

Entonces, sabemos lo que queremos lograr; la pregunta que queda es: ¿cómo?

Primero investigué las soluciones comerciales y consideré, en particular, a la empresa Synology, que se suponía que proporcionaba los mejores sistemas NAS de nivel de consumidor en el mercado. Sin embargo, el costo de este servicio resultó ser bastante alto. El sistema más barato con 4 bahías cuesta más de $300, y además los discos duros no vienen incluidos. Además, el hardware interno de dicho paquete no resulta ser especialmente impresionante, lo que pone en duda su rendimiento real.

Entonces pensé: ¿por qué no construir un servidor NAS yo mismo?

Búsqueda de un servidor adecuado

Si vas a equipar un servidor así, lo primero que necesitas hacer es encontrar el hardware correcto. Para esta construcción debería ser adecuado un servidor usado, ya que no requerimos un rendimiento especial para las tareas de almacenamiento. Lo que sí es necesario destacar es una gran cantidad de RAM, varios conectores SATA y buenas tarjetas de red. Dado que mi servidor funcionará en mi lugar de residencia permanente, el nivel de ruido también importa.

Comencé mis búsquedas en eBay. A pesar de encontrar muchas Dell PowerEdge R410/R210 usadas por menos de $100, sabía por mi experiencia en un centro de datos que estos bloques de 1U generan demasiado ruido y no son adecuados para uso doméstico. Generalmente, los servidores en formato torre son menos ruidosos, pero, lamentablemente, había muy pocos disponibles en eBay, y todos eran caros o poco potentes.

El siguiente lugar donde busqué fue el sitio de Craigslist, donde encontré a una persona vendiendo un HP ProLiant N40L usado por solo $75. ¡Estaba familiarizado con estos servidores, que incluso usados, generalmente rondan los $300! Así que le envié un mensaje al vendedor con la esperanza de que el anuncio aún estuviera activo. Al enterarme de que sí lo estaba, sin pensarlo, me dirigí a San Mateo para recoger este servidor, que desde el primer vistazo me alegró mucho. Presentaba un desgaste mínimo y, a excepción de un poco de polvo, todo lo demás estaba perfecto.

Construcción de un sistema NAS doméstico económico en Linux.
Foto del servidor justo después de la compra

Esta es la especificación del conjunto que adquirí:

  • CPU: Procesador AMD Turion(tm) II Neo N40L de Doble Núcleo (64 bits)
  • RAM: 8 GB de RAM no-ECC (instalado por el propietario anterior)
  • Flash: Unidad USB de 4 GB
  • Conectores SATA: 4 + 1
  • (envío de datos).: NIC integrada de 1 Gbps

No hace falta decir que, a pesar de su edad de varios años, la especificación de este servidor aún supera a la mayoría de las opciones de sistemas NAS disponibles en el mercado, especialmente en memoria RAM. Un poco más tarde incluso hice una actualización a 16 GB de ECC con un mayor tamaño de búfer y protección de datos mejorada.

Selección de discos duros

Ahora que tenemos un excelente sistema operativo, solo queda elegir discos duros para él. Es obvio que por esos $75 solo obtuve el servidor sin HDD, lo cual no me sorprendió.

Después de hacer un poco de investigación, descubrí que para operar sistemas NAS en un modo 24/7, los HDD WD Red son los más adecuados. Para comprarlos, recurrí a Amazon, donde adquirí 4 unidades de 3 TB cada una. En esencia, puedes conectar cualquier HDD que prefieras, pero asegúrate de que sean del mismo tamaño y velocidad. Esto te ayudará a evitar posibles problemas de rendimiento en RAID a futuro.

Configuración del sistema

Creo que muchos utilizarán un sistema para sus ensamblajes NAS. FreeNAS, y no hay nada de malo en eso. Sin embargo, a pesar de la posibilidad de instalar este sistema en mi servidor, preferí usar CentOS, ya que el sistema ZFS en Linux está inicialmente preparado para un entorno de producción, y en general, la gestión de un servidor Linux me resulta más familiar. Además, no me interesaba la interfaz moderna y las funciones que ofrece FreeNAS, me bastaba con un arreglo RAIDZ y el uso compartido de AFP.

Instalar CentOS en un USB es bastante sencillo: solo hay que seleccionar el USB como fuente de arranque, y al iniciar, el asistente de instalación te guiará a través de todos sus pasos.

Configuración de RAID

Después de una exitosa instalación de CentOS, también instalé ZFS en Linux, siguiendo los pasos mencionados aquí.

Una vez completado este proceso, cargué el módulo del kernel ZFS:

$ sudo modprobe zfs

Y creé un arreglo RAIDZ1 utilizando el 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

Ten en cuenta que aquí estoy utilizando los ID de los discos duros en lugar de sus nombres mostrados (sdx), para reducir la posibilidad de un fallo en su montaje tras el arranque debido al cambio de letra asignada.

También añadí ZIL y caché L2ARC, ejecutándose en un SSD separado, dividiendo este SSD en dos particiones: 5GB para ZIL y el resto para L2ARC.

En cuanto a RAIDZ1, puede soportar la falla de 1 disco. Muchos afirman que esta opción de pool no debe utilizarse debido a la probabilidad de que falle un segundo disco durante la reconstrucción de RAID, lo que puede provocar pérdida de datos. Sin embargo, yo ignoré esta recomendación, ya que realizaba copias de seguridad de datos importantes en un dispositivo remoto, y la falla incluso de todo el arreglo podría afectar solo la disponibilidad de los datos, pero no su integridad. Si no tienes la opción de hacer copias de seguridad, lo mejor será utilizar soluciones como RAIDZ2 o RAID10.

Para verificar el éxito de la creación del pool, se puede realizar:

$ sudo zpool status

y

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

Por defecto, ZFS monta el pool recién creado directamente en /, lo cual generalmente no es deseable. Esto se puede cambiar ejecutando:

zfs set mountpoint=/mnt/data data

Desde aquí puedes elegir crear uno o varios datasets para almacenar datos. He creado dos, uno para la copia de seguridad de Time Machine y otro para almacenamiento de archivos general. He limitado el tamaño del dataset de Time Machine a una cuota de 512 GB para prevenir su crecimiento infinito.

Optimización

zfs set compression=on data

Este comando activa el soporte para la compresión ZFS. La compresión consume un mínimo de potencia de la CPU, pero puede mejorar significativamente el rendimiento de la E/S, por lo que se recomienda su uso.

zfs set relatime=on data

Con este comando reducimos el número de actualizaciones a atime, para disminuir la generación de IOPS al acceder a los archivos.

Por defecto, ZFS en Linux utiliza el 50% de la memoria física para ARC. En mi caso, dado que el número total de archivos es pequeño, esta cantidad se puede aumentar de forma segura al 90%, ya que no se ejecutarán otras aplicaciones en el servidor.

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

Luego, usando arc_summary.py , se puede verificar que los cambios han surtido efecto:

$ python arc_summary.py
...
Tamaño de ARC:				100.05%	11.55	GiB
	Tamaño objetivo: (Adaptativo)		100.00%	11.54	GiB
	Tamaño mínimo (Límite duro):		0.27%	32.00	MiB
	Tamaño máximo (y agua alta):		369:1	11.54	GiB
...

Configuración de tareas repetitivas

He utilizado systemd-zpool-scrub para configurar temporizadores de systemd para ejecutar limpiezas una vez a la semana y zfs-auto-snapshot para crear automáticamente instantáneas cada 15 minutos, 1 hora y 1 día.

Instalación de Netatalk

Netatalk es una implementación abierta de AFP (Apple Filing Protocol). Siguiendo las instrucciones oficiales de instalación para CentOSS, en solo unos minutos, tuve el paquete RPM compilado e instalado.

Configuración de la configuración

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Archivo de configuración de Netatalk 3.x
;

[Global]
; Ajustes globales del servidor
mimic model = TimeCapsule6,106

; [Homes]
; basedir regex = /home

; [Mi Volumen AFP]
; path = /path/to/volume

; [Mi Volumen de Time Machine]
; path = /path/to/backup
; time machine = yes

[Archivos de Datong]
path = /mnt/data/datong
valid users = datong

[Copias de Seguridad de Time Machine de Datong]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Tenga en cuenta que vol dbnest es en mi caso una mejora significativa, ya que por defecto Netatalk escribe la base de datos CNID en la raíz del sistema de archivos, lo cual es totalmente indeseable, ya que mi sistema de archivos principal se ejecuta en USB, lo que lo hace relativamente lento. Sin embargo, habilitar vol dbnest lleva a que la base de datos se guarde en la raíz del volumen, que en este caso pertenece al grupo ZFS y es significativamente más rápido.

Activar puertos en el 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
Si todo se ha configurado correctamente, su máquina debería aparecer en Finder, y Time Machine también debería funcionar.

Configuraciones adicionales
Monitoreo S.M.A.R.T

Se recomienda monitorear el estado de sus discos para prevenir fallos.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Servicio para SAI

Monitorea la carga del SAI APC y apaga el sistema cuando la carga se vuelve críticamente baja.

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

Actualización de hardware

Una semana después de configurar el sistema, comencé a preocuparme cada vez más por el hecho de que el servidor tenía memoria sin ECC. Asimismo, en el caso de ZFS, una memoria adicional para el almacenamiento en caché sería muy útil. Así que volví a Amazon y compré 2 módulos de 8 GB de RAM ECC Kingston DDR3 por $80 cada uno, reemplazando la RAM de escritorio instalada por el propietario anterior. El sistema se inició sin problemas desde el primer intento, y me aseguré de que el soporte para ECC estaba activado:

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

Resultado

Los resultados me dejaron muy satisfecho. Ahora puedo saturar continuamente la conexión LAN de 1Gbps del servidor copiando archivos, y Time Machine funciona a la perfección. Así que, en general, estoy satisfecho con la configuración.

Costo total:

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

Total = $689

Ahora puedo decir que valió la pena.

¿Haces servidores NAS tú mismo?

Construcción de un sistema NAS doméstico económico en Linux.

Construcción de un sistema NAS doméstico económico en Linux.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster