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