Introducción

editar

Es una evolucion del sitema Ext, que surge en Linux para sustituir al sistema de ficheros de Minix. En el 92 aparece su version 1 usando ya la api VFS del kernel Linux. Esta version soluciona gran parte de los problemas de que planteaba Minix (tamaño maximo de fichero y numero de caracteres). En el 93 aparece la version 2 incorporando ideas de Berkeley Fast File System y pensado para la escalabilidad.

Estructura de directorio

editar

Archivo:Salida.png

Inodos

editar

Breve Introducción.

editar

Los indos, junto con los superbloques, son una estructura esencial en cualquier sistema de ficheros. El inodo es un metadato encargado de almacenar informacion referente a cada fichero/directorio almacenado en cualquier sistema de ficheros (desde el punto de vista de un programador es un registro (register o struct)). El superbloque, es otro tipo de estructura que no contiene informacion de un fichero o directorio, sino que almacena informacion sobre el FS(filesystem) al que pertenece. Es una estructura esencial, ya que, de querer realizar un busqueda u otra operacion sobre el FS es necesario acceder a ella, que es quien 'sabe' o 'conoce' como realizar las operaciones en ese tipo especifico de FS. El Kernel es quien almacena una referencia a cada superbloque, de cada sistema de ficheros que haya sido registrado.

Continuacion.

editar

El inodo además de almacenar ciertos atributos del f/d (como el propietario) almacena referencias a los 'bloques' de datos. Los bloques son la unidad minima de almacenamiento a nivel logico. Mas claro: la unidad minima de lecto/escritura en el disco es el sector. El bloque es, desde el punto de vista del programador, una estructura cuyo tamaño es un multiplo del tamaño del sector del disco. Entonces, cada fichero puede necesitar varios bloques; implicitamente es como decir, que va a necesitar varios sectores del disco, donde cada bloque esta formado por una cantidad n de sectores del disco. (Ej: tamaño_del_sector= 512bytes, tamaño_del_bloque= 1KB ==>> el bloque ocupa 2 sectores del disco.) (Cada unidad de informacion que se almacene, va a ocupar en el disco un minimo de 1KB. Si el archivo que acabamos de crear ocupa 1.4K, entonces se necesitaran reservar 2 bloques. Si, se desperdicia espacio, pero hay tecnicas para intentar minimizar estas perdidas)

La informacion mas significativa que contienen los inodos, y que es visible en casi cualquier sistema operativo es:

 * Tipo de fichero.
 * Usuario propietario del fichero/directorio.
 * Grupo propietario del fichero/directorio.
 * Momento de creacion del f/d (ctime), fecha de la ultima vez que fue leido (atime), fecha de la ultima vez que fue modificado
   (mtime).
 * Tamaño del f/d.
 * Numero de bloques de almacenamiento asociados al fichero (incluyendo los bloques directos simples, dobles y triples)
 * Numero de referencias
 * Los indicadores que definen las caracteristicas del fichero.

Para aclarar un poco:

Quiero guardar un tema que recien acabo de descargar, cancion.mp3. Por razones de simplicidad vamos a decir decir que el tema pesa unos magicos 8KB. Como llegan hasta un sector dado del disco??!. Bueno, el navegador por el cual nos hemos descargado la cancion, se encarga de realizar una llamada al sistema operativo(evento que ocurre al presionar en Guardar) para pedirle que por favor la guarde en mi disco. Supongamos que lo guardarias en el directorio /home/lala. El Kernel, entonces, busca la referencia al superbloque correspondiente a al sistema de ficheros local(/), y obtiene la informacion correspondiente para realizar la escritura. Es momento de reservar la cantidad de bloques necesarios para almacenar el archivo (8 bloques en el caso que cada uno sea de 1KB), escribirlos en el disco junto con los atributos del archivo, y por supuesto, tambien hay que crear una entrada en el directorio home, etc; el proceso es un poco mas complejo, pero solo pretendo dar una vision global.

Desde el punto de vista del usuario:

  En la terminal de nuestra distro, teclear:  $ls -l
  Ej:   drwxr-xr-x  2 nicolas nicolas  4096 2009-02-16 20:39 Downloads

