[LinuxFocus-icon]
Hogar  |  Mapa  |  Indice  |  Busqueda

Noticias | Arca | Enlaces | Sobre LF
Este documento está disponible en los siguientes idiomas: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por Mark Nielsen

Sobre el autor:

Mark trabaja como consultor independiente, dedicando su tiempo a causas como GNUJobs.com, escribiendo articulos, programando software libre, y trabajando como voluntario en eastmont.net.


Contenidos:

 

Usos (y abusos) de Raid, /dev/ram, y ramfs

[illustration]

Resumen:

RamFs es un sencillo sistema de ficheros con interesantes características. Es una de las novedades de los núcleos 2.4.



 

Introducción a RamDisk

Puede ver mi artículo original sobre el antiguo ramdisk. Se encuentra en: Linuxfocus:Cómo usar un ramdisk bajo Linux. En el presente artículo no entraré en detalles sobre el antiguo estilo de ramdisk.

¿Qué es un ramdisk? Un ramdisk (o disco RAM) es una parte de la memoria que se puede asignar para usarla como si fuese una partición. O, en otras palabras, se toma parte de la memoria y se simula un disco duro que se puede formatear, montar, en él se puede guardar ficheros, etc.

Hablaremos de dos tipos de ramdisk. El primero es un ramdisk que se puede formatear y montar. El segundo es un ramdisk que no se puede formatear, pero que tiene excelentes propiedades. Veámoslo en detalle:

La antigua propuesta /dev/ram1 :

  1. MALO: El tamaño del ramdisk está fijado desde el arranque.
  2. BUENO: Puede formatear el ramdisk tantas veces como quiera.
  3. MALO: Una vez formateado (no creo que haya que montarlo), ocupa una parte de la memoria y no estoy seguro de cómo se puede recuperar.
  4. BUENO: Puede tener más de un ramdisk a la vez.
El nuevo ramdisk "ramfs":
  1. MALO: No he conseguido formatearlo más que según sus características predefinidas. Está en la capa VFS, sea lo que sea.
  2. BUENO: Puede tener más de uno.
  3. BUENO: Puede cambiar su tamaño máximo en línea de comandos.
  4. MUY BUENO: Sólo usa la memoria que necesita. Es decir, puede tener asignadas 64 megas de ram, pero si no hay más que un fichero de 2k en el ramdisk, sólo utilizará 2k de memoria. Y en cuanto borre un fichero tendrá inmediatamente más memoria para su ordenador.
  5. MALO: Bueno, realmente no es culpa suya. No caiga en la trampa de llenar dos ramdisk ramfs o se quedará sin memoria disponible.

 

Cómo utilizar un ramdisk al viejo modo

Por favor, lea este artículo: Linuxfocus:Cómo usar un ramdisk bajo Linux.

Para usar ramdisk con los núcleos 2.0 y 2.2, sólo tiene que teclear tres comandos:

mkfs -t ext2 /dev/ram1
mkdir -p /RAM1
mount /dev/ram1 /RAM1
como root, y ya está. En la mayoría de los sistemas el tamaño está limitado a 4 megas. Esto se puede cambiar en el arranque o recompilando el núcleo, lea mi anterior artículo para hacerlo. Puede añadir otro ramdisk así:
mkfs -t ext2 /dev/ram2
mkdir -p /RAM2
mount /dev/ram2 /RAM2

 

Cómo usar ramdisk con ramfs para el núcleo 2.4

Antes que nada, supongo que usted tiene un núcleo 2.4 con ramfs compilado. La mayoría de las distribuciones que utilizan el núcleo 2.4 lo traen compilado por defecto. Para este artículo he utilizado RedHat 7.1.

Es muy fácil. Cree un directorio y monte ramfs en él:

mkdir -p /RAM1
mount -t ramfs none /RAM1
Si quiere otro, es sencillo. Cree otro directorio y monte ramfs allí.
mkdir -p /RAM2
mount -t ramfs none /RAM2

 

Cambiar el tamaño de los ramdisk y otras opciones.

Éste es un ejemplo de cómo crear un ramdisk de 10 megas.

