Cómo crear una unidad RAM en Linux

Contenidos

En caso de que se lo pregunte, las unidades de RAM y las instancias de tmpfs no son lo mismo. Este post explicará la diferencia y le mostrará cómo crear una unidad RAM en Linux usando la línea de comando. ¡Configure una unidad RAM rápida en minutos!

Que es un Unidad RAM?

Los chips de RAM de su computadora se pueden usar para guardar una unidad virtual. Esta unidad no se almacena en el disco duro sino en la RAM. No solo la velocidad de este disco virtual será significativamente más rápida que la de un disco normal (y especialmente en comparación con un disco giratorio de tipo antiguo, puesto que el movimiento físico de las partes dentro de un disco giratorio causa retrasos adicionales), los chips de RAM no se desgastan tan rápido como discos, y de nuevo especialmente y más aún con unidades físicas de tipo más antiguo.

Suena demasiado bueno para ser verdad? Bueno, en realidad hay una salvedad; Si reinicia accidentalmente su computadora, o si falla, todos sus datos desaparecerán. RAM (memoria de acceso aleatorio), los chips de memoria en su computadora, requieren energía constante para retener su información. El almacenamiento de RAM se considera volátil.

Dicho de otra forma, las unidades de RAM se prestan para aplicaciones temporales o para optimizaciones específicas. A modo de ejemplo, cuando usamos servidores de prueba para probar software, configuramos una unidad RAM para permitir que las muchas pruebas simultáneas sean más rápidas. E inclusive si el servidor perdiera energía, no se perdería mucho; simplemente comenzaríamos otra ejecución de prueba.

Otra aplicación es la precarga de los datos a los que se accede muchas veces en una unidad RAM. A modo de ejemplo, si tiene un servidor que accede constantemente a una determinada base de datos de solo lectura (la lectura y escritura puede ser más compleja si es necesario conservar los datos), que regularmente reside en el disco, entonces puede copiar la base de datos de solo lectura a RAM automáticamente (con algunas secuencias de comandos automatizadas en el inicio del servidor, a modo de ejemplo, o con un trabajo cron), y posteriormente deje que el servidor de la base de datos use esos datos.

Dicho de otra forma, uno puede resumir dos casos de uso principales, uno es el almacenamiento en caché (como nuestro ejemplo de base de datos de R / O), el otro es el almacenamiento de datos «invaluable» (como nuestro ejemplo de prueba). Posteriormente, puede dar un paso más (un tercer caso de uso si lo desea) y sincronizar los datos en el disco a intervalos determinados. A modo de ejemplo, con el ejemplo de prueba, que además incluye escrituras en el almacenamiento RAM, se podría escribir el resumen y / o los datos de prueba en el disco (almacenamiento permanente) al final de cada prueba completa.

Otra advertencia con las unidades de RAM es que están limitadas al tamaño de la memoria en su sistema y probablemente menos que eso, puesto que necesita otra memoria para ejecutar el sistema operativo y otro software.

Dimensionar una unidad RAM a más de, digamos un 80-85% arbitrario de la memoria del sistema, puede estar buscando problemas. De todos modos, si tiene 256 GB de RAM en su servidor, inclusive el 90% asignado para una unidad de RAM dejaría más de 25 GB para el sistema operativo y las aplicaciones. Con solo 4 GB, una asignación del 90% a la RAM dejaría 0,4 GB (400 MB), lo que probablemente cause problemas. Por tanto, depende, hasta cierto punto, cuál es la memoria total de la máquina y cuánto se necesitará para otro software.

Al mismo tiempo, una unidad RAM no funciona igual que la asignación / instancia tmpfs.

Unidad RAM vs instancia tmpfs

Un tmpfs además puede almacenarse, pero no tiene por qué estarlo, en los chips de RAM de su computadora. Lo común /dev/shm El mapeo tmpfs configurado automáticamente con la instalación de la mayoría, si no todos los sistemas operativos Linux, es útil pero no funciona igual que una unidad RAM.