Que tenemos? Por supuesto, no es mas que la informacion del inodo correspondiente al directorio Downloads.

1)

  Tipo de archivo: En primer lugar la 'd' indica que es un directorio (podria ser un enlace o acceso directo 'l', un archivo de  
  bloque 'b', un archivo de caracteres 'c', un archivo comun '-').

2)

  Permisos: A continuacion, aparecen los tres grupos de permisos, cada uno correspondiente a: el propietario, al grupo, y a los  
  demas.
  Es decir...
    - El propietario (nicolas en este caso) tiene permiso de escritura,lectura y ejecucion.
    - El group (tambien nicolas) tiene permiso solo de lectura y ejecucion.
    - Los demas, tambien tienen los mismos permisos que el grupo.

3)

  Referencias/Nombres/Enlaces Duros: El 2 indica, la cantidad de nombres que tiene la carpeta Downloads. Es decir, la cantidad 
  total, en el FS de referencias hacia los bloques de datos que almacenan el directorio. Que porque no dije inodo? porque no 
  seria correcto! Existen dos tipos de enlaces o de accesos directos.
     - El enlace blando: al crear un enlace de este tipo, se cree un archivo que contiene la referencia al otro archivo. Si, se 
       le asigna un nuevo inodo a este archivo enlace. Lo importante es saber que en los bloques, lo que se almacena es la ruta 
       commpleta, para acceder al archivo apuntado. Razon por la cual, si movemos el archivo apuntado, el enlace deja de 
       servirnos.
       (existen otro tipo de complicaciones)
     - El enlace duro: al crea un enlace de este otro tipo, no se le asigna un inodo libre. 
       Esta vez lo que se almacena, es un refencia al mismo inodo del archivo apuntado. Como se almacena? como una entrada a un
       directorio.(como parte del contenido de un directorio)(tambien tiene sus desventajas)
  El numero 2, indica la cantidad de enlaces duros. Si se borrace cualquiera de los dos archivos (en este caso /home/nicolas
  /Downloads  o  el enlace duro -la entrada de directorio- ), el numero se decrementaria, y los bloques serian liberados (el 
  archivo borrado en forma permanente) solo en el caso de no existiera ningun archivo con referencia a dichos bloques. Razon por 
  la cual, al ejecutar el comando "ls -li" para visualizar los numeros de inodo, veriamos que los numeros de nuestro directorio 
  original y el enlace, coincidirian.    

4) Propietario 5) Grupo 6) 7) 8) 9)

Bien, explicado esto, podemos mirar un poco más de cerca la estructura del inodo. Una característica de inflexión en la estructura del inodo, sería la de contener una cantidad N de referencias a bloques. ¿Por qué sería poco flexible? Porque se estaría limitando la cantidad de bytes que podría ocupar un archivo. Una solución simple sería que además de contener referencias directas, almacenase referencias indirectas (simple, dobles o triples). Creo que la figura habla por sí sola. En el caso de FS ext2, los inodos contienen 12 bloques directos y 3 indirectos (2 dobles + 1 triple).

 

Consistencia en un sistema de ficheros

editar

Para poder continuar sea hace necesario comentar brevemente que participacion tiene el superbloque en la comprobacion de la consitencia de un FS sin registro. El superbloque guarda una 'marca' para indicar que el FS no esta sucio. Cada vez que el sistema se cierra de forma ordenada, lleva a cabo todas las operaciones pendientes (en este caso nos importan las de disco). Una vez realizado dicho proceso, se actualiza tambien la 'marca' del superbloqe, indicando que la operacion fue exitosa. Durante un corte de energia, logicamente, los datos almacenados en la RAM no fueron actualizados en el disco!, y no solo se pudieron de haber perdido datos, sino que como es de suponerse, en el superbloque no figura el FS como actualizado/consistente/correcto/limpio. Este es motivo suficiente para que durante el reinicio, los sitemas realicen una comprobacion de consistencia del FS; donde la comprobacion no solo implica un orden logico estructural del FS, sino que además, durante este proceso se intentan recuperar errores. En que sentido un sistema es consistente? Bueno, aquellos bloques que estan registrados (mapa de bits) como libres, deben estan libres...ningun inodo tiene porque estar referenciando a dichos bloques, de igual forma con los inodos libres, etc.