mkdir -p /RAM1
mount -t ramfs none /RAM1 -o maxsize=10000
Tomado directamente de http://www.linuxhq.com/kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
+       ramfs - Un sistema de ficheros de tamaño ajustable alojado en memoria
+
+
+  Ramfs es un sistema de ficheros que mantiene todo en RAM. Permite accesos
+  de lectura y escritura. En contraste con los discos RAM, que tienen
asignado
+  un tamaño fijo de RAM, ramfs crece y disminuye para adaptarse a los
ficheros
+  que contiene.
+
+  Puede montar ramfs con:
+      mount -t ramfs none /mnt/wherever
+
+  No hay más que crearlo y usar los ficheros. Cuando el sistema de ficheros
se
+  desmonta, todo su contenido se pierde.
+
+  ¡NOTA! Posiblemente este sistema de ficheros sea más útil, no como un
sistema
+  de ficheros real, sino como un ejemplo de cómo se pueden escribir sistemas
de
+  ficheros virtuales.
+
+Límite de recursos:
+
+Por defecto un ramfs estará limitado a usar la mitad de la memoria (física)
+para almacenar el contenido de los ficheros, y un poco más cuando los
metadatos
+se incluyan. Se puede controlar la limitación del uso de recursos por ramfs
con
+las siguientes opciones al montarlo:
+
+       maxsize=NNN
+               Establece el tamaño máximo de memoria asignado para el
sistema de
+ficheros a NNN kilobytes. Esta cifra se redondeará por abajo a un múltiplo
+del tamaño de página. Por defecto, es la mitad de la memoria física. NB. a
+diferencia de la mayoría de los otros límites, establecerlo a cero *no*
+significa que no haya límite, sino que limitará realmente el tamaño de
+los datos del sistema de ficheros a cero páginas. Puede haber una razón
+para esto en alguna situación específica.
+
+       maxfilesize=NNN
+               Establece el tamaño máximo de cada fichero a NNN kilobytes.
+Esta cifra se redondeará por abajo a un múltiplo del tamaño de página.
+Si NNN=0 no habrá límite. Por defecto, no hay límite.
+
+       maxdentries=NNN
+               Establece el número máximio de entradas de directorio (enlaces
+duros) en el sistema de ficheros a NNN. Si NNN=0 no habrá límite. Por
defecto,
+está establecido a maxsize/4.
+
+       maxinodes=NNN
+               Establece el número máximo de ínodos (i.e. ficheros distintos)
+en el sistema de ficheros a NNN. Si NNN=0 no habrá límite. Por defecto
+no hay límite (pero nunca puede haber más ínodos que entradas).

 

Ejecutar servicios en un ramdisk

He pensado una cosa. Escuche atentamente. ¿No sería fantástico si pudiese ejecutar sus servicios (como un servidor web, un servidor de base de datos o un servidor DNS) en un ramdisk? Normalmente, un servidor web no tiene muchos archivos de gran tamaño. Habitualmente, un servidor DNS no contiene demasiados ficheros. Podría, incluso, poner un servidor de base de datos en memoria si lo único que necesita es almacenar datos temporales.

Hoy en día la memoria RAM es barata. Hace poco conseguí 128 megas de ram por 120$, e imagino que el precio seguirá cayendo. Con 128 megas de ram, puedo fijar cualquiera de mis servidores web en memoria. Si el servidor web tuviera ficheros de gran tamaño, podría configurar httpd.conf para buscar en otro directorio que no esté en el disco ram. Mi servidor DNS es muy pequeño. Mi mayor servidor de base de datos es sólo de 28 megas. Considerando el hecho de que hoy se pueden tener ordenadores con 1 giga de memoria muy baratos, creo que estaría bien ejecutar todo lo que tengo en ram. La única parte delicada con el servidor de base de datos es que primero habría que guardar todos los datos en un servidor de base de datos aparte, antes de escribir en el servidor de base de datos en ram. Esto es lento, pero teniendo en cuenta que la mayor parte del tiempo se está leyendo y no escribiendo en la base de datos, se mejoraría el funcionamiento. Posiblemente, podríamos tener un espejo del disco ram en un disco duro.

Ya he explicado esto en mi otro artículo, lo puede leer aquí: http://www.gnujobs.com/mark/articles/Ramdisk.html#Example. Tan sólo cambie los siguientes comandos

        ### Crear las particiones ramdisk
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2

        ### Montar los ramdisks donde corresponde
mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html

por estos otros (incremente el número si 10MB no son suficientes):
mount -t ramfs none /home/httpd/cgi-bin -o maxsize=10000
mount -t ramfs none /home/httpd/icons -o maxsize=10000
mount -t ramfs none /home/httpd/html -o maxsize=10000

 

Ramdisk y Raid

¿Por qué querría usted combinar una partición de un disco duro y un ramdisk en una partición raid? No lo sé. Pero podría tener un uso a la larga. Los sistemas operativos inteligentes no proveen algo así porque no hay ningún beneficio inmediato. Es por esto que muchos sistemas operativos comerciales dejan de ser populares y porqué las aplicaciones libres están reemplazando aplicaciones escritas por idiotas que sólo están interesados por el dinero y no por la tecnología.