La diferencia entre los dos es que una unidad RAM (el término rígido viene a la mente) se almacena al 100% en chips de RAM reales, mientras que tmpfs se almacena en el grupo de memoria del kernel de Linux, que puede incluir cosas como el espacio de intercambio, que se encuentra regularmente en el disco. Aunque el kernel probablemente optimizaría todo el acceso al grupo, aún ofrece la oportunidad de que los datos se escriban en la RAM física o en el DISCO físico. Y, si va al disco, será más lento.

Creando un Unidad RAM

Crear una unidad de RAM es relativamente sencillo. Puede crear un pequeño script llamado ramdrive.sh, con el siguiente código:

#!/bin/bash
if [ "$(mount | grep -o "/mnt/ram")" != "/mnt/ram" ]; then
  sudo mkdir -p /mnt/ram
  sudo mount -t ramfs -o size=1g ramfs /mnt/ram
  sudo chown -R $(whoami):$(whoami) /mnt/ram
fi
mount | grep ram

Y otro guion umount_ram.sh, con el siguiente código:

#!/bin/bash
sudo umount /mnt/ram

Echemos un vistazo al primer guión. Primero, indicamos que queremos Bash como nuestro intérprete de comandos con el símbolo Shebang (#!). Si desea obtener más información sobre Shebang, eche un vistazo a Bash Automation & Scripting Basics, nuestro post de 3 partes sobre automatización y scripting de Bash.

Después de esto, comprobamos si ya tenemos una montura debajo /mnt/ram (el directorio que usaremos para montar nuestra unidad de memoria RAM), usando solo grep (grep -o) de /mnt/ram en el listado completa de ‘montados hoy en día’, como se muestra en mount. Si no se encuentra el mismo, procedemos con tres comandos sudo. Los tres requieren sudo, aún cuando por varios motivos.

El primer comando necesita sudo, puesto que crea un directorio posiblemente de raíz y al menos en /mnt, que son directorios privilegiados / protegidos. El siguiente comando, nuestro montaje y creación de disco RAM real, necesita sudo puesto que el montaje es una operación privilegiada. Configuramos el tamaño en 1GB usando size=1g. Además indicamos que queremos una unidad de tipo ramfs (-t ramfs) procedente del dispositivo ramfs (como lo indica el segundo ramfs), y en resumen enumeramos el punto de montaje como /mnt/ram.

En el tercer comando habilitado para sudo, cambiamos el propietario del /mnt/ram directorio (ahora nuestra unidad RAM, nuestro punto de montaje ramfs) al usuario actual y al propio grupo del usuario actual usando el whoami comando dos veces. Es factible que desee cambiar esto al grupo específico y / o específico que usará ramdrive oa un grupo más amplio si más usuarios usarán ramdrive.

Después de esto, finalizamos nuestro condicional if .. fi comando y hacer una llamada final a mount con un grep para ram para asegurarse de que el script informa sobre lo que ya estaba montado en términos de RAM, o lo que se montó justo ahora cuando se ejecutó el script. Esta es una verificación práctica / rápida de que el script fue exitoso cuando se ejecutó.

Nuestro guión secundario, umount_ram.sh, desmonta la unidad basada en RAM con punto de montaje /mnt/ram, dicho de otra forma, la unidad ramfs que acabamos de crear. ADVERTENCIA: ejecutar esto elimina / borra inmediatamente todos los datos almacenados en la memoria volátil y volver a montar la unidad RAMFS no traerá esto de vuelta; simplemente creará una unidad RAM nueva pero vacía. ¡Tenga cuidado!

Terminando

En este post, discutimos las unidades RAM / ramfs (lo mismo) y las instancias / asignaciones tmpfs. Posteriormente creamos una unidad ramfs de 1GB bajo /mnt/ram usando un pequeño script para montar o una unidad RAM.

Si desea continuar leyendo en Linux, eche un vistazo a nuestros posts Grabación de pantalla en Linux con SimpleScreenRecorder o Bits, Bytes y Binary o From 0 to F: Hexadecimal!

¡Disfrutar!

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.