Sistemas de ficheros con registro.

Existen varias ventajas de estos tipos de FS respecto a los anteriores; algunas de estas se mencionan luego de la siguiente descripcion. En terminos simples, estos sistemas de ficheros guardan registros de la operaciones que se realizaron, o deberian de haberse realizado sobre el disco. Este tipo de operaciones implican una seria de pasos. Los pasos serian:

 - Encontrar bloques libres (en lo posible lo mas continuos posible)
 - Almacenar los datos
 - Marcar los bloques como ocupados
 - Crear un inodo, y referenciar los bloques (mas adelante se hara referencia a este tema)
 - Guardar la informacion del archivo en el inodo
 - Marcar la operacion en el registro como completada.

En este tipo de FS, durante un reinicio no sera necesario (como sucedia con el ext2) recorrer toda la lista de inodos libres, bloques libres, realizar comparaciones, etc,...bastara simplemente con verificar si quedo alguna accion/entrada incompleta en los registros. Es importante aclarar que cada FS con registro tiene su propia tecnica para recuparse de errores. En la seccion siguiente se tratara con mas detalle ext3.

Lo prometido, algunas ventajas sobre los FS con registro:

 - Un tiempo mas rapido de reinicio del sistema despues de una caida porque la computadora no tiene que examinar cada FS en su 
   totalidad para garantizar su consistencia. Los FS con registro se pueden hacer consistentes simplemente reproduciendo de nuevo
   las entradas completas en el registro. Las entradas incompletas del registro simplemente se desechan cuando se reproduce de 
   nuevo el registro.
 - Mayor flexibilidad. Los sistemas de ficheros con registro crean y asignan a menudo los inodos conforme son necesarios, en 
   vez
   de reservar un numero especifico de inodos cuando se crea el sistema de ficheros. Esto elimina las limitaciones en el numero de 
   ficheros y de directorios que se pueden crear en ese particion. No tener que manejar listas de inodos que todavia no han 
   asignado tambien reduce en parte la sobrecarga asociada con mantener los metadatos del sistema de ficheros y reduce la 
   sobrecarga que implica, si posteriormente se desea cambiar el tamaño de un sistema de fcicheros con registro.
 - Un acceso mas rapido a los ficheros y a los directorios. La mayoria de los sistemas de ficheros con registro, utilizan 
   algoritmos mas sofisticados para almacenar y acceder a los ficheros y alos directorios que los sitemas de ficheros sin registro.
   Los sistemas de registro JFS, ReiserFS, y XFS usan estructuras de datos avanzadas como arboles B (balanceados), arboles B+ o 
   arboles B* para acelerar la busqueda y almacenamiento de inodos.
 - La escritura al registro puede ser optimizada. Como todas las actualizaciones del sistema de ficheros hechas por los 
   sitemas de ficheros sin registro, las escrituras al registro usado por un sistema de ficheros con registro deben ser hechas 
   sincronamente. Sin embargo, los registros  usados por los sistemas de ficheros en si, por dos razones principales: pueden ser 
   escritos en modo en vez de tener que pasar a traves del sistema de ficheros, y las escrituras del registro casi siempre 
   consisten en añadir datos mas que en, insertarlos. La mayoria de los registros tienen espacio reservado, son de tamañao fijo, 
   son circulares y usan rutinas especificas para leer y escribir.

Configuracion de la tabla de sistemas de ficheros de Linux (/etc/fstab)

editar

Este es un ejemplo del contenido del archivo fstab:

