Este post fue ampliamente discutido en Hacker News.Alex Buznik, nas.net.ua amablemente proporcionó una traducción al ruso de dos partes: Parte 1 y parte 2.
esta publicación analiza las consideraciones de hardware, la instalación de Linux, la configuración de RAID de software, la robustez y el manejo de la corrupción de datos.,
he estado ejecutando durante una década un NAS autoconstruido en casa, así que pensé en escribir mi experiencia para que otros puedan regodearse sobre mis muchos fracasos y jadear de asombro ante mis pocos triunfos.
el NAS es perfecto porque es simple, seguro, modular y extensible y es barato porque está construido de segunda mano, piezas de productos básicos.,
el NAS almacena principalmente archivos (documentos y medios) en un RAID 6 de software y los sirve a través de recursos compartidos de Windows en la red local. Me mantengo alejado de las soluciones NAS propietarias porque un fallo de hardware haría que la recuperación de datos fuera difícil o imposible sin el mismo reemplazo de hardware. Cada pieza de hardware, desde los discos duros hasta la caja y la placa base, se ha cambiado por otra cosa en esta década, a veces más de una vez, por lo que el enfoque en la modularidad se pagó por sí mismo., Dado que la integridad y robustez de los datos a largo plazo es una preocupación, el NAS debe ejecutar algún tipo de nivel RAID redundante.,
objetivos
objetivo | Descripción | solución | ||
función | el NAS sirve como un sistema de archivos conectado a la red para uso doméstico; el NAS Opera unas pocas horas al día y está apagado o en espera la mayor parte del tiempo | hardware de productos básicos, software de código abierto, modularidad, manténgalo simple | ||
interoperabilidad | las plataformas informáticas de uso común deben poder acceder a los archivos del NAS. El hardware básico debe poder conectarse al NAS., | Samba (también conocido como Windows shares) en Ubuntu, USB, SATA. Conecte LAN al enrutador Wifi, hace la resolución de nombres y el servidor de tiempo. Acceda y gestione con SSH. | ||
modularidad | los componentes de Hardware y software deben ser intercambiables sin rediseñar todo el sistema | x86 PC platform, Linux, Docker | ||
Control | quiero controlar qué software está instalado en el NAS y qué hace | Ubuntu 18.,04 LTS | ||
integridad de los datos | los archivos de tamaño arbitrario (dentro de lo razonable) y el contenido deben almacenarse en el NAS y no corroerse ni perder integridad con el tiempo | RAID 6 con 4 discos duros, ext4fs con suma de comprobación, scrubbing, RAID ensamblado manualmente, ECC RAM. Firmar archivos con par2., | ||
Noise | el ruido debe ser bajo y tolerable | HDDs en espera, SSD como disco principal del sistema operativo, escritura-sobre todo, mucha RAM, refrigeración pasiva | ||
costo | Use hardware de productos básicos y software libre, de código abierto | hardware de productos básicos de 2a mano, discos duros en lugar de SSD | evite el mantenimiento crítico del tiempo | UFW firewall acepta conexiones solo desde la red interna, sin actualizaciones automáticas, software limitado, acoplador, no accesible desde Internet., |
compacto | las dimensiones físicas del NAS deben ser pequeñas; sin desperdicio de espacio | 2nd hand HP proliant microsever gen8 |
No objetivos
- tareas típicas del servidor multimedia: streaming, codificación, transcodificación, etc
- bitcoin mining
- torrenting
- todo lo demás 🙂
conseguir el hardware
conseguir el hardware correcto es la parte difícil(juego de palabras), ya que es la plataforma para la modularidad, el precio, el consumo de energía, el tamaño y muchos otros objetivos que me interesan., Hay muchos servidores NAS propietarios baratos y de segunda mano, pero no me gusta la idea de sistemas de hardware y software cerrados. Por ejemplo, si un controlador RAID de hardware almacena datos en un formato propietario en los discos duros, necesitaría exactamente el mismo controlador de reemplazo para recuperar esos datos en caso de un fallo del controlador.
el espacio también es un problema, por lo que el servidor debe ser compacto al tiempo que permite ejecutar Linux en él; eso es bastante difícil de encontrar, ya que la mayoría de los NAS compactos que existen son sistemas propietarios y no permiten instalar su propio sistema operativo., Hay muchas PC y servidores x86 usados, pero en su mayoría son demasiado grandes o no tienen suficientes bahías de unidades o puertos SATA. La conexión de unidades a través de USB tampoco es una opción debido a la baja velocidad, el mayor consumo de energía y los requisitos de espacio. El primer par de revisiones de mi NAS alrededor de 2010 usaron un barebone compacto y más tarde una caja de mini torre alrededor de la cual tenía 3 o 4 bahías de disco duro, pero encuentro que esos formatos de caja son más difíciles de conseguir en estos días. Suerte que si usted consigue uno a un precio asequible!
Me encontré con un microservidor HP proliant Gen8 usado y no me he arrepentido desde entonces., El modelo base venía con 2GB ECC RAM, una CPU Celeron De 2 núcleos y sin discos duros por unos 100€. Hay una excelente revisión de ese servidor en Louwrentius. El servidor es extremadamente compacto (aproximadamente 26 cm cada dimensión), razonablemente bajo ruido (aunque no silencioso) en espera, tiene una CPU enfriada pasivamente, dos puertos ethernet GBit, cuatro bahías de disco duro de 3,5″ y una ranura de formato propietario algo oculta para un quinto disco de bajo perfil de 2,5″ que uso para un SSD., Las bahías de unidades pueden recibir discos SATA directamente, mientras que la 5ª ranura requiere un adaptador FDD macho a SATA de 4 pines y un cable SATA para conectar un SSD de 2,5″ a la placa base. Como una ventaja adicional, el servidor cuenta con ILO que permite el acceso remoto al servidor con un navegador web, por lo que no es necesario un teclado o una pantalla.
admito que el servidor no es 100% partes de productos básicos; por ejemplo. una falla en la placa base o la CPU requeriría Ordenar exactamente las mismas piezas de repuesto (lo que probablemente será costoso) o construir un servidor completamente nuevo en una plataforma diferente., Sin embargo, la RAM, la red y el almacenamiento son bastante estándar, Corro Ubuntu en él y los beneficios descritos anteriormente pesan lo suficiente como para correr ese riesgo. Alrededor de 6 años más tarde, el servidor todavía se ejecuta sin ningún problema; salvo el sesgo de sobreviviente, creo que ese enfoque funcionó bien.
el servidor que compré tenía firmware de 2014 y HP afortunadamente comenzó a publicar actualizaciones gratis recientemente, la última de finales de 2019 con la que flasheé el microservidor para una interfaz de usuario de administración HTML5.,
el servidor sufrió varias actualizaciones a lo largo de los años; desde una matriz RAID5 de tres discos duros de 2 TB hasta la configuración actual de 3X6TB + 1X8TB + 1x 512MB SSD y una actualización de CPU a un modelo Xeon y una actualización de RAM a 16GB ECC., Reutilizo casi exclusivamente discos duros USB externos (después de abrir, extraer el disco duro y despedirme de la garantía) que son más baratos que los internos considering al principio eso es sorprendente teniendo en cuenta el hardware adicional (estuche, adaptador USB A SATA, cables, fuente de alimentación) que vienen con; sin embargo, la garantía y las especificaciones técnicas son significativamente inferiores a las de las unidades internas, lo que explica la diferencia de precio. Dado que el servidor ejecuta un RAID 6 (cuyo objetivo es sobrevivir a los fallos del disco), creo que es un riesgo aceptable.,
el servidor está conectado a través de un cable Ethernet al enrutador Wifi doméstico; las velocidades de red están cerca de 100 MB/s, lo que está bien, los puertos USB3 pueden hacer alrededor de 40 MB/s.
instalación
ILO hace que la configuración del servidor sea fácil incluso sin un teclado físico y una pantalla. Comencé con Ubuntu server LTS 14.04, cambié a 16.04 y actualmente estoy ejecutando 18.04. Las mejoras nunca funcionaron en el lugar, en cada caso se requería una nueva instalación.
recomiendo instalar una VM (como VirtualBox) en su estación de trabajo, iniciando Ubuntu Server 18.,04 desde una imagen en vivo e instalando Ubuntu en un disco duro USB. No pude conseguir que el ProLiant microserver arrancara con UEFI, por lo que se requiere una instalación tradicional de grub BIOS.
los cuatro discos duros se particionan de acuerdo con el esquema siguiente: una partición de 1 MB Al principio para el cargador de arranque GRUB, una partición de 50 GB Para Ubuntu y una partición de 5,5 TB para el RAID.
utilicé el instalador alternativo de Ubuntu Server 18.04 para configurar las particiones de Ubuntu como un RAID 1 que refleja esa partición en todos los discos duros., El instalador puede instalar Ubuntu en ese RAID 1 y GRUB puede arrancar desde él. En caso de un fallo del disco duro, simplemente quitando ese disco duro permitirá que el servidor arranque de nuevo.
+-------------------+| 1MB bios_grub || |+-------------------+| 50GB Ubuntu ext4 || RAID 1 |+-------------------+| 5.5TB Data || RAID 6 |+-------------------+
para que el instalador funcione, es necesario que haya al menos dos discos en el RAID. Más discos se pueden agregar más adelante. Solo asegúrese de instalar el gestor de arranque GRUB en todos los discos con:
grub-install /dev/sdX
en Mis primeros experimentos Ubuntu pudo arrancar bien, pero no activó las tarjetas ethernet. Esto requiere un poco de jugueteo con netplan.
/ etc / netplan / 01-netcfg.,yaml
network: version: 2 ethernets: eno1: dhcp4: true dhcp6: true optional: true eno2: dhcp4: true dhcp6: true optional: true
Consideraciones sobre el RAID de arranque
como se explica en» instalación», Ubuntu arranca desde un RAID 1. md refleja los cambios en todas las particiones de arranque, lo cual es impresionante. El RAID de arranque está mapeado bajo /dev / md0-no encontré una manera de asignarle un nombre, pero encontré que el nombre del dispositivo era estable. Desafortunadamente Ubuntu accederá constantemente a la unidad de arranque durante el funcionamiento normal, lo que en mi caso significa que cuatro unidades siempre giran., He intentado varias cosas como reasignar directorios de registro a un disco ram y pre-carga de archivos, pero la selva resultante de scripts es imposible de mantener. La solución resultó ser bastante simple y elegante, después de un hackeo: instalé un SSD en la bahía del disco duro 5 y lo agregué al RAID de arranque 1. Mientras que la duplicación funcionó, la bios Proliant (gen8) no arrancará desde la 5ta bahía si encuentra discos duros en otro lugar., La solución es un script que se ejecuta después del arranque y falla todos los discos duros mecánicos en el RAID:
mdadm --manage /dev/md0 --fail /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
el script es un poco más complejo que eso, ya que los nombres de los dispositivos no son estables y deben tenerse en cuenta varias condiciones de error (P. el RAID no debe tocarse si un disco duro está fallando), pero ese es un tema para una publicación diferente. MD olvidará que los discos han sido marcados como fallidos después de un reinicio, que es un valor predeterminado útil, ya que permite que el servidor arranque desde cualquier disco duro disponible.,
importante: como escribí anteriormente, rara vez actualizo el software en el servidor, pero las pocas veces que se necesita una actualización, los discos duros que faltan deben volver a insertarse en el RAID para que las actualizaciones se reflejen en todas las particiones de arranque.
consideraciones de RAID de datos
el segundo RAID de software que se ejecuta en el servidor también es importante: el RAID de datos., Mis necesidades de almacenamiento han competido históricamente con los avances en la tecnología de almacenamiento, por lo que el RAID de datos sufrió todo tipo de transformaciones a partir de un RAID de disco dual 1 a un RAID de disco 3 5 a un RAID de disco 3 1 a un RAID de disco 4 6 donde se encuentra actualmente.
RAID 1 es imho la mejor solución si se lo puede permitir; es la más sencilla de administrar, ofrece la mayor consistencia de datos y nivel de disponibilidad, el mejor rendimiento y es, como un efecto secundario agradable, también la más silenciosa de operar gracias al modo de escritura en su mayoría que permite girar todos menos un disco cuando los datos solo se leen desde la matriz., Lamentablemente, mis necesidades de datos superan lo que puedo hacer con un RAID 1.
RAID 5 es un buen compromiso entre redundancia y eficiencia de almacenamiento, por lo que operé el RAID de datos durante muchos años en ese modo. Sin embargo, la configuración es un poco arriesgada, como demuestra un experimento: imagine que un disco duro se rompe repentinamente en medio de la noche. En el momento en que note el fallo, procure un reemplazo e instálelo al menos 2 días han pasado, más otras 12 horas para una resincronización completa., Por lo tanto, la matriz permanece degradada y desprotegida durante 2,5 días; cualquier fallo adicional en ese período de tiempo destruye todos los datos irrevocablemente.
RAID 6 es actualmente el nivel de elección para mi caso de uso: ofrece la mitad de la capacidad total al doble de disponibilidad, pudiendo sobrevivir a un doble fallo de disco. El único inconveniente es que el modo «escribir principalmente» de mdadm no funciona, por lo que cualquier acceso al RAID requiere cuatro discos activos y es bastante ruidoso.
al crear el RAID con mdadm me aseguré de asignarle un nombre, por lo que ahora está mapeado bajo /dev/md/data.,
para aumentar la consistencia de los datos, hago que el NAS ejecute un script que borra el RAID de datos. Este es un proceso de larga ejecución, E/S intensivo y ruidoso que mantiene los discos ocupados y probablemente debería ejecutarse cuando no se necesita el NAS; para un NAS doméstico que es de lunes a viernes durante las horas de oficina. Cron es tu amigo.
una nota sobre el particionamiento: puede usar dispositivos raw (/dev/sdb, /dev/sdc without) sin particiones, pero no se recomienda., Tener particiones (con etiquetas como RAID_1) se asegura de que en caso de una reconstrucción o intercambio de disco, la unidad no se instale accidentalmente en un equipo diferente y los datos no se sobrescriban (una unidad sin particionar siempre parecerá no contener datos y, por lo tanto, «segura» para formatear).
cifrado RAID
el siguiente paso es configurar el cifrado para el RAID de datos. Usé dmcrypt LUKS para eso, almacenando la llave en una memoria USB. Asegúrese de hacer una copia de seguridad tanto de la clave y el encabezado LUKS, de lo contrario los datos no serán accesibles en caso de un encabezado dañado., El beneficio del cifrado es que puedo mover el servidor sin temor al robo de datos, siempre y cuando el RAID cifrado y la clave se transporten a través de diferentes rutas.,
el RAID de datos encriptados es un dispositivo de bloque asignado a /dev/mapper/data
el sistema de archivos
el sistema de archivos de elección es ext4 con algunos ajustes:
mkfs.ext4 -O metadata_csum -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/data
estas opciones permiten la suma de verificación de metadatos que aumenta la consistencia de los datos y deshabilita la inicialización perezosa; esto último es especialmente importante para una gran matriz con discos mecánicos, ya que la inicialización inodo tomará varios días de lo contrario.
en el espíritu de la modularización, el RAID de datos no se monta en /etc/fstab, sino que se monta con un script y mdadm durante el arranque., Ese script también monta el sistema de archivos RAID de datos con las opciones noatime, nodiratime y data = journal, ejecuta fsck antes de montarlo, ajusta el stripe_cache_size y retoca la administración de energía.
también tenga en cuenta que para sistemas de archivos ext4 grandes, el primer acceso de escritura puede tomar mucho tiempo, así que eche un vistazo a esta solución.
la CPU Celeron De Proliant se convirtió en un cuello de botella con dmcrypt, ya que carece de cifrado asistido por hardware, pero una actualización barata a un Xeon E3-1220L para el mismo zócalo resolvió eso mientras también reducía a la mitad el TDP a 17 vatios.,
actualización de septiembre de 2020: no recuerdo si este ha sido siempre el caso o si comenzó a ocurrir después de una actualización, pero los discos duros RAID de datos nunca girarán, incluso si están inactivos. La razón es la protección multi mount de ext4 que escribe constantemente en el sistema de archivos. La protección de montaje múltiple se puede ajustar o deshabilitar (eso es lo que hice) con tune2fs.
más seguridad de los datos!
en 2020 ext4 y md, desafortunadamente, todavía no son capaces de contrarrestar eficazmente la putrefacción de bits que corrompe silenciosamente los archivos., Escucho y Leo testimonios contradictorios sobre ZFS que supuestamente maneja mejor la corrupción de datos y lo probará en algún momento. Por ahora, uso md5sum para crear y verificar sumas de comprobación de mi copia de seguridad .alquitrán.archivos gz y parchive para crear archivos de recuperación de errores. He escrito sobre parchive antes y sigo siendo hasta el día de hoy un fan dedicado.
Automation
he mencionado «scripts» siniestros aquí y allá, pero la fea verdad sigue siendo que la configuración actual requiere una cantidad considerable de scripts para ejecutarse sin problemas., En el lado positivo, la mayor parte de la operación del día a día ahora está programada y automatizada, no requiere intervención manual: las incursiones se ensamblan por su cuenta, son tolerantes a fallas y el servidor funciona incluso cuando uno o dos discos duros se descomponen. Las copias de seguridad se archivan y se suman automáticamente y una verificación periódica alerta sobre los archivos dañados que luego manualmente (me gusta estar involucrado en estas cosas correct) corregir. Algunos de los scripts del servidor están disponibles en mi repositorio de github, más seguirán pronto.,
Network
El servidor utiliza los siguientes componentes de red:
- netplan para administrar las dos tarjetas ethernet incorporadas (ver instalación)
- UFW para bloquear todo el tráfico entrante, excepto SSH, samba y netbios
- netbios para anunciar el nombre del servidor al enrutador doméstico y otros equipos
- samba para compartir archivos en la red local
estoy usando samba en un modo de solo lectura; algunos directorios (como música y películas) se comparten con acceso de invitados, algunos otros directorios con documentos personales están protegidos con contraseña, pero de nuevo solo lectura., Cualquier operación de escritura en el sistema de archivos de datos requiere acceso SSH. Desde ext4 no ofrece instantáneas todavía Estoy preocupado por que después de la medianoche «borrar por error» después de un par de bebidas; no he encontrado una buena solución para eso todavía. Navegar por las acciones de Samba en Ubuntu nautilus puede ser lento para directorios grandes – si se vuelve demasiado difícil de manejar, considere usar CIFS o sshfs.,
Video& Graphics
nunca pensé que necesitaría esto, pero finalmente llegó el día en que necesitaba conectar una pantalla física y un teclado al gen8, y no pude ejecutar un entorno de escritorio. El gen8 tiene una tarjeta gráfica Matrox g200 para la que Ubuntu dejó de ser compatible hace mucho tiempo, pero hay una manera de obtener algunos gráficos de ella.
primer paso: instale el soporte de escritorio en el entorno del servidor:
apt install ubuntu-desktop
después de reiniciar, notará una pantalla de inicio de sesión de 640×480. No hay otros modos disponibles en la configuración de pantalla., Este comentario sobre un problema relacionado ayudó:
# Install vesa xserver. Was not needed in my case.apt-get install xserver-xorg-video-vesa # Boot into text modeinit 3 # Create new X-server configurationX -configure # Install configuration. The original post says to replace mga with vesa; in my case, vesa was already pre-filled.mv xorg.conf.new /etc/X11/xorg.conf# Boot into graphicsinit 5
advertencia justa: la aceleración de gráficos no está disponible y la resolución máxima es 1280×1024.
dato curioso que descubrí mientras investigaba: el gen8 tiene un conector DisplayPort no estándar en la parte delantera detrás de la puerta.