Al parecer otras personas en internet tuvieron exactamente el mismo síntoma con exactamente la misma placa: al conectar mas de un disco por canal, todo se cae a pedazos:
En ambos casos la solución fue la misma: quejarse con el vendedor, que reconoció la falla y les mando una placa de remplazo. El tema es que… remplazar la placa es prácticamente inviable en mi caso porque:
Tendría que mandar la placa a otro país
La placa fue comprada hace meses, solo que recién ahora pude probarla con mas de un disco por puerto.
Incluso si lograse que el vendedor me mande una de remplazo, probablemente Aduanas quiera cobrarme el remplazo y la verdad no tengo ganas de averiguar ni de discutir.
Por lo tanto mis opciones son:
Hacerla andar.
Comprar otra.
Dado que tratar de hacerla andar es gratis, opté primero por esa vía.
Flash-me up
Lo primero que se me ocurrió fue tratar de flashear la misma versión de firmware que tiene la controladora que esta funcionando sin problemas (LSI SAS9211-8i, lo mismo pero con puertos internos en lugar de externos). Esto es porque al bootear el PC que oficia de homeserver, solo veo esa controladora en la BIOS de LSI, cuando debería de ver ambas.
Dado a que soy propenso a mandarme cagadas, me niego a realizar cualquier operación de flasheo en la misma maquina que tiene la controladora que funciona, lo ultimo que preciso son 2 placas rotas. Así que revolví entre las sobras de hardware y rearme el viejo server:
Luego de armar la maquina con sobras, instalar Windows (por lo general siempre hacen el utilitario de flasheo para Windows, no tanto para otros sistemas) y bajarme el instalador junto a los firmwares de la pagina de Broadcom (si, LSI fue vendida demasiadas veces) me puse a flashear la controladora… sin mucha suerte.
Lo único que conseguí fue cargar la ROM, y ahora si muestra el utilitario de configuración en el arranque de la maquina, pero por algún motivo este se cuelga al conectarle una cantidad cualquiera de discos. Hmmm….
Resulta que tras probar y probar se me ocurrió intentar borrar toda la flash, pero por algún motivo que desconozco me decía que esa operación “no estaba soportada en esta plataforma”.
Ok, no te gusta Windows? Probemos Linux.
Trate de correr los utilitarios de LSI en un Live CD de Ubuntu, pero tampoco pude borrar la flash, esta vez con un error distinto (el cual no recuerdo y del cual no tome nota porque estaba ansioso).
La tercera es la vencida la tercera y punto
Doblemente derrotado, empece a buscar en internet a ver si alguien tenia alguna magia para poder borrar la flash entera y poder flashear esto como corresponde. Y, el que busca encuentra dicen… (a veces).
Resulta que ese post tiene todo lo que precisaba saber. De hecho, tiene mas de lo que precisaba para solucionar el problema, ya que el habla de flashear ciertas controladoras Dell Perc para que se comporten como LSI.
Siguiendo las instrucciones de ese post, al principio tampoco pude borrar la flash hasta que encontré una sección sobre maquinas UEFI. Resulta que se puede utilizar el sas2flash desde un shell EFI (es necesario tener el ejecutable sas2flash.efi), desde el cual finalmente pude vaciar la flash entera y flashear el firmware correctamente.
Como bonus, no me moleste en cargar la BIOS en esta controladora así me ahorro los 10-15 segundos extra que le agrega al proceso de boot, dado que nunca pienso bootear desde discos que se encuentren en la caja externa.
Importante:Si alguien por casualidad se encuentra con este problema y decide borrar la flash entera, que tome nota de la SAS Address ya que tras borrar la flash hay que restablecerla manualmente usando sas2flash.
Otra vez
Terminada toda esta porquería, pruebo por ultima vez para ver si tengo que sentarme a esperar un mes a que llegue un remplazo de USA o si puedo empezar a romper usar mis discos. Dejo que Windows (si Windows, es provisorio) arranque, conecto todo, prendo la fuente de la caja… y…
Como debería de haber sido desde un principio, aparecieron los ocho discos de 2TB. Como no se bien que hacer ahora para probar que funcionen, puse a Windows a hacer maldades, también conocido como un “spanned volume” que es una maldad en si.
Hipótesis
No estoy 100% seguro, pero mi sospecha esta en que había algún problema en la NVDATA/NVFLASH (o como sea que se llame). No tengo mucha evidencia al respecto, ni estoy familiarizado lo suficiente con estos dispositivos, pero dado a que el error aparecía al agregar múltiples discos, y que me fallaba al intentar acceder a la configuración una vez cargada la BIOS en la controladora, me hace sospechar que NVDATA contenía información incompatible con las versiones de firmware que tenia la placa de fabrica y en sus posteriores flasheos. Sumado a esto, leyendo en internet, la mayoría de estas placas son usadas o refurbished, muchas de ellas estuvieron anteriormente en maquinas e incluso eran rebrandings de otros OEM como por ejemplo HP e IBM. Posiblemente el vendedor flashea todas estas controladoras para que se comporten como una LSI y prueba con un disco por canal, asumiendo que si eso funciona, entonces la placa entera funciona. Pero bueno, es tan solo una hipótesis y no muy relevante ahora que se como vaciar correctamente la flash en caso de volver a tener este problema con una nueva controladora en un futuro.
Conclusión?
En los próximos días sabre si la controladora funciona como corresponde, ademas de si los discos están aceptable-mente sanos. Caso contrario, supongo que habrá una parte III, pero espero que no porque ya hice demasiado post para lo que va del año.
Capaz que para compensar, no posteo nada hasta el 2030.
Erase una vez un pool ZFS que se estaba quedando sin espacio. Hubieron intentos de borrar porquerías pero la realidad es que eso solo sirvió para comprar tiempo.
storage 6.9T 5.4T 1.6T 78% /storage
Resulta que al momento todavía quedan unos 1.6TB libres, que debería darme para un buen rato, pero no esta bueno llenar el pool al tope de su capacidad. Con respecto a ZFS, de vez en cuando vas a ver gente que cita la regla de no mas de 80% de utilización. La razón casi siempre mencionada es desempeño, pero también existen preocupaciones en un eventual escenario de reconstrucción del array pool.
Decidí que la mejor opción en mi caso es agregar mas discos y crear un segundo pool, moviendo ciertas cosas menos importantes a este nuevo pool.
Dame mas
Al igual que con el pool actual, voy a utilizar RAID-Z2 (paridad doble) y no RAID-Z1 (paridad simple) ya que considero pasando los 5 discos, en capacidades de 2TB en adelante, el riesgo de una segunda falla durante la reconstrucción del array pool es bastante real. Si te quedan dudas, Wendell de Level1Techs lo explica en un momento en un video de media hora sobre RAID, ZFS y cosas.
Teniendo en mira agregar 8 discos de 2TB cada uno, tengo que resolver donde ponerlos ya que en el servidor solo queda lugar para 1 disco. La cagada de vivir en Uruguay [1], es que prácticamente no hay oferta (ni demanda) de gabinetes ya sea nuevos o usados que puedan servir para estos propósitos. Lo único viable es comprar una torre de PC con suficientes bahías de discos pero eso ocuparía un montón de espacio innecesario ya que no pienso armar otro PC.
La alternativa seria, traer jaulas (o “cages”) para discos de USA o algún otro lado, las placas y cables necesarios para conectar todo y finalmente armar una caja de la manera mas simple posible simplemente para no tener una aglomeración de cosas frágiles sueltas por ahí.
Lista de componentes
Resulta que los componentes mas importantes en todo esto (a excepción de los discos duros) hay que traerlos de afuera (en este caso use Amazon vía courier) dado que en Uruguay no se consigue nada de esto, para variar:
Controladora de discos con puertos externos (2x SFF-8088) LSI Logic SAS9207-8e USD 75
Total de todo lo que uno esta obligado a traer de afuera porque no se consigue en Uruguay (gracias estado retrogrado que protege la producción nacional de controladoras de disco PCI-E): USD 193. No incluye envío dentro de USA a la casilla del courier ni el envío del courier a Uruguay.
A todo esto hay que sumarle que preciso también una fuente capaz soportar 8 discos duros. Use una Corsair CX 500 que tenia en una caja, la cual creo que ya no se consigue en la vuelta pero algo similar seria una Cooler Master Elite V3 500W (USD 45, Thot Computacion) o una EVGA 500W 80 Plus (USD 71, Banifox). Y si, siempre puedo ir por la fuente genérica de 13 dólares, pero tené en cuenta que esto va a estar funcionando 24×7, anda saber durante cuantos años.
Finalmente, quedan los materiales para armar la caja. Lamentablemente no conserve boletas de los tornillos, tuercas y tablas que use, pero te podrás imaginar que todo esto fue lo mas barato de todo, por un amplio margen.
Primer intento
Obviamente como buen blogger no tengo documentado casi nada del proceso de armar la caja, aunque para tu consuelo, no es para nada complicado. Hubieron dos intentos, en el primero conseguí un par de tablas de MDF por poco y nada y las corte mas o menos a medida y trate de armar todo, de manera medio experimental viendo que encaja y que no y haciendo agujeros a medida que resultase necesario.
Segundo intento
Resulta que entre que termine la caja y compre los discos paso un buen tiempo, dado que todavía no encontré la manera de que me paguen por hacer nada (aun…). Días antes de pasar a levantar los discos duros, anduve buscando requeches de tabla para armar otra cosa y justo vi tablas MDF de la mitad de espesor y se me dio por comprar un par de tablas de mas y ver si podía armarlo un poco mas prolijo ya que a mi criterio quedo una terrajada barbara como se puede apreciar en las fotos de arriba.
Resulta que armado con tablas mas finas quedo mas prolijo y ademas resuelve un problema que no pensé la primera vez: el grosor de los cables Mini SAS externos no los hace muy maleables, por lo cual conectarlos al adaptador pasivo era bastante caótico.
Puesta en marcha
Una vez conectado a la controladora y con el power encendido vamos a ver que aparece en el server:
Bueno, al parecer algo no le gusto al driver, lo cual es raro dado que antes de que llegaran los discos probé todo con dos discos (un disco por puerto Mini SAS).
Tras probar de conectar y desconectar todo, probar con otros pares de cables, de hacer power-cycle, de cambiar la controladora de red de slot PCI-Express sigo sin poder dar con la tecla. Aunque me di cuenta de dos cosas que no había notado hasta el momento:
La placa es una LSI Logic SAS9207-8e,. pero Linux la ve como una LSI SAS2308...
La placa no aparece en el utilitario de LSI cuando la maquina bootea, solo la controladora con las interfaces internas (LSI Logic 9211-8i)..
Edit: investigando como resolver el problema, aprendí que SAS9207-8e es el nombre de la placa mientras que SAS2308 es el nombre de la controladora. El primero es la placa entera, el segundo es el chip encargado de manejar los discos y otras cosas…
Esto me da a creer que hay algo raro con la placa, lamentablemente me gano el cansancio así que otro día pruebo a ver que sucede con esta placa y en el peor de los casos tendré que comprar otra.
Pareciera que a donde mire, todos los chicos cool están hablando de la maravilla que es tener una red domestica a 10 Gb/s, basta fijarse en los resultados de YouTube cuando uno busca “10 Gigabit”:
10 Gigabit Ethernet hoy
Si bien 10 Gigabit Ethernet existe como estándar desde 2002 (con la ratificación de 802.3ae 17 años atrás, o sea, una eternidad), la realidad es que no se ha movido mucho fuera del mercado datacenter.
10GbE ya no es mas aquella vedette del networking dado que existen soluciones de 40Gbps y 100Gbps que tienen mucho mas sentido y por lo tanto esta apareciendo equipamiento 10GbE usado, lo suficientemente barato como para que YouTubers con plata entusiastas se tiren a probar 10GbE.
Para aquellos que no les gusta comprar usado, también están apareciendo soluciones de bajo costo, como el MikroTik CRS305-1G-4S+IN, a USD 149 (en origen, sumale envío y la usura de aduanas si vos también estas en Uruguay)
Lista de compras
Esta muy copado esto de 10Gbps pero que uso podemos darle realmente dentro del hogar?Nada de cosas, vamos a ver primero en que podemos quemar el dinero y dejamos las excusas para después.
Supongamos que fuera a comprar todo lo necesario para probar esto de 10GbE, con el objetivo de conectar la PC de escritorio con el servidor que esta a 2 o 3 metros de distancia, dejando el resto de la red como esta, a 1Gbps.
Acá es donde se empieza a complicar, porque tenemos varias opciones y el precio varia considerablemente.
Uno pensaría que la opción mas simple y económica seria la de usar 10Gbps sobre cable UTP CAT6a (10GBASE-T, o sea el cobre de toda la vida). Sin embargo, por el costo de una placa PCI-E 10GBase-T se puede conseguir una placa con dos jaulas SPF+ y un modulo, lo cual deja abierta la posibilidad de agregar un segundo modulo en el futuro sin tener que cambiar nada.
(A esto sumale el hecho que muchos vendedores lamentablemente no saben lo que es el CAT6A, no lo importan o te quieren vender una mentira llamada CAT6e)
Pero ademas, por menos de lo que cuestan 2 modulos SPF+ y el patchcord de fibra podemos ir por un DAC (“direct attach cable“). Al momento que escribo esto, estaríamos hablando de USD 14,99 vs. USD 50,99. Para distancias cortas, la opción DAC es la mas económica:
Si nuestro objetivo es simplemente agregar un enlace de 10Gbps entre dos equipos, ya tenemos todo lo necesario para salir a comprar, nuestras dos opciones siendo:
CAT6a: patchcord + 2x placas de red = aprox. USD 200
Direct-Attach SFP+: DAC + 2x placas de red = aprox. USD 153
Pero, podemos ir mas allá y en lugar de agregar un enlace, mejorar la conexión actual de 1Gbps a 10Gbps. Para esto, vamos a precisar comprar un switch.
Una opción siendo el MikroTik CRS305-1G-4S+IN mencionado al principio, cuesta unos USD 149 pero tiene la desventaja que nos limita a un solo uplink de 1Gbps para ambos equipos.
Otra opción seria algo como el Netgear GS110MX, que cuenta con 2 interfaces 10GBASE-T y 8 interfaces 1000BASE-T (o sea el Gigabit por cobre de toda la vida). Este producto se consigue por aprox. USD 250.
No convencido por ninguna de las dos, y sabiendo que traer usado de eBay estando en Uruguay es una timba, me puse a ver de nuevo el catalogo de MikroTik hasta que encontré que el CRS326-24G-2S+RM tiene todo lo que preciso quiero, y seria el candidato a remplazar mi actual CRS125 ya que:
Tiene la opción de usar tanto SwOS como RouterOS, por lo cual puede seguir haciendo de router acá en casa, tal cual lo viene haciendo el CRS125 [*1].
Viene con 24 interfaces Gigabit por cobre, al igual que el CRS125.
Viene con 2 jaulas SFP+, que es lo que precisamos para lo que pretendemos hacer.
Puede alcanzar el wire-speed teórico en lo que a switching se refiere (L2), en otras palabras puedo saturar el enlace 10Gbps entre las dos maquinas.
Esta listado a USD 199. Anda saber cuanto cuesta en Uruguay (si se consigue siquiera) pero considerando que la bosta Netgear cuesta USD 250, no esta para nada mal.
[*1]: El CRS-125 (o cualquier CRS de MikroTik) es un switch, no un router. No esta pensado como router, por mas que puedas usarlo como tal dado que viene todas las funcionalidades. Dependiendo de lo que hagas, el throughput te puede sobrar o todo se puede caer a pedazos.
Dicho todo esto, nuestra lista de compras quedaría mas o menos así:
2x HP 614203-B21, USD 138
2x 10Gtek SFP+ DAC 3m, USD 30
1x MikroTik CRS326-24G-2S+RM, USD 200
1x Overhead de hacer que todo esto se materialice en la República Oriental del Uruguay (estimado pesimista): USD 253
Total: USD 621
Nota: si la haces bien podes traer todo bajo franquicia, incluyendo el CRS326 ya que según Honey, supo estar a USD 139 en algún momento en Amazon. Esto reduce considerablemente la cometa estatal a pagar.
Buscando una excusa
Bueno ya vimos que dependiendo de como la juegue, la joda me puede llegar a costar 600 dólares en el peor escenario o al rededor de 370 dólares si se me da. El tema ahora no es lo que cuesta, mas bien “si lo vale”.
La principal (y probablemente única) ventaja que obtenga al hacer esto es un acceso ridículamente rápido al almacenamiento en el server, cosa que uso al punto tal que no solamente documentos, fotos, música, videos, películas y series se guardan ahí pero también los vmdk de las maquinas virtuales y recientemente las descargas de Steam:
En otras palabras, cuando bajo las fotos de la cámara, se guardan en la red. Cuando estoy haciendo algún desastre en Premiere, todo el footage viene de la red. Cuando tengo que virtualizar algo, a no ser que requiera la performance de I/O, el vmdk/vdi/vhd/vhdx/whatever esta en la red. Y así con prácticamente todo lo que no resulte un problema, en ese caso lo guardo o en el disco o SSD local.
Esta obsesión de mandar todo al storage arranco hace no mucho cuando me di cuenta de dos cosas:
Tengo un montón de espacio disponible en el storage del server.
El storage cuenta con redundancia, los discos de mi maquina no.
El storage se respalda automáticamente, los discos de mi maquina no (yo respaldo manualmente ciertas cosas que considero importantes).
El acceso a mi unidad de red es mas rápido que a los discos duros locales a la maquina.
Ese ultimo ítem fue el que me llevo realmente a coparme con la idea de un storage por red mas rápido, al ver que tener el pool de ZFS con estados sólidos haciendo de cache, la red era mi cuello de botella. En aquel momento, pensaba que si tan solo pudiera hacer link-aggregation entre los equipos y el switch…
El tema es, el CRS125 es un aparato bastante particular, tiene 24 interfaces las cuales podes o asignar a uno de los switches por hardware o manejarlas como interfaces independientes. Si bien puedo hacer agregación de enlaces, solo puedo hacerlo para interfaces que están por fuera del switch y por lo tanto tendría que tener un bridge entre esa agregación y el resto el switch y de solo pensar en todo eso pasando por el CPU del CRS me da dolor de cabeza (aunque un día con tiempo de sobra voy a probarlo).
Multi-gigabit de pobre
Bueno, resulta que tiempo después me entere que, si bien no puedo hacer link-aggregation propiamente dicho (o sea a lo LACP), tenia una alternativa llamada “bonding” (o teaming). Resulta que el kernel de Linux tiene un driver de bonding que me permitía hacer lo que yo quería y por lo tanto me le agregue al server una placa con cuatro interfaces Gigabit Ethernet y nació el “James Bond”.
Mientras que en Windows es tan fácil como crear un “NIC Team”… si estas en Windows Server. Al parecer a Microsoft se le “escapo” esa funcionalidad una vez en Windows 10 pero se dieron cuenta y la sacaron, tal como explica Adam Rudell en los foros de TechNet:
While the powershell cmdlet didn’t outright fail on client, LBFO was in a broken and unsupported state, since the client SKU does not ship the mslbfoprovider.sys kernel driver. That kernel driver contains all the load balancing and failover logic, as well as the LACP state machine. Without that driver, you might get the appearance of a team, but it wouldn’t really do actual teaming logic. We never tested NIC Teaming in a configuration where this kernel driver was missing.
Adam Rudell, Microsoft employee (allegedly), TechNet Forums
A pesar de que había gente en internet reportando que funcionaba, realizando pruebas de transferencia, pero bueno, supongo que lo archivamos en el armario de “Things Microsoft does”. Que tipos simpáticos.
La alternativa para hacer esto en Windows 10 es usar una placa de red que lo soporte a nivel de driver, lamentablemente estoy usando una de esas Intel PRO/1000 PT Dual Port que se consiguen por chirolas en cualquier parte y que funcionan muy bien en Windows, Linux & BSD pero el driver de Intel no soporta bonding en estas placas (fair enough: son bastante viejas).
SMB multichannel
No recuerdo bien como, pero de casualidad encontré que existe en SMB (el protocolo de File Sharing de Windows) una funcionalidad llamada multichannel y básicamente esto le permite a un cliente SMB utilizar múltiples conexiones simultaneas cuando transfiere archivos, sin necesidad de agregaciones o bondings o teams.
Mientras que del otro lado, depende de si usas Windows o Samba (la implementación open-source de SMB que nada tiene que ver con la fiesta brazuca). Si usas Windows se supone que en versiones recientes viene habilitado por defecto y no hay que hacer nada. Si usas Samba (de vuelta, nada de Brasil), tenes que estar en la versión >= 4.4.0 (cualquier distro decente hoy en día cumple con esto) y agregar al menos lo siguiente a la configuración de smbd:
server multi channel support = yes
aio read size = 1
aio write size = 1
Lo único que importa, es que funciona… la gran parte del tiempo:
Pero no es perfecto dado que:
Hay veces que no levanta el multichannel y transfiere a 1Gbps, vaya uno a saber porque.
Tenia en mente usar al menos 3 adaptadores Gigabit en la PC de escritorio, dado que en el server hay 4. Por razones que desconozco, al agregar un tercer adaptador, SMB multichannel hace lo suyo pero se ve que el overhead me juega una mala pasada porque no llega a saturar los tres enlaces, de hecho la velocidad de transferencia es peor que con 2.
Es una funcionalidad experimental y hay casos donde podría llevar a la corrupción de datos… oops!
CAVEAT: While this should be working without problems mostly, there are still corner cases in the treatment of channel failures that may result in DATA CORRUPTION when these race conditions hit. It is hence
NOT RECOMMENDED TO USE MULTI-CHANNEL IN PRODUCTION
at this stage. This situation can be expected to improve during the life-time of the 4.4 release. Feed-back from test-setups is highly welcome.
Samba 4.4.0 Release Notes
Quiero mas
Lamentablemente, ya mordí la manzana. Pasar de 1Gbps a 2Gbps puede ser que no parezca mucho, pero en mi caso, esperar media hora a que se copie algo en lugar de una hora entera se siente. Mas importante aun, 2Gbps ya es suficientemente rápido para sacar los discos duros del PC y quedarme solo con el SSD y el storage por red. Por ahora la única contra que le veo es si por algún motivo el storage queda inaccesible durante un tiempo extendido, por ejemplo, si falla el mismo.
Ah, y esta ese detalle menor que SMB multichannel en Samba es experimental y puede ocasionar perdida de datos.
Estuve considerando también otras opciones “multi-gigabit” como 2.5Gbps y 5Gbps pero lamentablemente no se consigue mucho de eso y tendría que cambiar el switch de todas formas, así que 10Gbps no parece algo muy loco, sobre todo si puedo conseguir traer las partes dentro del régimen de franquicias porque seguro que hoy en día no me justifico pagar USD 600 por 10GbE entre el server y el desktop.
De todas formas, todo esto pende de una cosa sola, la cual debería ser la mas obvia: a que velocidad puedo sacar y meter datos del storage?
Solo hay una manera de averiguar y es comprar todo y ver que onda correr unos benchmarks a la carrera, hacer una gráfica y ver que pasa:
Bueno, que manera de pinchar el globo. Las observaciones son:
Usar una unidad de red contra el pool ZFS (o contra un SSD fuera del pool), teniendo 2Gbps es mas rápido que los discos duros SATA que están conectados al PC.
El pool ZFS del server puede ir mas rapido que mi conexion de 2Gbps, pero no mas rapido que 3Gbps.
Ahora bien, el benchmark del pool ZFS se corrio de manera tal que nos evitaramos el cache en RAM, dado que me interesaba la performance del pool en si.
Sin embargo, en un uso real, el cache de I/O esta siempre ahi dando la nota, por lo cual corresponde volver a correr el benchmark como un gentleman, teniendo el cache en cuenta. Veamos que pasa:
LPM, ahora tengo que hacer todo este post de nuevo, pero para 25 Gigabit Ethernet [*2]. Pero mientras tanto… SAMBA!!
[*2]: Si y no. El cache del filesystem en memoria puede ayudarme mas que nada al correr programas, donde aplica algo similar al “principio de localidad“. Para la ida y vuelta de archivos grandes no le veo que pueda aportar mucho.