Linux – RAM disk (discos virtuales)

por | 9 octubre, 2015

Los discos virtuales, llamados RAM disk, son espacios de memoria RAM que se definen como discos y son vistos por el sistema operativo como cualquier disco duro o partición.

Aunque no lo parezca, la utilidad de esos discos, que evidentemente se borran cuando se apaga el ordenador, son innumerables.

Los sistemas basados en RH a partir del núcleo 2.5 soportan RAM disk.

Red Hat crea por defecto 16 unidades RAM las cuales se listan como dispositivos en /dev y se nombran desde el ram0 al ram15.

[root@localhost ~]# ll /dev/ram*
lrwxrwxrwx 1 root root     4 oct  5 11:53 /dev/ram -> ram1
brw-r----- 1 root disk 1,  0 oct  5 13:53 /dev/ram0
brw-r----- 1 root disk 1,  1 oct  5 13:53 /dev/ram1
brw-r----- 1 root disk 1, 10 oct  5 13:53 /dev/ram10
brw-r----- 1 root disk 1, 11 oct  5 13:53 /dev/ram11
brw-r----- 1 root disk 1, 12 oct  5 13:53 /dev/ram12
brw-r----- 1 root disk 1, 13 oct  5 13:53 /dev/ram13
brw-r----- 1 root disk 1, 14 oct  5 13:53 /dev/ram14
brw-r----- 1 root disk 1, 15 oct  5 13:53 /dev/ram15
brw-r----- 1 root disk 1,  2 oct  5 13:53 /dev/ram2
brw-r----- 1 root disk 1,  3 oct  5 13:53 /dev/ram3
brw-r----- 1 root disk 1,  4 oct  5 13:53 /dev/ram4
brw-r----- 1 root disk 1,  5 oct  5 13:53 /dev/ram5
brw-r----- 1 root disk 1,  6 oct  5 13:53 /dev/ram6
brw-r----- 1 root disk 1,  7 oct  5 13:53 /dev/ram7
brw-r----- 1 root disk 1,  8 oct  5 13:53 /dev/ram8
brw-r----- 1 root disk 1,  9 oct  5 13:53 /dev/ram9
lrwxrwxrwx 1 root root     4 oct  5 11:53 /dev/ramdisk -> ram0
[root@localhost ~]#

Estas unidades RAM por defecto no están activadas, es decir, no usan ninguna RAM.

El tamaño por defecto de las unidades RAM se determina en el arranque mediante una opción de comando que se le pasa al kernel.
Si tenemos grub, modificaremos el /etc/grub.conf con la opción del kernel llamada ramdisk_size=xxxxx, donde xxxxx representa el valor en kilobytes.

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,1)
#          kernel /boot/vmlinuz-version ro root=/dev/sda2
#          initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-348.el5)
        root (hd0,1)
        kernel /boot/vmlinuz-2.6.18-348.el5 ro root=LABEL=/ rhgb quiet ramdisk_size=204800
        initrd /boot/initrd-2.6.18-348.el5.img
title Other
        rootnoverify (hd0,0)
        chainloader +1
[root@localhost ~]#

Tras reinicar el sistemas los ramdisk serán de 200 Mb.

Los RAM disks se pueden eliminar simplemente borrando el archivo correspondiente:

# rm /dev/ram0

También se pueden crear con el comando mknod, utilizado para crear archivos especiales:

# mknod /dev/ram0 b 1 2

Por último, sólo queda formatear la unidad y establecer un punto de montaje, por ejemplo:

# mkfs.ext3 -F -m0 -q /dev/ram0
# mkdir /RAMDISK/tmp
# mount /dev/ram0 /RAMDISK/tmp

-F Forme
-m0 reserva 0% de bloques para el root
-q modo silencioso

Un ejemplo de utilización puede ser en SBCs (Single Board Computer) donde el sistema operativo arranca desde una unidad flash. Para evitar la degradación de la flash al realizar constates secuencias de lectura/escritura en un sistema activo 24h al día, puede ser conveniente montar algunos directorios como tmp y var en unidad RAM:

mkdir /RAMDISK

mknod /dev/ram0 b 1 2
mkfs.ext3 -F -m0 -q /dev/ram0
mkdir /RAMDISK/tmp
mount /dev/ram0 /RAMDISK/tmp
mv /tmp/* /RAMDISK/tmp
rm -fr /tmp
ln -s /RAMDISK/tmp /tmp

mknod /dev/ram1 b 1 3
mkfs.ext3 -F -m0 -q /dev/ram1
mkdir /RAMDISK/var
mount /dev/ram1 /RAMDISK/var
mv /var/* /RAMDISK/var
rm -fr /var
ln -s /RAMDISK/var /var

 

 

 

 

 

 

Deja un comentario

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