Crea un «RAMDisk» en tu distribución Linux

Icono RAMDisk

Como sabes, la velocidad de acceso de una memoria es muy importante. Los cuellos de botella generados antaño entre las memorias magnéticas y los procesadores hicieron que se tuviese que incluir una memoria intermedia más rápida, la RAM. Después, con el avance de los microprocesadores vino la cache, aun más rápida para ofrecer una memoria intermedia entre la RAM y los registros de la CPU. Más recientemente han aparecido los discos duros SSD, que son más rápidos que los HDD magnético-mecánicos al estar basados en memoria flash.

Gigabyte pensó hace unos años en crear un disco duro con RAM (un RAMDisk denominado i-RAM), una memoria muy rápida en comparación con los discos duros, pero ocurrió algo parecido a lo que le pasó a Ageia con su tarjeta PhysX. No llegaron a cuajar demasiado y terminaron desapareciendo del mercado, y ahora con los SSD (y los SSD basados en RAM) tiene aun menos sentido. ¿Y de qué trata? Pues básicamente es utilizar memoria RAM para almacenar datos como si de un disco duro se tratase, así el acceso es mucho más veloz.

Pues bien, no hace falta que tengas un i-RAM ni un SSD, ni nada por el estilo para acelerar las transferencias y los accesos de los directorios, ficheros o programas que desees. Para eso se puede crear un RAMDisk en tu distro Linux. El único requisito es disponer de RAM suficiente, >4GB recomendado, para reservar un trocito de ésta para utilizar como «disco duro» ultra rápido. Algo así como lo que hacían algunas GPUs para equipos portátiles con la Share Memory, pero en este caso destinada a tus datos.

Para crear esta memoria, debes calcular de la memoria que dispones, ya que si la agotas toda o gran parte de ella te quedarás sin RAM para los fines para los cuales ha sido creada y será una estupidez. Por ejemplo, si dispones de 8GB de RAM, podrías coger 2GB para el RAMDisk. Vuelvo a repetir, lo suyo es que tengas más RAM, si cuentas con 2GB o 4GB tal vez no te merezca la pena… (recuerda en «size=» especificar el tamaño, en mi ejemplo he optado por 1024MB, es decir, 1GB, o también puedes usar «G» en vez de «M» para especificarlo en GB) Una vez sepas esto, nos ponemos manos a la obra con los siguientes pasos desde tu terminal:


mkdir /tmp/ramdisk

mount -t tmpfs none /tmp/randisk -o size=1024M

Ahora ya tienes reservado 1GB en tu RAM para que puedas añadir lo que quieras  al directorio ramdisk que hemos creado. Haz pruebas de rendimiento y verás como es más rápido todo lo que tengas metido en él… Si deseas, puedes crear la partición en tu RAM con otro sistema de ficheros diferente a tmpfs, como por ejemplo ext4 o ramfs.

Y si deseas que la entrada de montaje permanezca… ¡¡Ojo!! los datos que guardes aquí si apagas el PC o reinicias sí se perderán, pero la entrada seguirá para que no tengas que crear la partición con cada inicio con el siguiente truco para añadirla a la tabla (fstab) de particiones para que se cree automáticamente (usa tu editor de texto favorito para editar la entarada: vi, nano, gedit…):


gedit /etc/fstab

Y en el fichero de texto que se abre crea la siguiente entrada sin comillas "tmpfs /mnt/ramdisk tmpfs nodev, nosuid, noexec, nodiratime, size=1024M 0 0"

IMPORTANTE: Recuerda que tus datos desaparecerán cuando reinicies o apagues el equipo, puesto que la RAM es una memoria volátil. Por eso, lo que quieras conservar, hazle una copia en una partición del disco duro.