LABEL=/          /             ext2          defaults                   1  1
LABEL=/          /boot         ext2          defaults                   1  2
LABEL=/          /home         ext2          exec,dev,suid,rw,usrquota  1  2
/dev/cdrom       /mnt/cdrom    iso9660       noauto,owner,ro            0  0
/dev/fd0         /mnt/floppy   auto          noauto,owner               0  0
/dev/hdb1        /opt          xfs           defaults                   1  2
/dev/hdb6        /opt2         reiserfs      exec,dev,suid,rw,notail    1  2
LABEL=/tmp       /tmp          ext2          defaults                   1  2
LABEL=/usr       /usr          ext2          defaults                   1  2
LABEL=/var       /var          ext2          defaults                   0  0
none             /proc         proc          defaults                   0  0
none             /dev/pts      devpts        gid=5,mode=620             0  0
/dev/hda7        swap          swap          defaults                   0  0
/dev/cdrom1      /mnt/cdrom1   iso9660       noauto,owner,kudzu,ro      0  0
/dev/cdrom2      /mnt/cdrom2   iso9660       noauto,owner,kudzu,ro      0  0
/dev/lvm/vol1    /books        reiserfs      exec,dev,siud,rw,notail    1  2
/dev/lvm/vol2    /proj         xfs           defaults                   1  2

nota: a medida que avance el desarrollo de este manual, ire explicando cada una de estas lineas y los conceptos nuevos necesarios para poder comprenderlo. Si, va a ser una wikilibro de sistemas de ficheros de linux y no solo de ext2/ext3, ya no que he visto informacion unificada sobre estos temas.

Cada entrada del archivo se compone de 6 campos:

1° Dispositivo o FS remoto: este es generalmente el fichero del dispositivo de Linux en el que la particion sera montada pero tambien puede er una entrada de la forma anfitrion:directorio para los sistemas de ficheros distribuidos (como NFS). Los sistemas de ficheros ext2 tambien se pueden ifentificar por el nombre que se les asigno en la etiqueta de volumen del sistema de ficheros cuando fue creado el sistema de ficheros.

2° Directorio o punto de montaje: este es el directorio en el cual debe ser montado el sistema de ficheros especificado.

3° Tipo de sistema de fichero: en el caso que se quiera guardar la entrada, pero no montar la particion correspondiente, se puede poner la palabra ignore en este campo y ese sistema de ficheros no sera montado, comprobado para saber si es consistente, etc.

4° Lista de opciones de montaje: muchas opcines son especificas para cada sistema de ficheros, y muchas otras lo son para un sistema de ficheros especifico (mas adelante se describen algunas generales).

5° Para dump: es utilizado por el comando dump, un comando de copias de seguridad del sistema de ficheros estandar, para identificar los sistemas de ficheros que deben ser guardados cuando se ejecuta el comando. Si el quinto campo contiene un 0, o falta, el programa dump asume que el sistema de ficheros asociado a la entrada, no necesita ser guardado.

6° Para fsck: es utilizado por el inspector de consistencia del sistema de ficheros, para identificar los sistemas de ficheros cuya consitencia se debe verificar cuando se reinicia el sistema, y el orden en el cual debe comprobarse la consistencia de esos sistemas de ficheros. Si este campo contiene un cero o falta, fsck asume que el sistema asociado a esa entrada no necesita ser comprobado.

Por el momento voy a dejar este enlace, sobre todo por las tablas, y algunos datos interesantes como el tamañano de los bloques, el tamaño maximo de los archivos y demas. [1]

Ext3= Ext2 + Registro

Para aprovechar la fiabilidad del sistema ext2, los desarrolladores decidieron extender su funcionalidad agregandole un registro. Es decir, en la implementacion, las unicas deferencia importantes entre ext2 y el ext3, son: la adición de un archivo registro y el funcionamiento interno, correspondiente a las operacion que se realizan sobre el FS. (estructuralmente ext2 y ext3 son iguales). Esto implica que además de aprovechar los años de desarrollo del ext2, tambien podian seguir utilizandoce las herramientas administrativas para analizar, reparar y ajustar los FS ext2, en los FS ext3. Tambien, implica que cualquier mejora en el desarrollo del FS ext2, podria aprovecharse en los FS ext3. Estos son los motivos por los cuales es posible migrar de un FS ext2 a un FS ext3.

Por el momento voy a dejar este enlace, sobre todo por las tablas, y algunos datos interesantes como el tamañano de los bloques, el tamaño maximo de los archivos y demas. [2]

(pl)