===== NAS a lo Pobre =====
~~NOTOC~~
**¿De qué trata?**
Este proyecto __prepara una PC antigua y la convierte en un NAS__ (Network Attached Storage): el espacio en disco se comparte a lo largo de la red local, y los demás clientes en la red pueden acceder y compartir cosas. La diferencia: el hardware utilizado es altamente obsoleto ([[https://ark.intel.com/content/www/es/es/ark/products/27438/intel-pentium-4-processor-2-40-ghz-512k-cache-533-mhz-fsb.html|el CPU es un Pentium 4 de 2002]]).
**¿Por qué?**
La intención principal del proyecto es darle un uso a lo que podría volverse una pila de basura electrónica, ya que no ofrece ningún beneficio como servidor: es lento, consume más energía por un mismo trabajo, no hay reemplazos para sus piezas en el mercado, etc.
El hardware en general en sí es inútil para tareas modernas, y mas específicamente quedan algunos discos duros IDE, también inútiles en otros lugares por su baja capacidad (de 80 a 160 GB), pero las piezas en conjunto son funcionales.
En algún lugar que se necesite capacidad de almacenamiento siempre podemos instalar un SSD de similar capacidad, que es bastante más eficiente y mucho más rápido. Pero podemos aprovechar este NAS para tareas que escriben continuamente datos, desgastando así estos discos y no el SSD.
**¿Funcionaría de forma permanente? Y de ser así, ¿en donde?**
Sí, asumiendo que las piezas no se dañen, o de ser el caso, conseguir un repuesto a precios módicos (gratis). Un lugar en donde podría necesitarse este NAS sería en despliegues de servicios de prueba en minidatacenters de LaOtraRed, que pueden estar funcionando en provincia.
==== Galería ====
{{gallery>proyecto:storage_a_lo_pobre?5&1920X1080&lightbox&modsort& }}
==== Inventario ====
^ Artefacto ^ Características y/o capacidades ^ Descripción ^
| Placa madre | Intel D845GVFN | |
| CPU | Intel(R) Pentium(R) 4 CPU 2.40GHz | XD |
| Memoria RAM | DDR 256M | |
| Memoria RAM | DDR 512M | Más memoria ayuda como caché |
| Pendrive | Sony 16GB | Me lo gané en el HM del 2015. Lo uso como / |
| Placa de expansión PCI | Ethernet 10/100 RTL8139 | Para no saturar el puerto de la placa madre, que también es 10/100 |
| Placa de expansión PCI | Ethernet 10/100 3c905C-TX/TX-M | idem |
| Disco duro | Hitachi Deskstar 7K80 HDS728080PLAT20 80GB | Storage |
| Disco duro | Hitachi Deskstar 7K250 HDS722580VLAT20 80GB | Storage |
| Disco duro | Hitachi Deskstar T7K250 HDT722516DLAT80 160GB | Storage (en reserva) |
==== Curiosidades aprendidas o relevantes ====
* Los cables IDE tienen dos "configuraciones": maestro y esclavo. Hay que mover los pines correctos para configurarlos (varía según el modelo), no es como en SATA que todo se conecta igual.
* Los cables IDE clásicos (IDC40/40) soportan solo ATA/33, que vuelve la unidad lentísima (~30 MB/s). Yo he usado cables IDC40/80 que soportan hasta ATA/133 (~60 MB/s).
* Alpine Linux es genial.
* Placas madres viejas como la Intel D845GVFN sí pueden bootear por USB (yo lo consideraba imposible). Creo que esto depende mucho del modelo de pendrive.
==== Bitácora ====
=== 2021 Diciembre ===
Salió Alpine 3.15. Intenté actualizar (por mi versionitis) y el sistema dejó de arrancar. Conectando el pendrive a mi PC, intenté resolverlo con un chroot pero no funcionó. Eventualmente arranqué el pendrive mediante una máquina virtual en VirtualBox y desactualicé a la versión 3.14, que anda funcionando bastante bien.
Originalmente estaba instalado un disco más, de 60 GB, pero empezó a escupir errores de I/O y preferí quitarlo. Como futuro proyecto podríamos desarmarlo con los chicos del HL, por si a alguien le interesa (hay gente que con uno se armó adornos para sus habitaciones)
[ 437.917475] sd 0:0:1:0: [sdb] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=0x08 cmd_age=48s
[ 437.917482] sd 0:0:1:0: [sdb] tag#0 Sense Key : 0x5 [current]
[ 437.917487] sd 0:0:1:0: [sdb] tag#0 ASC=0x21 ASCQ=0x4
[ 437.917492] sd 0:0:1:0: [sdb] tag#0 CDB: opcode=0x28 28 00 00 62 b1 80 00 05 80 00
[ 437.917499] blk_update_request: I/O error, dev sdb, sector 6467968 op 0x0:(READ) flags 0x4000 phys_seg 120 prio class 0
[ 437.917533] ata1: EH complete
[ 437.963566] ata1.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[ 437.963570] ata1.01: BMDMA stat 0x65
[ 437.963574] ata1.01: failed command: READ DMA EXT
[ 437.963582] ata1.01: cmd 25/00:00:00:d0:62/00:05:00:00:00/f0 tag 0 dma 655360 in
[ 437.963582] res 00/00:00:00:00:00/01:01:01:01:01/00 Emask 0x2 (HSM violation)
[ 437.963610] ata1: soft resetting link
[ 441.272977] ata1.00: configured for UDMA/100
[ 441.280749] ata1.01: configured for UDMA/33
[ 441.280780] ata1: EH complete
[ 471.849413] ata1: lost interrupt (Status 0x0)
[ 471.849444] ata1.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[ 471.849450] ata1.01: failed command: READ DMA EXT
[ 471.849460] ata1.01: cmd 25/00:00:00:d0:62/00:05:00:00:00/f0 tag 0 dma 655360 in
[ 471.849460] res 40/00:00:00:00:00/01:01:01:01:01/00 Emask 0x4 (timeout)
[ 471.849463] ata1.01: status: { DRDY }
[ 471.849496] ata1: soft resetting link
[ 472.042210] ata1.00: configured for UDMA/100
[ 472.049949] ata1.01: configured for UDMA/33
[ 472.049969] ata1: EH complete
=== 2021 Previo (de junio a nov) ===
Se me ocurrió la idea de forma random (why not).
Se supone que esa placa madre, con el BIOS actualizado y todo, no podía bootear desde un pendrive: esto lo quería ya que en mi previo trabajo un NAS tenía así su instalación: puedes armar y desarmar tu storage fácil, si algo de tu / (root) falla puedes instalar uno nuevo cómodamente, etc. Y resulta que sí, la placa sí puede arrancar desde un pendrive. Nunca pude hacer eso antes, fue raro (quizás es el modelo de pendrive).
Elegí Alpine Linux por ser muy ligero y llevarse bien con almacenamiento flash (que suelen desgastarse con cada escritura). Booteé por red con netboot.xyz (así me ahorro instalar un lector de CD) e instalé la versión 3.14. Luego, el resto de la configuración fue normal y sin ninguna sorpresa, usando los tutoriales de la wiki de Alpine.
Respecto al storage que usaremos desde otras partes de la red, dedicaremos los dos discos a la tarea y los configuraremos en **RAID 1**: la información se duplicará en ambos, y si un disco falla aún tendremos acceso a la información mediante el que queda.
Lo que hice fue:
- Instalar el SO y configurar la red. Los tres puertos de red se detectaron, y creé un puente ''br0'' entre ellos mas una configuración de red estática en ''/etc/network/interfaces''.
- Hacerles un re-reformateo en bajo nivel((Este re-reformateo ayuda a limpiar algún posible sector defectuoso, si este es magnético (pasa con discos viejitos). No ayuda si el disco ya está "sonando raro".)) borrando todo, con ''shred -n 1 -z -v /dev/sda'': una pasada a todo el disco con datos aleatorios, y otra pasada con ceros.
- Verificar si los discos están bien, con ''smartctl -t long /dev/sda''.
- Particionarlos (con tipo MBR y activando una sola partición grande) y formateándolos((Previamente usé ZFS, pero no fue buena idea y el uso de CPU era continuamente elevado)) [[https://wiki.alpinelinux.org/wiki/Setting_up_a_software_RAID_array|como RAID]]: ''mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb1''((Quise usar aquí el formato estable /dev/disk/by-id recomendado en otras partes como comunidades de ZFS, pero fueron ignoradas por mdadm.))
- Crear el sistema de archivos con ''mkfs.ext4 /dev/md0''
- Activar su entrada en /etc/fstab, para que sea accesible al iniciar la PC: ''UUID=01468727-d432-4b95-aecf-303c81e38b9c /storage ext4 rw,noatime,commit=60 0 3''
- [[https://wiki.alpinelinux.org/wiki/Setting_up_a_nfs-server|Instalar nfs-server]] y activar su entrada en /etc/exports, para que el storage se pueda acceder desde la red mediante NFS: ''/storage 10.0.0.0/8(rw,no_subtree_check,insecure,crossmnt,async)''((Uso async ya que el rendimiento de escritura aleatoria con bloques 4K es horrendo, como 40 KB/s. Además el rango de IP habilitado acá es solo un ejemplo.)).
Listo. El storage ya es accesible mediante NFS desde el resto de la red :)
---
Para el futuro, podríamos:
* Apagar los discos si nadie los está usando (no sé si los modelos de discos que tenemos nos permiten eso)