¿Cómo crear un ramdisk de Linux de tamaño fijo que nunca se cambie al disco?

9

Quiero crear un ramdisk de Linux de tamaño fijo que nunca se cambie al disco. Tenga en cuenta que mi pregunta no es "por qué" quiero hacer esto (digamos, por ejemplo, que es con un propósito educativo o para la investigación): la pregunta es cómo hacerlo.

Según tengo entendido ramfs, no puede tener un tamaño limitado, por lo que no se ajusta a mi requisito de tener un disco RAM de tamaño fijo.

También parece que se tmpfs puede cambiar al disco. Por lo tanto, no se ajusta a mi requisito de nunca cambiar a disco.

¿Cómo se puede crear un disco RAM de Linux de tamaño fijo que nunca se cambie al disco?

¿Es posible, por ejemplo, crear tmpfsdentro de un ramfs(tal solución encajaría con mis requisitos) y, de ser así, ¿cómo?

Tenga en cuenta que el rendimiento no es un problema y que el disco RAM se llena y desencadena errores de "disco lleno" tampoco es un problema.

user57725
fuente
Creo que esta respuesta a su preocupación cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
Kiwy
posible duplicado de Crear un disco ram en Linux
Kiwy
Para usar un ramdisk real (y no tmpfs o ramfs), necesitará soporte integrado en su núcleo, que algunos núcleos de distribución ya no pueden hacer eso, o de lo contrario es un módulo. Vea si tiene algún ramdispositivo dev. Si no, inténtalo modprobe rd.
Ricitos
1
No creo que esta pregunta sea un duplicado ya que ninguna de las respuestas aborda la restricción de tamaño y el intercambio.
Marco
3
Cuando la gente te pregunta por qué quieres hacer algo, es porque lo que estás preguntando les suena un poco (o mucho) loco. "Hmmm, está pidiendo una forma realmente intrincada de lograr X, ¿sabe sobre el comando do-X?". A veces es también porque hay varias formas, y la correcta depende de por qué lo estás haciendo. Por ejemplo, si pregunta cómo eliminar un montón de archivos, la forma de hacerlo depende de por qué: rm es excelente si necesita liberar espacio en disco, pero no tanto si necesita dejar en blanco un disco para desecharlo. Entonces, en resumen, voy a seguir adelante y preguntar ... ¿por qué?
derobert

Respuestas:

5

Esto es solo un pensamiento y tiene más de un inconveniente, pero podría ser lo suficientemente útil de todos modos.

¿Qué tal crear un archivo de imagen y un sistema de archivos dentro de él encima de ramfs, luego montar la imagen como un dispositivo de bucle? De esa manera, podría limitar el tamaño de ramdisk simplemente limitando el tamaño del archivo de imagen. Por ejemplo:

$ mkdir -p /ram/{ram,loop}
$ mount -t ramfs none /ram/ram
$ dd if=/dev/zero of=/ram/ram/image bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00372456 s, 563 MB/s
$ mke2fs /ram/ram/image
mke2fs 1.42 (29-Nov-2011)
/ram/ram/image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
256 inodes, 2048 blocks
102 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=2097152
1 block group
8192 blocks per group, 8192 fragments per group
256 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
$ mount -o loop /ram/ram/image /ram/loop
$ dd if=/dev/zero of=/ram/loop/test bs=1M count=5
dd: writing `/ram/loop/test': No space left on device
2+0 records in
1+0 records out
2027520 bytes (2.0 MB) copied, 0.00853692 s, 238 MB/s
$ ls -l /ram/loop
total 2001
drwx------ 2 root root   12288 Jan 27 17:12 lost+found
-rw-r--r-- 1 root root 2027520 Jan 27 17:13 test

En el ejemplo (algo demasiado largo) anterior, el archivo de imagen se crea para tener 2 megabytes y cuando se intenta escribir más de 2 megabytes en él, la escritura simplemente falla porque el sistema de archivos está lleno.

Una reducción obvia de todo esto es, por supuesto, que hay mucha complejidad adicional, pero al menos para fines académicos esto debería ser suficiente.

Sami Laine
fuente
El archivo montado en bucle invertido está sujeto a intercambio ...
vonbrand
1

El libro (¡fechado!) "Controladores de dispositivos Linux" de Corbet, Rubini y Kroah-Hartman tiene un controlador de ejemplo que simplemente asigna un área de memoria fija para perder el tiempo. No es un sistema de archivos, pero ...

vonbrand
fuente
-1

No se puede hacer. Toda la RAM está sujeta a paginación tanto por el diseño del hardware de la CPU como por el diseño del microkernel de Linux. NO hay razones legítimas para tratar la memoria de otra manera. TODOS los algoritmos de software PUEDEN adaptarse para utilizar el esquema de almacenamiento en caché de archivos y la memoria paginada. Virtual es SIEMPRE mejor y más eficiente.

Los discos RAM de tamaño limitado van en contra de los principios básicos del mundo virtual. Debe suponer que solo se realizan solicitudes de archivos útiles al sistema de archivos host y que todas esas solicitudes tienen la misma importancia y prioridad en el mundo virtual (el único modelo que cuenta).

Se ha demostrado matemáticamente que incluso los procesos en tiempo real se ajustan a esta regla. Si tiene un problema de velocidad, NUNCA PUEDE resolverse usando RAM como almacenamiento == todo el sistema host necesita operar más rápido desde la CPU al bus de E / S al dispositivo de almacenamiento permanente. Todos los problemas de computación, excepto los degenerados artificiales, tienen suficientes ramas y requisitos de E / S de archivos para que el aumento de la velocidad promedio del almacenamiento en caché de RAM sea lo mejor que puede hacer.

Súper troll
fuente
No se puede hacer. Toda la RAM está sujeta a paginación tanto por el diseño del hardware de la CPU como por el diseño del microkernel de Linux. Incorrecto : " mlock(), mlock2()y mlockall()bloquea parte o la totalidad del espacio de direcciones virtuales del proceso de llamada en la RAM, evitando que esa memoria se localice en el área de intercambio".
Andrew Henle