Un RamDisk es básicamente utilizar una parte de la memoria RAM como si fuera un disco duro / partición. El objetivo de esto es conseguir una velocidad de acceso a los datos mucho más rápida. El tiempo de acceso a la memoria RAM es mucho menor que el de un disco duro.
Voy a utilizar/traducir este tutorial, en el que con unos sencillos pasos conseguimos crear discos virtuales o RamDisk.
Vamos a utilizar un sistema Red Hat o derivado con un kernel 2.4.x
Paso 1: Revisar los ramdisks que hay actualmente creados en el sistema:
Por defecto, Red-Hat crea 16 ramdisk, pero no están activos ni utilizan memoria, así que podemos utilizarlos o reconfigurarlos según nuestras necesidades. Podéis revisarlos con el siguiente comando:
[root]# ls -l /dev/ram* lrwxrwxrwx 1 root root 4 Jun 12 00:31 /dev/ram -> ram1 brw-rw---- 1 root disk 1, 0 Jan 30 2003 /dev/ram0 brw-rw---- 1 root disk 1, 1 Jan 30 2003 /dev/ram1 brw-rw---- 1 root disk 1, 10 Jan 30 2003 /dev/ram10 brw-rw---- 1 root disk 1, 11 Jan 30 2003 /dev/ram11 brw-rw---- 1 root disk 1, 12 Jan 30 2003 /dev/ram12 brw-rw---- 1 root disk 1, 13 Jan 30 2003 /dev/ram13 brw-rw---- 1 root disk 1, 14 Jan 30 2003 /dev/ram14 brw-rw---- 1 root disk 1, 15 Jan 30 2003 /dev/ram15 brw-rw---- 1 root disk 1, 16 Jan 30 2003 /dev/ram16 brw-rw---- 1 root disk 1, 17 Jan 30 2003 /dev/ram17 brw-rw---- 1 root disk 1, 18 Jan 30 2003 /dev/ram18 brw-rw---- 1 root disk 1, 19 Jan 30 2003 /dev/ram19 brw-rw---- 1 root disk 1, 2 Jan 30 2003 /dev/ram2 brw-rw---- 1 root disk 1, 3 Jan 30 2003 /dev/ram3 brw-rw---- 1 root disk 1, 4 Jan 30 2003 /dev/ram4 brw-rw---- 1 root disk 1, 5 Jan 30 2003 /dev/ram5 brw-rw---- 1 root disk 1, 6 Jan 30 2003 /dev/ram6 brw-rw---- 1 root disk 1, 7 Jan 30 2003 /dev/ram7 brw-rw---- 1 root disk 1, 8 Jan 30 2003 /dev/ram8 brw-rw---- 1 root disk 1, 9 Jan 30 2003 /dev/ram9 lrwxrwxrwx 1 root root 4 Jun 12 00:31 /dev/ramdisk -> ram0
Para averiguar el tamaño de cada disco (ramdisk) ejecutamos lo siguiente:
[root]# dmesg | grep RAMDISK RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize RAMDISK: Compressed image found at block 0
Paso 2: Incrementar el tamaño de cada ramdisk
Según para lo que lo vayáis a usar, 4 Mb puede ser muy poco, así que vamos a cambiar el tamaño de cada uno de estos «discos», editamos el fichero de configuración del GRUB (/etc/grub.conf) y añadimos a la línea del kernel el tamaño que queremos para cada ramdisk:
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/hda5 # initrd /initrd-version.img #boot=/dev/hda default=0 timeout=10 splashimage=(hd0,0)/grub/splash.xpm.gz title Red Hat Linux (2.4.20-20.9) root (hd0,0) kernel /vmlinuz-2.4.20-20.9 ro root=LABEL=/ hdc=ide-scsi ramdisk_size=30000 initrd /initrd-2.4.20-20.9.img
En este caso queremos cada disco de 30 Mb, es necesario reiniciar para que los cambios surtan efecto, una vez reiniciado, podemos comprobar que efectivamente ha cambiado el tamaño:
[root]# dmesg | grep RAMDISK RAMDISK driver initialized: 16 RAM disks of 30000K size 1024 blocksize RAMDISK: Compressed image found at block 0
Paso 3: Formatear el ramdisk a utilizar
Este paso hay que realizarlo para cada ramdisk que queramos utilizar, en este caso solo utilizamos uno, así que lo formateamos el primero (/dev/ram0), por ejemplo como ext2:
[root]# mke2fs -m 0 /dev/ram0 mke2fs 1.32 (09-Nov-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 4000 inodes, 16000 blocks 0 blocks (0.00%) reserved for the super user First data block=1 2 block groups 8192 blocks per group, 8192 fragments per group 2000 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 22 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Paso 4: Crear el punto de montaje y montar el ramdisk
Esta parte es sencilla, creamos el punto de montaje y montamos seguidamente el disco:
[root]# mkdir /mnt/ramdisk [root]# mount /dev/ram0 /mnt/ramdisk
Haciendo un df o mount podemos verificar que ha sido montado correctamente:
[root]# mount | grep ram0 /dev/ram0 on /mnt/ramdisk type ext2 (rw) [root]# df -h | grep ram0 /dev/ram0 16M 13K 16M 1% /mnt/ramdisk
Paso 5: Usar el ramdisk
Poco hay que explicar aquí, ya podemos copiar ficheros, borrar, mover, etc al disco.
Paso 6: Automatizar la creación del ramdisk
Hay que recordar que esto es un disco dentro de la memoria RAM, por lo que con cada reinicio todo lo que haya en él se perderá, es recomendable no guardar ahí datos sensibles o que no sean temporales, para automatizar la creación del disco en el arranque podemos añadir las siguientes líneas al fichero /etc/rc.local:
# Formats, mounts, and sets permissions on my 16MB ramdisk /sbin/mke2fs -q -m 0 /dev/ram0 /bin/mount /dev/ram0 /mnt/ramdisk
Con estos sencillos pasos podemos disfrutar de un disco virtual «ramdisk» en nuestra memoria RAM.
Buen artículo. Estos ‘ramdisk’ se suelen usar mucho complementando la velocidad de aplicaciones web.
Buenos dias.
No he utilizado nunca la ramdisk en ningún sistema, pero parece muy interesante. En sistemas con altas consultas ¿No sería interesante utilizarlos para datos programandoles las copias necesarias y los volcados de início y apagado?, donde los datos no cambien mucho pero si sean consultados con asiduedad si podría ser interesante ¿no crees?, lo único que me preocuparía sería que la corrupción de datos como pasaba por ejemplo en algunos aceleradores php… ¿Los has utilizado para alguna otra cosa?
Saludos, muy interesante el articulo.
Buenas,
los que yo llegué a ver, eran precisamente para eso, para datos estáticos a través de web.
Saludos.