CASCO, Ramón
CIMA, Mauro
COLOMER, Adrián
CORDOBA, Emmanuel
DÁVALOS, Germán
DELL´ ORTO, Juan P.
DUALIBE, Enrique
GARCÍA, Rodrigo
LEIVA, Guillermo
LÓPEZ, Diego
SANDIYÚ, Tomás
Un sistema de archivo es el software que se utiliza para organizar y manipular los datos almacenados en los compartimientos de disco; es el responsable de garantizar la consistencia de los datos, al procurar que los que se lean del disco después resulten idénticos a los que se escribieron en él.
Además de alojar los datos de los archivos, el sistema de archivo también almacena y manipula información muy importante sobre los archivos y el propio sistema de archivo (hace referencia a las marcas de fecha y tiempo, la propiedad, los permisos de acceso, el tamaño de los archivos y la localización o localizaciones del almacenaje en el disco, entre otras cosas). Esta información constituye lo que comúnmente denominamos metadatos.
Puesto que el sistema de archivo procura trabajar de manera asíncrona tanto como le sea posible a fin de evitar el embotellamiento del disco duro, una interrupción intempestiva de su trabajo podría dar lugar a la pérdida de los datos.
El sistema de archivo estándar de Linux (ext2fs) procura prevenir y recuperarse de una corrupción de los metadatos mediante el análisis exhaustivo del sistema de archivo (fsck) durante el arranque de la máquina. Dado que ext2fs mantiene copias redundantes de los metadatos críticos, es extremadamente improbable que estos datos se pierdan totalmente. El sistema evalúa dónde se hallan los metadatos corruptos, y luego repara el daño, ya sea copiando de la versión redundante o simplemente borrando el archivo o los archivos cuyos metadatos hayan sido estropeados.
Obviamente, entre más grande es el sistema de archivo a verificar, tanto más prolongado será el proceso de revisión. En una partición de varios gigabytes esta revisión de los metadatos durante el arranque puede tardar muchísimo tiempo.
Como Linux ha empezado a abarcar aplicaciones cada vez más complejas, tanto en grandes servidores como en servidores con menor tolerancia al tiempo muerto, existe la necesidad de un sistema de archivo más sofisticado que haga aún mejor la tarea de proteger los datos y los metadatos.
Los sistemas de archivos transaccionales disponibles para Linux son una respuesta a esta necesidad.
¿Qué es un
sistema de archivo transaccional?
Los sistemas de archivo más modernos han tomado prestadas del ámbito de las bases de datos las técnicas transaccionales, a fin de mejorar la recuperación de los datos tras una eventual caída. En estos sistemas de archivos las transacciones en disco se escriben de manera secuencial en un área llamada journal o log, antes de ser escritas en sus localizaciones finales dentro del sistema de archivo. Las distintas variantes de sistema de archivo transaccional difieren en términos de los datos que se escriben en el log. Algunas sólo escriben los metadatos del sistema de archivo; mientras que otras lo registran todo en el journal.
Ahora, si la caída del sistema ocurriera antes de que la entrada en el log hubiese sido efectuada con éxito, los datos originales todavía aparecerían intactos en el disco, y solamente se perderían los cambios más recientes. Si la caída se diera justo durante la actualización real del disco (es decir, después de que la entrada en el log se hubiera dado), la entrada en el journal mostraría lo qué supuestamente debió de haber ocurrido. De tal suerte que cuando el sistema arranque de nuevo, pueda simplemente rehacer las entradas en el journal y completar la actualización que fue interrumpida.
En cualquier caso, usted obtiene datos válidos y no una partición completa estropeada. Y como el tiempo de recuperación asociado con este sistema basado en log es muchísimo más corto, la máquina estará en línea en unos cuantos segundos.
Es importante observar también que el empleo de un sistema de archivo transaccional no vuelve obsoleto, ni mucho menos, el uso de los programas que sirven para revisar el sistema de archivo (fsck). Los errores de hardware y software que al azar llegan a corromper algunos bloques del sistema de archivo, generalmente no se pueden recuperar con el simple log de la transacciones en disco.
El primero de ellos es el ext3 creado por Stephen Tweedie, el sistema de archivo ext3 ha añadido capacidad transaccional al sistema ext2.
Namesys esta también desarrollando el sistema de archivo transaccional llamado ReiserFS.
SGI, por su parte, ha lanzado la versión 1.0 de su sistema de archivo XFS para Linux en mayo del 2.001.
El sistema de archivo ext3 ha sido derivado directamente de su antecesor, el ext2. Posee la valiosa característica de ser totalmente compatible con el sistema ext2, al ser justamente un sistema de archivo ext2 provisto con capacidad transaccional. Su desventaja obvia radica en que no ha incorporado ninguna de las características modernas de los sistema de archivo que permiten aumentar tanto la rapidez en la manipulación de datos, como el archivado.
El sistema ext3 se obtiene como un parche del núcleo, así que, antes de
todo, hay que descargar el kernel de Linux
de ftp://ftp.kernel.org/pub/linux/kernel/v2.2/ o de uno de sus espejos
regionales. El parche con el ext3 está disponible tanto en ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/
como en ftp.kernel.org/pub/linux/kernel/people/sct/ext3 , así como en
cualquiera de los espejos de este último sitio. De cualquiera de estos lugares
usted debe descargar los siguientes archivos:
· ext3-0.0.7a.tar.bz2: el parche para el kernel.
· e2fsprogs-1.21-WIP-0601.tar.bz2: una colección de programas e2fsprogs con soporte para ext3.
Se copia el archivo del kernel, y el archivo ext3 al directorio /usr/src/, y luego se descomprime:
Instalación de XFS
Para obtener una descripción técnica del sistema de archivo XFS, diríjase a la página oficial de XFS a cargo de SGI, así como a la página publicaciones de SGI.
XFS es un sistema de archivo transaccional que SGI ha liberado para Linux consiste en una tecnología madura que ha sido probada en los sistemas IRIX, donde ha desempeñado el papel de sistema de archivo oficial para todos los clientes de SGI. XFS se distribuye bajo la licencia GLP.
La versión 1.0 del XFS se ha lanzado para el kernel 2.4, de tal manera que yo la probé con el parche 2.4.2. De tal manera que el primer paso consiste en adquirir el kernel Linux-2.4.2 en uno de los espejos de ftp://ftp.kernel.org/.
Los parches correspondientes de XFS pueden obtenerse de oss.sgi.com/projects/xfs/download/Release-1.0/patches. De donde debemos descargar los siguientes archivos:
Se copia al directorio /usr/src el kernel Linux-2.4.2.tar.bz2, se cambia el nombre del directorio Linux a Linux-old y descomprima el archivo con el kernel nuevo:
Se copia cada uno de los parches al directorio principal en el árbol de la fuente del kernel Linux (es decir, /usr/src/linux), y efectúe el parchado:
zcat patchfile.gz | patch -p1
Se configura enseguida el núcleo, habilitando las opciones "XFS filesystem support" (CONFIG_XFS_FS) y "Page Buffer support" (CONFIG_PAGE_BUF) en la sección sistemas de archivo. Tome nota que también va a necesitar actualizar algunas herramientas del sistema a las siguientes versiones (o superiores):
Se compila e instala el nuevo kernel, y luego se reinicia el sistema.
Ahora se descarga las xfs utilerías xfs. Este archivo tar.gz contiene
una serie de comandos que nos servirán a la hora de usar el sistema de archivo
XFS, como el mkfs.xfs. Para compilarlos se efectúa la siguiente serie de pasos:
Una vez instalados estos comandos, ya se puede crear un sistema de archivo XFS nuevo utilizando el comando:
·
mkfs
-t xfs /dev/xxx
Una opción importante que usted podría necesitar es "-f", la cual sirve para forzar la creación de un nuevo sistema de archivo cuando la partición seleccionada tiene ya un sistema de archivo. Se debe tener en cuenta que esto destruirá todos los datos de dicha partición:
·
mkfs
-t xfs -f /dev/xxx
Finalmente, ya se puede montar el nuevo sistema de archivo mediante:
·
mount
-t xfs /dev/xxx /mount_dir
Instalación de ReiserFS
Para mayor información técnica acerca del sistema ReiserFS debemos dirigirnos a la página de NAMESYS y a la FAQ de ReiserFS.
El sistema de archivo ReiserFS entró oficialmente en el kernel de Linux desde la versión 2.4.1-pre4. Para emplearlo, usted va a necesitar de todos modos algunas utilerias extras (por ejemplo, mkreiserfs para crear el sistema ReiserFS en una partición vacía, el resizer, etc.) Una versión actualizada de ReiserFS está disponible como parche ya sea para el kernel 2.2.x o el 2.4.x. Yo utilicé el parche para el kernel 2.2.19.
El primer paso, como de costumbre, consiste en conseguir el archivo Linux-2.2.19.tar.bz2 del kernel desde uno de los espejos de ftp.kernel.org. Y luego obtener el parche del reiserfs 2.2.19. El parche actual, al momento de escribir el presente artículo, era el “3.5.33”.
No olvide, por favor, que si decide descargar el parche para el kernel 2.4.x, también tendrá que conseguir el archivo reiserfsprogs-3.x.0j.tar.gz que contiene las utilerias correspondientes. Ahora descomprima el kernel y el parche. Para ello, copie los archivos tar.bz2 al directorio /usr/src/ y renombre el directorio Linux como Linux-old; luego ejecute los siguientes comandos:
· tar -Ixf linux-2.2.19.tar.bz2
· bzcat linux-2.2.19-reiserfs-3.5.33-patch.bz2 | patch -p0
Debemos compilar el kernel de Linux como siempre, procurando no omitir habilitar el soporte para reiserfs en la sección sistemas de archivo. Enseguida debemos compilar e instalar las utilerías necesarias para usar reiserfs:
Se debe instalar el nuevo kernel y reiniciar la máquina. Una vez hecho esto, se puede crear una partición con el nuevo sistema de archivo reiserfs, para lo cual es necesario el comando:
Para montar esta partición hay que escribir:
En la actualidad existen al menos dos sistemas de archivo transaccionales en Linux que son robustos y confiables, y que bien pueden usarse sin ningún temor (es decir, XFS y reiserFS).
El sistema ext3 sigue estando en una fase alfa de desarrollo, y suele presentar varias fallas.
El Configurador Linux usa el script /usr/lib/linuxconf/lib/cfgarchive para grabar y cargar los archivos de configuración. Ese script está documentado (comentado). Usted puede especificar otros comandos de archivo yendo al menú ``Archivos de control y sistemas'', después ``Configurar todos los comandos y programas residentes''. Localice el comando cfgarchive y coloque en su lugar la ruta de su sustituto.
Chequeo
automático del sistema de archivos
Una
vez que se termina de manera correcta, todos los sistemas de archivos son
desmontados. El sistema de archivos raíz es puesto en modo lectura. Para cada
sistema de archivos, inclusive el raíz, es colocado un indicador sin
problemas. Ese indicador es revisado para cada sistema de archivos en la
próxima inicialización para decidir si él necesita de un chequeo forzado antes
de continuar el proceso de inicialización. Eso asegura que por lo menos la
estructura de los sistemas de archivos no sufrirá daños luego de una parada brusca
(pérdida de energía por ejemplo). ¡Eso no impide la pérdida de datos! Un
proceso de finalización correcto es la mejor alternativa.
El NFS introduce un enfoque diferente al ambiente de red entre máquinas PC. Muchos protocolos de compartimiento de archivos para PC establecen una relación entre un usuario y uno o muchos servidores. La máquina utilizada por el usuario no es relevante. Considerando que muchos PCs corren con sistemas operacionales monousuario, eso tiene sentido.
Unix y Linux son sistemas operacionales multiusuario. La configuración del NFS es relativa de máquina a máquina. Un servidor NFS está garantizando acceso a máquinas diferentes, o una por una o a todas las máquinas de una red. Una vez que una relación NFS es activada entre una máquina servidora y una cliente, todos los usuarios de la máquina cliente tienen acceso al servidor, de la misma manera que tienen acceso a archivos y directorios en la máquina cliente.
En verdad, un usuario de la máquina cliente tendrá el mismo acceso que tendría en caso de conectarse vía acceso remoto al servidor. Su acceso será limitado a las diferentes partes del sistema de archivos exportado por el servidor.
Acceso a los sistemas de archivos externos montados en el servidor
Linux
Para acceder a los directorios externos montados en el servidor Linux, donde residen las páginas HTML puede usar dos métodos:
Crear un enlace simbólico en el directorio designado como DocumentRoot para el servidor HTTP, ( /usr/local/etc/httpd/htdocs) que apunte al directorio montado30.5:
ä ln -s
/mnt/MIDOM_NW/vol1/home/htmldocs netware
o bien
ä ln -s /mnt/MIDOM_NT winNT
o bien
ä ln -s /mnt/MIDOM_UNIX unix
Editar el archivo srm.conf del directorio /usr/local/etc/httpd/conf y añadir un nuevo alias:
# Alias pseudonimo nombre real
Alias /icons/ /usr/local/etc/httpd/icons/
# alias para sistemas de ficheros externos montados en la maquina
Alias /netware/ /mnt/MIDOM_NW/vol1/home/htmldocs/
Alias /winNT/ /mnt/MIDOM_NT/
Alias /unix/
/mnt/MIDOM_UNIX
reinicialice HTTPd. Podrá acceder a los documentos del servidor netware y referirse a ellos como http://linux.midominio/netware/index.htm para los archivos netware y notaciones similares para los otros.
Entradas - Salidas
· El sistema de entrada / salida de UNIX está basado en el concepto de fichero. La práctica de la totalidad de las operaciones que se pueden realizar sobre la E/S se realizan a través de "ficheros".
· POSIX.4 sigue conservando esta filosofía de trabajo, pero de forma más restringida. Se conservan las funciones de acceso a los ficheros, pero no se requiere la existencia de un "sistema de ficheros" completo, únicamente los ficheros especiales (dispositivos) disponibles.
· POSIX obliga a que todos los ficheros especiales residan en el directorio "/dev". Es importante resaltar que el resto de ficheros y directorios (/etc, /usr, /bin, etc.) no es necesario implementarlos.
·
El acceso a los dispositivos al estilo POSIX es una
característica opcional que se elige al configurar los fuentes de RTLinux: make xconfig ().
Marcando la opción de POSIX-IO, RTLinux nos permitirá registrar dispositivos
para ser utilizados mediante las operaciones clásicas de ficheros.
· No tendremos ficheros especiales si no se registran "drivers".
· El directorio /dev de RTLinux no tiene ninguna relación con el directorio del mismo nombre de Linux.
·
El número máximo de ficheros que pueden abrirse en el
sistema es de 128.
Estructura global
· RTlinux dispone de un fichero especial para acceder a la memoria física del sistema: /dev/mem. Es una operación de configuración.
· Con este dispositivo especial se puede acceder a la memoria física como si se tratara de un fichero. Mediante este mecanismo se consigue escribir código portable e independiente del hardware.
· De todas formas, si no disponemos de la función lseek, este driver tiene poca utilidad, excepto como ejemplo para crear nuevos drivers.
· Para acceder a los puertos de entrada salida o a posiciones concretas de memoria podemos utilizar las mismas macros y funciones inline utilizadas por Linux. Funciones que se encuentran en el fichero #include <asm/io.h.>
·
El fichero io.h se puede calificar de "ofuscado"
en el mejor de los casos. Pero siempre podemos utilizar el preprocesador de
"C" para obtener un resultado más legible:
gcc -O2 -D__KERNEL__ -E /usr/include/asm/io.h.
En la salida de esta orden encontraremos mucha (demasiada) información
sobre todo tipo de estructuras de datos.
· Las funciones de E/S aquí declaradas son muy simples y su funcionamiento es muy intuitivo:
· El acceso a los puertos se puede realizar desde cualquier programa: rtl-tasks, manejadores de interrupciones de tiempo real y por supuesto desde el núcleo de Linux.
· Siempre que se utilice el fichero io.h es necesario utilizar la opción del compilador de optimización "-O2" o superior. Si no se genera correctamente el código ensamblador.
Entrada
y salida rápida:
void outb(unsigned char value, unsigned short port);void outw(unsigned short value, unsigned short port); void outl(unsigned int value, unsigned short port);unsigned char inb(unsigned short port);unsigned short inw(unsigned short port);unsigned int inl(unsigned short port);
Después de realizar la operación se fuerza una espera. Necesarias para poder trabajar con hardware lento (bus ISA):
void outb_p(unsigned char value, unsigned short port);void outw_p(unsigned short value, unsigned short port); void outl_p(unsigned int value, unsigned short port);unsigned char inb_p(unsigned short port);unsigned short inw_p(unsigned short port);unsigned int inl_p(unsigned short port);
Entradas y salidas de cadenas:
void outsb(unsigned short port, *addr, unsigned long count);void outsw(unsigned short port, *addr, unsigned long count);void outsl(unsigned short port, *addr, unsigned long count);void insb(unsigned short port, *addr, unsigned long count);void insw(unsigned short port, *addr, unsigned long count);void insl(unsigned short port, *addr, unsigned long count);
Nota:
En este fichero se nombra muchas veces el fichero printcap,
es el fichero /etc/printcap.
Su contenido está muy bien explicado en el Configuración-Impresión-Como.
El sistema de impresión de Linux, y en general de todos los Unix basados en BSD, funciona (a grandes rasgos) de la siguiente manera.
El
comando lpr copia
el fichero a imprimir en el directorio de spool indicado en el fichero printcap
(sd=directorio-spool)
y crea en dicho directorio un fichero de control en el que indica: el fichero
(del directorio de spool) a imprimir, el usuario que solicitó ese
servicio de impresión, los parámetros que se le pasaron en la línea de
comandos, etc. y ahí termina su función.
A
continuación entra en juego un daemon (una especie de tsr para los que
venimos del MS-DOS llamado lpd. Este
programa se activa periódicamente y comprueba si hay ficheros de control en el
directorio de spool, y en caso de que los haya realiza las siguientes
acciones para cada uno de dichos ficheros :
imprime
la página de banner, si ésta no se encuentra suprimida (orden sh del
fichero printcap),
pasándola a través del filtro de salida si hay alguno definido (orden of del
fichero printcap);
si (según el fichero de control) se indicó al comando lpr que
tenía que emplear algún filtro de impresión en concreto (ej.: lpr -t)
se ejecuta el filtro indicado en la correspondiente entrada del fichero printcap;
si no se indicó ningún filtro al comando lpr, se
ejecuta el indicado por el parámetro 'if' del
fichero printcap.
Cuando
se ejecuta el filtro, se redirecciona su entrada estándar al fichero a imprimir
(el creado por lpr en el
directorio de spool) , y su salida estándar a :
la
entrada estándar del filtro de salida (si éste está definido en el fichero printcap)
y la salida de dicho filtro al dispositivo de impresión asociado a esta impresora
(orden 'lp' del printcap);
al
dispositivo de impresión indicado en el fichero printcap.
CONCLUSIÓN:
En nuestra tarea de investigación hemos visto que el sistema de archivos transaccionales de Linux posee la ventaja (sobre Windows, de acuerdo a nuestras experiencias personales) de que en el momento de salvar un archivo Linux, realmente lo salva y evita por lo menos la pérdida total del archivo.
En cuanto a la Entrada / Salida, vimos que Linux se basa en el concepto de ficheros, lo que no indica que deba existir un sistema de ficheros pero sí los ficheros especiales disponibles. Vemos que es una modalidad distinta para el trabajo, que aparentemente es más ágil en el traslado de los de los datos.
![]()
Número de visitantes actuales disponible desde el 14/07/2002:
Autor: lrmdavid@exa.unne.edu.ar
Ó FACENA - http://exa.unne.edu.ar
Servicios WEB: webmaster@exa.unne.edu.ar