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.