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.

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. , 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 .
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 statusy
$ 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 dataDesde 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 dataEste 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=14378074112Luego, usando , 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 para configurar temporizadores de systemd para ejecutar limpiezas una vez a la semana y para crear automáticamente instantáneas cada 15 minutos, 1 hora y 1 día.
Instalación de Netatalk
es una implementación abierta de AFP (). Siguiendo S, 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 smartdServicio 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 apcupsdActualizació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 * HP ProLiant N40L = $75
- 2 * 8 GB RAM ECC = $174
- 4 * WD Red 3 TB HDD = $440
Total = $689
Ahora puedo decir que valió la pena.
¿Haces servidores NAS tú mismo?
Fuente: habr.com
