¿Cómo puedo cambiar la cantidad y el tamaño de los discos ram de Linux (/ dev / ram0 - / dev / ram15)?

27

Usando Linux, cuando arranco automáticamente tengo 16 discos RAM de 16 MB, sin embargo, me gustaría crear un disco RAM realmente grande para probar algún software.

Descubrí que puedo ajustar el tamaño de los ramdisks que ya están en el sistema con el parámetro de arranque del kernel ramdisk_size, sin embargo, esto hace que los 16 ramdisks (/ dev / ram0 - / dev / ram15) tengan el tamaño especificado. Entonces, si quiero crear un disco RAM de 1 GB, necesitaría 16 GB de memoria.

Básicamente, quiero crear un disco RAM de 10 GB que sería / dev / ram0. ¿Cómo voy a hacer eso? Supongo que hay un parámetro de arranque del kernel, pero simplemente no lo he encontrado.

Kevin S.
fuente

Respuestas:

18

Tiempo de compilación del núcleo

Hay dos opciones de configuración del núcleo que puede establecer en su .configarchivo:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Esto configuró mi kernel para crear un ramdisk que es 10G en el momento del arranque.

Notas:

  • CONFIG_BLK_DEV_RAM_SIZE está en KB.
  • No especifique más memoria de la que realmente tiene RAM en su computadora.
  • En menuconfigbuscar en Controladores de dispositivos-> Bloquear dispositivos.

Tiempo de arranque

Puede especificar el tamaño de los discos RAM que crea a través del parámetro de arranque del kernel ramdisk_size. Por ejemplo:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Ahora puedo arrancar mi máquina y hacer un sistema de archivos en ella, montarla y usarla exactamente como un dispositivo de bloque.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Fuentes:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [muerto]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
Kevin S.
fuente
16

Deberías usar tmpfs para eso en su lugar.

mount -t tmpfs -o size=10g none /mnt/point
Ignacio Vazquez-Abrams
fuente
¿Puedo hacer un sistema de archivos en un tmpfs? Necesito un dispositivo de bloque que resida en la memoria en el que pueda hacer un sistema de archivos. ¿Puedo hacer esto en un tmpfs?
Kevin S.
tmpfs es un sistema de archivos. Simplemente pasa a residir en la memoria.
Ignacio Vazquez-Abrams
3
Aprecio la respuesta y normalmente un tmpfs haría el truco, pero necesito crear un sistema de archivos xfs en la parte de la memoria en la que estoy escribiendo.
Kevin S.
El problema con tmpfs es que está respaldado por swap. Si comienza a usar el intercambio, está perdiendo los beneficios de estar en RAM pura. Además, algunas personas prefieren tener un área que no esté respaldada para aplicaciones criptográficas.
drudru
Las respuestas y detalles relacionados están aquí: unix.stackexchange.com/questions/66329/…
jocull
7

Para hacer un disco RAM grande después del arranque sin perder el tiempo con los parámetros del kernel. Use tmpfs, cree un archivo, móntelo a través de un bucle y móntelo a través de un sistema de archivos:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Probablemente un poco de penalización de rendimiento al pasar por varias capas diferentes ... pero al menos funciona.

usuario39725
fuente
6

Otra opción es usar los dispositivos de bucle (a diferencia de la función de paquete de soporte de montaje como se mencionó anteriormente):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

Ahora / dev / loop es un dispositivo de bloque legítimo sobre el cual su aplicación actuaría como un dispositivo físico o un disco RAM, excepto que está respaldado por un archivo. Puede montarlo en algún lugar o hacer que su aplicación actúe sobre el nodo del dispositivo, que implementa los ioctls de bloque estándar. Guarda el sistema ram y es útil para guardarlo en casos de prueba, etc.

(Incluso puede fdisk myfs.img, crear particiones en él y usar --offset y --sizelimit con losetup para apuntar cada / dev / loopX a particiones específicas en la imagen, por lo que loop0, loop1 se vuelven como sdc1, sdc2, etc. )

David Mirabito
fuente
+1 ya que esto no necesita recompilar el kernel
m-ric
3

En su lugar, podría usar un archivo de bucle. Simplemente cree un archivo de bucle del tamaño que desee (si desea ponerlo en un disco RAM tmpfs, bien), y luego formatee el archivo de bucle y móntelo.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
KFro
fuente
Realmente intenté esto antes de publicar mi pregunta. Es una gran solución, pero el software que estoy probando actúa de manera diferente cuando se trata de un archivo y no de un dispositivo de bloque, es por eso que estaba buscando la opción de ramdisk. Gracias.
Kevin S.
2
Los dispositivos de bucle invertido son dispositivos de bloque, así que no estoy seguro de cómo es posible.
pjc50
2

El objeto de un ramdrive es la velocidad. Tmpfs no es un disco. Los dispositivos de bucle no son unidades, pero puede colocar una imagen de unidad en un dispositivo de bucle. Los discos Ram "son" unidades y unidades muy rápidas. Intenta correr:

hdparm -t /dev/sda 

y entonces:

hdparm -t /dev/ram0

¡Verás lo que quiero decir! Pero hdparm a veces destruye la memoria RAM. Entonces, tienes que hacerlo de nuevo.

A veces no hay dispositivos / dev / ram. Para hacer uno:

mknod -m 0777 /dev/ram0 b 1 0 

Pero no tendrá ningún tamaño. Para darle tamaño:

dd if=/dev/zero of=/dev/ram0

y se detendrá cuando la unidad esté llena. El tamaño máximo está determinado por la configuración del núcleo Parm: CONFIG_BLK_DEV_RAM_SIZE.

Luego, simplemente formatee, es decir

mke2fs /dev/ram0

Y montarlo:

mount /dev/ram0 /mnt/ramdrive

Uno de mis favoritos es el código de depuración almacenado en una memoria RAM. Las compilaciones tienen al menos 10 veces la velocidad del código almacenado en un disco duro. Las tablas de la base de datos almacenadas en ramdrive también vuelan, pero debe tener un script que escriba periódicamente en el disco duro. La mayoría de los administradores no tienen las agallas para poner datos en discos ram. Y algunas mesas son demasiado grandes.

Swansword
fuente
1

En el faro 64 (Linux puupy basado en slackware) hice esto;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

Ahí tienes un disco RAM montado como un directorio /mnt/dvddonde puedes copiar y guardar y hacer todo como lo harías en un directorio HD, excepto en RAM. recuerde guardar sus archivos en hd antes del apagado.

Marcos
fuente