SISTEMAS DE FICHEROS
(FILE SYSTEMS)
INTRODUCCIÓN:
En esta página vamos a explicar todos los "intringulis" de los sistemas de ficheros, su estructura básica y su utlización.
Aquí no se pretende explicar todos los comandos de todas las versiones UNIX para manejarlos, si no más bien dar una visión general para tener una base sólida y poder posteriormente entender los manuales de cada fabricante.
ORGANIZACIÓN DE LOS SISTEMAS DE FICHEROS
Dada la amplia variedad de sistemas de ficheros (de los que halaremos posteriormente), vamos a explicar el sistema de ficheros 'original' de Unix.
En el sistema de ficheros original, los discos físicos se dividían en discos lógicos llamados particiones, a las que nos referiremos como sistemas de ficheros.
Cada sistema de ficheros contiene:
1. Un bloque o sector de arranque que se encontra en los primeros sectores del sistema de ficheros. El bloque de arranque contiene el programa de arranque inicial que se usa para cargar el sistema operativo.
2. Un superbloque que describe el estado del sistema de ficheros como: tamaño total de la partición, tamaño de bloque, punteros a una lista de bloques libres, el número de i-nodo del directorio raíz, el número mágico (número que identifica el tipo de sistema de ficheros), ...
3. Un vector de i-nodos (abreviatura de index nodes). Cada fichero está representado por un i-nodo que contiene información sobre dicho fichero como permisos, propietario, fechas de acceso, modificación, etc.
4. Bloques de datos con el contenido real de los ficheros.
I-nodos:
Un i-nodo es un descriptor que contiene la siguiente información sobre un fichero:
- propietario
- tipo de fichero (regular, directorio, especial, pipe, etc...)
- Permisos
- Fecha de último acceso o modificación.
- Número de enlaces (links) del fichero.
- Punteros a los bloques de datos del fichero.
- Tamaño del fichero en bytes (para ficheros regulares) , y major o minor (para dispositivos).
En un bloque de datos, caben varios i-nodos.
Los i-nodos incluyen punteros a los bloques de datos, y cada i-nodo contiene 15 punteros. La estructura de los i-nodos es la siguiente:
- Los 12 primeros punteros apuntan directamente a bloques de datos.
- El puntero nº 13 apunta a un bloque indirecto simple, que contiene punteros a bloques de datos.
- El puntero nº 14 a un bloque indirecto doble que contiene 128 direcciones de bloques indirectos simples.
- El puntero nº 15 apunta a un bloque indirecto triple.
Bloques de datos:
El sistema de ficheros asigna bloques de datos de un 'pool' de bloques libres. El tamaño de bloque en Unix es de 4 Kb además los bloques se guardan en posiciones aleatorias del disco.
Con bloques de 4 Kb:
Directo: 12x4 kb = 48 kb
Indirecto: 1024x4 Kb = 4 Mb
Doble Indirecto: 1024x1024x4 kb = 4 Gb
Triple Indirecto: 1024x1024x1024x4 kb = 4 Tb
EL SISTEMA DE FICHEROS DE BERKELEY (Berkeley fast file system)
Incrementan la velocidad de acceso al sistema de ficheros, el rendimiento y la fiabilidad:
- Duplican el superbloque, de forma que se pueda recuperar facilmente si se producen errores de disco.
- Usa un tamaño de bloque grande para mejorar el rendimiento.
- Añaden al superbloque el tamaño del bloque de forma que se pueda acceder a varios sistemas de ficheros usando tamaños de bloque de distinto tamaño.
- Almacena los bloques de datos relacionados en los 'cylinder groups' (grupos de cilindros) uno o más cilindros consecutivos en disco. Dentro de un 'cylinder group' se puede acceder a los bloques rapidamente.
- Dentro de cada 'cylinder group' hay una estructura de datos que contiene información sobre los bloques almacenados en ese grupo.
- Al tener bloques de gran tamaño se produce la fragmentación. Los fichero de pequeño tamaño se almacenan en fragmentos de tamaño fijo dentro de un bloque.
EL SISTEMA DE FICHEROS EXT2FS DE LINUX
EXT2FS viene de 2nd extended file system y sus características principales son:
- Similar al de Berkeley solo que no usa fragmentos si no que usa bloques de menor tamaño (1, 2 o 4 Kb).
- Puede realizar operaciones de lectura/escritura sobre varios bloques a la vez.