10 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   mauricio dijo

    Tengo una duda, una vez que apaguemos el equipo, los datos ¿van a seguir estando en la memoria?. Digo esto ya que la memoria RAM es volatil. Te agradeceria que me explicaras eso.

    1.    Isaac P. E. dijo

      Hola,

      Tienes razón, se me olvidó comentar en el artículo que al ser volátil se borrará cada vez que inicies el equipo. Gracias por recordarmelo, lo he añadido ya. Es algo muy importante que no debería pasarse por alto para que nadie pierda sus datos.

      Saludos y espero haberte ayudado. Gracias!!!

      1.    mauricio dijo

        Lo que estuve viendo es que existen programas que hacen esta particón. Lo que hacen estos programas es crear una imagen en el disco rigido de los datos que estan en la memoria RAM para que cuando reiniciemos no se pierdan. Luego al iniciar el sistema, segun tengo entendido, los datos guardados en el disco rigido se vuelcan en la memoria RAM para que podamos usarlos nuevamente. Gracias por la nota y por haber respondido rapido! Saludos!

  2.   Leopoldo Cantillo dijo

    Interesante, es de pensar algunas aplicaciones practicas, un script que cree esta partición RAM al inicio y cargue ficheros de interés, no se… servirá poner una base de datos … ? hay que investigar el tema… gracias por la nota.

  3.   Sultanovich dijo

    es posible que solo funcione detallando el fs. En mis pruebas solo ha funcionado de la siguiente manera:

    mount -t tmpfs tmpfs /tmp/ramdisk -o size=300m

  4.   Ismael dijo

    Increíble, las magnificencias que se puede hacer con GNU/LINUX. :)

  5.   Jimmy Olano dijo

    ¿Qué tal si usamos esa RAMDisk para la partición «tmp»?

    De poder, se pude, habrá que echar código, no pregunto por el código PREGUNTO POR LA PRACTICIDAD DEL ASUNTO, DARLE USO. Acoto que para las bases de datos, si bien recuerdo, ya existe una opción para apoyar tablas de bases de datos en memoria RAM, ejemplo: https: // dev.mysql.com/doc /refman/5.5/en/ storage-engine-setting.html

  6.   Anonymous dijo

    Si eres afortunado y arraste durante los últimos 20 años podrás disponer de 64GiB de RAM y así poder copiar el archivo de disco duro virtual de VirtualBOX (o cualquier otra máquina virtual) a la RAM; presuponinedo que dicho archivo no ocupe más de 48GiB (para dejar RAM libre suficiente para Linux y para la máquina virtual). De ese modo la máquina virtual vuela, y si además quieres que los cambios en la máquina virtual se pierdan (inmutabilidad) ya no necesitarás perden rendimiento en hacen inmutable el disco duro virtual de la máquina, porque antes de arrancarla lo copias desde el NVMe/SSD/HDD a la RAM y luego al apagar lo que esté en la RAM se pierde (justo lo deseado en este caso que se quiere inmutabilidad).

    Asñi pues, con tanta RAM se puede hacer la imagen del disco duro no inmutable y de tamaño fijo, obteniendo el máximo rendimiento posible en el acceso, eso unido a que dicho disco duro estará en la RAM, hace unas verdaderas delicias al manejar máquinas virtuales (solo una arrancada a la vez).

    Que al acabar de usar la máquina virtual interesa conservar el estado del disco duro virtual, pues se copia de la RAM al NVMe/SSD/HDD.

    Que yo haya visto ya hay algunos NVMe que son capaces de leer a velocidades un poco por encima de 5GiB/s (si, cinco gigabytes por segundo en lectura) y eso usando solo uno (en RAID0 o similares sería aún más rápido), por lo que copiar desde él hacia la RAM la imagen de disco duro virtual de 48GiB toma solo unos diez segundos, olé!
    Por contra al hacer el proceso opuesto (de la RAM al NVMe) lo más rápido que he visto por ahora son un poco más de 3GiB/s en escritura (si, tres gigabytes por segundo en escritura), por lo que salvar la imagen de disco duro virtual de 48GiB desde la RAM al NVMe toma solo unos dieciocho segundos, de nuevo un grandísimo olé!

    Vamos que disponer de un NVMe de los más rápidos y 64GiB de RAM con Linux y una máquina virtual con por ejemplo Windows 10, es toda una pasada si se usa la RAM para alojar el disco duro de la máquina virtual.

    Y ahora el regalito para Linux… ya existe un paquete llamado «ramroot» (al menos parece que para las distribuciones basadas en Arch) que durante el arranque se encarga de copiar a la RAM toda la raíz del sistema Linux y continuar arrancando desde la RAM, con lo que además obtenemos la inmutabilidad sobre el Linux que estemos usando, por no mencionar que correrá desde la RAM, a costa de incrementar algo el tiempo de arranque.

    Si el que lea esto conoce las distros de Linux arrancables desde CD/USB que se copian a RAM durante el arranque (como SystemRescueCD, etc) sabrá las bondades que otorga: Siempre arranca igual, siempre va lo más rápido que puede porque todo está en RAM, no se escribe nada en los discos físicos durante el arranque ni durante el uso del Linux (algo muy útil para alargar la vida de los SSD, personalmente en menos de un mes y con menos de un terabyte escrito algunos SSD ya me han dejado de funcionar, concretamente de 120GB de la marca KingDian), salvo obviamente si montamos algo en lectura&escritura y salvamos ahí algo, combinando esto con lo de la máquina virtual, el sistema ‘vuela’ en los accesos a disco, ya que todos van a la RAM.

    Tener en RAM todo el Linux alarga muchísimo la vida útil de los SSD y NVMe, ya que no se escribe en ellos nada o casi nada durante el arranque y una vez arrancado absolutamente nada salvo que seamos nosotros mismos quienes lo hagamos.

    Mis tests han sido en un Ryzen 7 2700X (4.35GHz con 8 núcleos y 16 hilos) con 64GiB DDR4 3200MHz y Gráfica NVidia 1050 Ti de 4GiB.

    Nota: Hay placas base que soportan incluso 1TiB de RAM y micros con 64 hilos como el ThreadRipper 2, etc.

  7.   Marcos dijo

    Interesantísimo tu comentario, pero tampoco hay que exagerar con la RAM necesaria: tengo una imagen VDI de Windows 10 que pesa 13 GB nada más, con 14 GB de RAM funcionaría con total soltura.

    Lo de montar todo el SO en RAM tampoco tengo muy claro que no sea un poco una sobrada. Si tienes tu SSD formateado en BTRFS con la compresión al vuelo habilitada (se escriben bastantes menos datos a la unidad), puesto que en la partición de sistema casi sólo se escriben datos cuando se instalan paquetes (cosa que obviamente queremos que se quede en el SSD/disco), se modifican archivos de configuración (archivos de texto de tamaño insignificante, y la compresión LZO de BTRFS los deja en un tamaño aun más despreciable) y poco más, pues me parece un poco matar moscas a cañonazos; tengamos en cuenta que todas las distros modernas motan /tmp en RAM si el usuario tiene más de 4 GB, creo de RAM, por lo que el SSD/disco no sufre el menor desgaste por muchas operaciones temporales que se escriban, que era lo que más caña metía en la partición / hace algunos años.

    Otra cosa es la home, ahí se escriben datos constantemente: cachés, configuraciones que cambian a cada rato si hemos movido de sitio una ventana, descargas, etc. Ahí sí podría ser interesante trabajar sólo en RAM y sincronizar a disco sólo si de verdad queremos, aunque debería haber alguna herramienta (que no sé si la habrá, no me extrañaría, pero hasta leer tu comentario no me he puesto a pensar en el tema) que recordase al usuario cuando va a cerrar la sesión que hay cambios en su /home sin guardar o que incluso nos preguntase si queremos sincronizarlos a disco, porque seguro que la mitad de las veces se nos olvidaría y apagaríamos el ordenador para echarnos las manos a la cabeza medio segundo después.

    «Hay placas base que soportan incluso 1TiB de RAM y micros con 64 hilos como el ThreadRipper 2, etc.»

    Ya, y racks que todavía admiten mucho más, pero que no se nos vaya la olla xD. Volvamos al planeta Tierra donde la gente a duras penas se puede permitir un equipo de 800 €…

    Saludos.

  8.   Marcos dijo

    «tengo una imagen VDI de Windows 10 que pesa 13 GB nada más, con 14 GB de RAM funcionaría con total soltura.»
    Perdón, quisé decir 24 GB. Se me fue el dedo a la tecla de al lado ?