proyecto
nombreNAS a lo Pobre
mantenedorLooper
palabrasclavenas, linux, raid, mdadm, alpine
descripcionTomar una Pentium 4 con discos duros de hace una década, y usarlo como servidor de archivos
fechainicio2021/07/08 00:00
ubicacionHacklab de Looper
estadoActivo
¿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 (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.

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)
  • 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.

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:

  1. 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.
  2. Hacerles un re-reformateo en bajo nivel1) borrando todo, con shred -n 1 -z -v /dev/sda: una pasada a todo el disco con datos aleatorios, y otra pasada con ceros.
  3. Verificar si los discos están bien, con smartctl -t long /dev/sda.
  4. Particionarlos (con tipo MBR y activando una sola partición grande) y formateándolos2) como RAID: mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb13)
  5. Crear el sistema de archivos con mkfs.ext4 /dev/md0
  6. 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
  7. 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)4).

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)

1)
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".
2)
Previamente usé ZFS, pero no fue buena idea y el uso de CPU era continuamente elevado
3)
Quise usar aquí el formato estable /dev/disk/by-id recomendado en otras partes como comunidades de ZFS, pero fueron ignoradas por mdadm.
4)
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.
  • proyecto/storage_a_lo_pobre.txt
  • Última modificación: 2022/02/07 11:14
  • por looper