Hay tres problemas para combinar un ramdisk con una partición de un disco duro.

  1. Desconozco cómo hacerlo con ramfs, pero lo he conseguido con /dev/ram. Quizás, si se pudiese formatear una partición de un disco duro con el sistema de ficheros que utiliza ramfs, se podría hacer. No tengo ni idea de lo que es la capa VFS, así que intentaré estudiar más sobre esto.
  2. Si el espejo raid se ejecuta exactamente en paralelo, entonces la velocidad extra de la memoria no servirá de nada. No sé si es posible crear un espejo raid que sólo haga lecturas desde el disco ram, en cuyo caso, si esto fuera posible, sería de utilidad.
  3. En el arranque, hay que reconstruir el ramdisk.
Para inicializar el raid, he configurado mi /etc/raidtab como sigue.
  raiddev /dev/md3
          raid-level      1
          nr-raid-disks   2
          nr-spare-disks  0
          chunk-size     4
          persistent-superblock 1
          device          /dev/hdb6
          raid-disk       1
          device          /dev/ram3
          raid-disk       0
Después he ejecutado,
mkraid /dev/md3
mkfs -t ext2 /dev/md3
mkdir -p /RAID1
mount /dev/md3 /RAID1
El problema es que, en el arranque, el ramdisk se echará a perder. Entonces, después de arrancar el sistema
raidstart /dev/md3
raidhotadd /dev/md3 /dev/ram3
mount /dev/md3 /RAID1
Ahora recuerde, si no reconfigura el ramdisk para tener más de 4 megas, no servirá de nada que la partición de su disco duro sea mayor de 4 megas.

Estaría genial tener un raid con 3 particiones. 1 con el ramdisk y 2 con particiones del disco duro y consiguiendo que el ramdisk esté activo solamente para los ciclos de lectura. No sé si es posible aislar las lecturas a una única de las particiones en un raid, pero sería fantástico conseguirlo.


 

Comentarios

Posiblemente ésta sea la sección más importante del artículo. Amo Linux porque te permite meterte en líos. No hay que preocuparse, es el modo de aprender.
  1. Por defecto, ramfs utiliza la mitad de la memoria física (sin swap). Por tanto, si crea dos ramfs y las llena, su ordenador se quedará sin memoria y se colgará, como me ha pasado a mí. POR FAVOR, especifique el tamaño máximo de memoria dedicado al ramdisk, como se ha descrito anteriormente.
  2. Creo que ramfs utiliza su propio sistema de ficheros en lugar de ext2, por tanto, si copia ficheros de una parte a otra utilizando rsync o tar, no espere que los ficheros sean idénticos y tengan el mismo tamaño. No verá ninguna diferencia al usarlos, pero como no es ext2 sus propiedades podrían ser distintas en algún caso.
  3. He leído la documentación para ramfs en el núcleo y no parece que ramfs se haya implementado realmente para un uso extenso, pero no veo porqué. Funciona de la forma que esperaba.
Hay cosas que todavía no he hecho con los ramdisk.
  1. Quiero ver si puedo crear un raid con un ramfs y un disco duro.
  2. Si puedo hacerlo, entonces la lectura en el raid podría limitarse a una de las particiones.
  3. Poner un servicio, como un servidor web, en un ramdisk con raid. El truco aquí es usar raid, de forma que si hay algún cambio, no se pierda. Es por lo que raid es tan importante para mí ---- Podría poner servicios en memoria DE FORMA SEGURA y aumentando la velocidad de funcionamiento, aprovechando la mayor velocidad de la memoria sobre el disco duro, asumiendo:
  4. Configurar un ordenador para arrancar desde un cdrom, iniciar un servicio y recuperar los cambios a través la red. No se necesita disco duro. Estaría muy bien. Usted podría tener un servidor web (o cualquier otra cosa) ejecutándose en un ordenador sin disco duro y con sólo un cdrom y memoria. Si amplía la memoria a 1 giga, no veo porqué no podría tener su sistema ejecutándose enteramente sobre el cdrom. Sería excelente por cuestiones de seguridad. Simplemente, reiniciar el sistema, cargar cualquier cambio desde un recurso seguro, después iniciar los servicios, y su ordenador estará perfecto, limpio y libre de intrusiones. El servidor web no guardaría nunca nada en el ordenador local, sino que guardaría logs e información en un ordenador separado conectado de forma segura mediante una red interna. Anteriormente he hecho cdroms arrancables en red con discos ram. Sería estupendo combinar esto con mi anterior proyecto.
 

Recursos

  1. kernel/v2.4/patch/patch-2.4.3-ac2/linux.ac_Documentation_filesystems_ramfs.txt.html
  2. http://genericbooks.com/LDP/HOWTO/Software-RAID-HOWTO.html
  3. Acelerando pequeñas bases de datos en linux
  4. Cómo usar un ramdisk bajo linux
  5. Si este artículo cambiara estaría disponible aquí: http://www.gnujobs.com/Articles/21/Ramdisk2.html

¡Gracias a Katja por toda su ayuda!

 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Mark Nielsen, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
en -> -- Mark Nielsen
en -> es Roberto Hernando

2001-07-16, generated by lfparser version 2.17