• Medir el rendimiento del disco de sistema Linux desde la cli

    BenchmarkTerminalLinuxEn estos días de auténtica locura espacio-temporal en la que estoy preparando el curso para la creación del Router/Servidor/NAS casero me he enfrentado con un problemita que he podido resolver, como siempre, desde la cli. Ocurre que el sistema donde estoy haciendo las pruebas (el HP MicroServer Gen8) internamente trae dos conexiones muy interesantes: un slot para de tarjetas MicroSD y un puerto USB.
    Leyendo las especificaciones técnicas del aparato he podido saber que el puerto USB es 2.0 pero del lector MicroSD no ponía nada. Bueno, en realidad, ponía que no era extraíble en caliente, pero no aclaraba si era 2.0 o 3.0.
    Muchos podrán estar preguntándose que cambiaría realmente si fuera uno u otro. Y la respuesta es mucho. El lector de tarjetas SD que traía el portátil Asus ROG que le vendí a Quique, uno de los seguidores más fieles de hacks4geeks, era efectivamente 3.0. Usando ese lector he podido hacer benchmarks a tarjetas SD que me han dado como resultado velocidades de escrituras de casi 90 MB/s. Es decir, velocidad suficientes para correr perfectamente un Sistema Operativo. Por ello es que, cuando lo descubrí, me compré una tarjeta SD Categoría 10 U3 de 64GB donde tenía discos VHDs de máquinas virtuales que corrían tanto en Linux como en Hackintosh y Windows sin preocuparme de que el sistema de archivos donde estuvieran guardados fuese o no compatible con el S.O. donde quería ejecutarlas. Dadas las velocidades de lectura y escritura de la tarjeta SD U3 las máquinas virtuales corrían desde la tarjeta a una velocidad más que aceptable. Distinto habría sido si el lector de tarjetas hubiera sido USB 2.0. La lectura/escritura máxima habría rondado los 35-37 MB/s en el mejor de los casos dado que, a pesar de que los puertos USB 2.0 tienen una lectura/escritura teórica de unos 45 MB/s, en mis pruebas personales jamás he logrado que un dispositivo USB 2.0 escriba más rápido que esa velocidad. Es decir, si el lector hubiera sido 2.0 habría desperdiciado casi 2/3 de la velocidad de la tarjeta. Bueno, para empezar, seguramente no me habría comprado nunca esa tarjeta dado que no hubiese tenido donde aprovecharla.
    La verdad que haber tenido un lector SD 3.0 en un portátil fue una experiencia muy positiva, pero hubo algo que jamás pude conseguir en él: arrancar un sistema operativo nativo instalado en aquella tarjeta. Supuse que habría sido seguramente porque el lector era 3.0 y la tarjeta nunca estaría disponible para la BIOS hasta que el sistema operativo se cargara. Pero después de vender el portátil caí en la cuenta de que el ROG si que arrancaba S.O. instalados en pendrives USB 3.0. Y corrían tan rápido que «se cagaba la perra». Por lo que ha sido un tema que me ha quedado pendiente para cuando vuelva a tener algún portátil ROG.
    Dispuesto a averiguar si el slot de tarjetas del MicroServer era 2.0 o 3.0 monté la tarjeta MicroSD en el slot, y encendí y arranqué el servidor con Windows10ToGo desde un disco USB. La tarjeta aparecía como E: así que la re-formateé como Fat32 y le hice un benchmark con CrystalDiskMark. Lamentablemente no pasó de 35 MB/s de escritura y ahí lamenté que el puerto no haya sido 3.0. Pero inmediatamente me brillaron los ojos. Pensé que si no era 3.0 tenía muchas posibilidades de bootear un S.O. desde ella, dado que el otro puerto interno del servidor, el USB 2.0, si que permitía arrancar sistemas operativos por lo que la BIOS vería el volumen. En este punto, si eres un «acostumbrado» a las nuevas tecnologías y en espacial a Asus pensarás:

    • Vaya mierda de máquina si tiene un BIOS que no reconozca los puertos XHCI nativamente.

    Pues podría decirte que si. Sin embargo, la mayoría de las BIOS que reconocen nativamente los puertos USB 3.0 es porque tienen puertos USB 3.0 de Intel. Los puertos USB 3.0 de Intel no tienen drivers para Windows XP por lo que, si necesitas correr windows XP, pierdes la velocidad de extracción de datos del sistema (que podrías necesitar al hacer copias de seguridad). Y ¿a que no sabes qué? Pues si, necesitaba correr XP en el MicroServer por lo que me vino fantástico que el HP MicroServer Gen8 trajera puertos USB 3.0 NEC/Rensas que, aunque no fueran reconocibles por la BIOS y se activen únicamente una vez iniciado el S.O. me iban a servir muchísimo para hacer las copias de seguridad.

    ¿Por dónde íbamos? El booteo de la tarjeta, eso es. Me puse manos a la obra:

    Creé una máquina virtual nueva en VirtualBox. Asigné el lector de tarjetas a un puerto USB filtrado, Inicié la instalación de Debian y lo instalé en la tarjeta. Apagué la máquina virtual. Apagué el ordenador y crucé los dedos. Cuando lo encendí nuevamente, antes de intentar arrancar el Debian recién instalado en la tarjeta entré en la BIOS y fui directamente a ver las opciones de booteo. La BIOS de un servidor no tiene nada que ver con la BIOS de un ordenador normal. Hay muuuchas más opciones. Entre ellas las preferencias de arranque de los dispositivos USB. Si, amigo. Tiene esa opción y la había pasado por alto. Allí encontré tres opciones para elegir (del inglés):

    • Dar prioridad a una unidad USB externa
    • Dar prioridad a una unidad USB interna (El puerto USB interno)
    • Dar prioridad al lector de tarjetas

    ¡Collons! Si se le da prioridad al lector de tarjetas es porque puede arrancar desde él. Le marqué la prioridad y voilá! Debian corriendo a la perfección. Genial!

    Todo ello me puso en alerta sobre algunas cosas. ¿Cómo harías para instalar un S.O. en una tarjeta montada en el slot del MicroServer si no tiene una pantalla conectada? Lo que me llevó a otra cuestión que es, aunque no lo parezca, la razón de este post: ¿Cómo harías para saber qué rendimiento tiene la tarjeta MicroSD que has decidido usar en la instalación si no tienes acceso a otro sistema operativo en el MicroServer más allá del recién instalado Debian? Y aquí está la solución que es bien cortita y que goza del mayor prólogo de la historia:

    Te conectarías por SSH y una vez dentro ejecutarías esta orden:

    PARA UN ORDENADOR

    dd if=/dev/sda of=/tmp/archivodeprueba conv=fdatasync bs=1M count=100; rm -f /tmp/archivodeprueba

    PARA UNA RASPBERRY

    dd if=/dev/mmcblk0 of=/tmp/archivodeprueba conv=fdatasync bs=1M count=100; rm -f /tmp/archivodeprueba

    PARA SÓLO ESCRITURA

    dd if=/dev/zero of=/tmp/archivodeprueba oflag=direct bs=1M count=100

    PARA SÓLO LECTURA

    dd if=/tmp/archivodeprueba of=/dev/null iflag=direct bs=1M count=100

    El resultado te saldría en la misma cli SSH y podrías sorprenderte al descubrir que algunas tarjetas MicroSD, por más que marquen una escritura teórica de clase U3, no llegan ni a la mitad de lo que supone su estándar.