3-Sistemas de Archivos
3-Sistemas de Archivos
3-Sistemas de Archivos
3
3.1. INTRODUCCIÓN ..................................................................................................................... 3
3.2. CARACTERÍSTICAS DE LOS SISTEMAS DE ARCHIVOS ................................................................ 4
3.3. EL SISTEMA DE ARCHIVOS FAT ............................................................................................. 5
3.4. EL SISTEMA DE ARCHIVOS NTFS ........................................................................................... 8
3.5. LOS SISTEMAS DE ARCHIVOS E XT2 Y EXT3 .......................................................................... 11
BIBLIOGRAFÍA .................................................................................................................................. 14
3 Sistemas de archivos
En este tema se introducirán los sistemas de archivos empleados en los discos duros,
prestando especial atención a la organización de la información en el disco y a las
propiedades que se derivan. Finalmente a nivel de ejemplo se presentan los sistemas de
archivos en disco más empleados en el mundo PC.
Quedan fuera de los objetivos del tema el tratar otros sistemas de archivos, como los
sistemas de archivos de red, CD/DVD, etc.
Hay dispositivos que emplean sistemas de archivos idénticos o similares a los de los discos
duros, como son las memorias extraíbles USB. Por lo tanto, la información proporcionada
también será válida para este tipo de dispositivos.
El conocimiento interno de los sistemas de archivos permitirá llevar a cabo de forma más
eficiente la recuperación de información de discos duros.
3.1. Introducción
En el tema anterior se comentó que los discos duros se particionaban con la intención de
crear islas de información, aisladas unas de otras. Cada partición no es más que un conjunto
de sectores consecutivos dentro del disco.
En el caso del PC, hay particiones primarias y particiones extendidas, hasta un máximo de
cuatro en total. Las particiones extendidas son contenedores de unidades lógicas que pueden
entenderse como particiones dentro de las unidades extendidas. Cada partición primaria o
unidad lógica puede albergar un sistema de archivos diferente.
Para que una partición albergue un determinado sistema de archivos es necesario
formatearla. Por ejemplo, Windows utiliza la utilidad format para ello, mientras que Unix
utiliza la utilidad mkfs. Durante el formateo se suele llevar a cabo una comprobación de la
superficie del disco para desechar sectores defectuosos1.
Desde el punto de vista del sistema operativo cada sistema de archivos es visto como un
volumen. El sistema operativo asocia a cada volumen un identificador único. Por ejemplo,
Windows típicamente asocia una letra a cada volumen 2 (A:, C:, etc), mientras que Unix
asocia un nombre de dispositivo a cada volumen (/dev/hda1, /dev/hda2, etc).
Un sistema de archivos no es más que una gran estructura de datos que ocupa la totalidad del
volumen, en la cual se almacenan datos, así como información de localización de estos.
Sistemas de archivos de disco duro típicos en el mundo PC son FAT16, FAT32, NTFS, Ext2
y Ext3. Durante el proceso de formateo, la gran estructura de datos que constituye el sistema
de ficheros se inicializa. Una vez una partición ha sido formateada, ésta es accesible para la
lectura y escritura de datos.
La asignación de espacio de almacenamiento dentro de un sistema de archivos no suele
hacerse sector a sector, ya que sería demasiado costosa, sino empleando un número prefijado
de sectores. La unidad mínima de asignación de almacenamiento en el sistema de ficheros
1
En el caso de Windows es la opción por defecto, mientras que en Linux debe especificarse con la opción –c
de la utilidad mkfs.
2
En el caso de sistemas de archivos NTFS, es posible montar el volumen dentro de un subdirectorio, en la línea
de los sistemas de archivos Unix.
3
La elección del tamaño del cluster que hace el sistema operativo es importante desde el punto del rendimiento
y la eficiencia de almacenamiento.
4
La mayor parte de las operaciones sobre disco requieren varias etapas. Por ejemplo, el borrado de un archivo
requiere eliminar la entrada de directorio correspondiente y además liberar los clusters usados de la lista
correspondiente. Si el sistema cae nada más eliminar la entrada de directorio, se pierde la consistencia del
sistema de archivos. Llevando un registro de transacciones, la transacción se puede completar cuando el
sistema arranque de nuevo y se compruebe la consistencia del sistema de archivos.
5
Típicamente incluye el número del último cluster que has sido asignado.
6
El hecho de que el directorio raíz no tenga que ir ubicarse en unos sectores fijos es útil en presencia de
sectores defectuosos y le permite crecer o decrecer en función del número de entradas necesarias, como
cualquier otro archivo o directorio.
7
El tamaño máximo del archivo es de 4 GBytes, pues la entrada de directorio especifica el tamaño con 4 bytes.
NTFS
Copia del
sector de
$Boot Datos
arranque
La zona de datos incluye todos los archivos NTFS excepto el archivo $Boot.
Al final del volumen NTFS se deja una copia del primer sector del volumen, pues en caso de
pérdida, el volumen sería inaccesible.
El archivo $Boot es el único archivo NTFS ubicado en una posición fija dentro del volumen.
Está formado por los 16 primeros sectores del volumen. El primero de sus sectores es el
8
En la actualidad uno de los grupos de desarrollo de Linux está trabajando en obtener la máxima información
posible sobre la especificación NTFS, para completar el driver NTFS de Linux. http://www.linux-ntfs.org
Las posiciones 0003h a 000Ah definen una etiqueta de texto que identifica el sistema de
archivos o fabricante, en este caso NTFS. Esta etiqueta resulta muy útil para buscar una
partición NTFS que ha sido eliminada y así poder recuperarla. Las posiciones 0183h a
01FDh incluyen mensajes de error del IPL. Las posiciones 1FEh y 1FFh contienen la firma
55AAh. Las posiciones 000Bh a 0053h contienen el BIOS Parameter Block (BPB), el cual
9
Los últimos 15 sectores constituyen la extensión del IPL (aunque en la práctica sólo se usan los 5 primeros).
Los 16 sectores en total forman parte del archivo $Boot del sistema de ficheros NTFS.
Cada entrada de la MFT comienza con una cabecera. Cabe destacar que al principio de dicha
cabecera se encuentra el texto “FILE” para cualquier archivo o directorio10. A continuación
de la cabecera vienen los atributos, los cuales son estructuras de datos que almacenan un tipo
de datos específico. Prácticamente todo son atributos, desde el nombre de un archivo, fecha
de creación e incluso su contenido. Cada atributo tiene una cabecera que lo identifica y un
contenido justo después. Cuando todos los atributos no caben en la entrada de la MFT, lo
cual es habitual, la cabecera indica los clusters en los que se encuentra.
El archivo $MFT comienza con un tamaño inicial y crece progresivamente según se van
creando nuevos archivos y directorios. Los clusters al lado de la MFT son los últimos en
asignar, para evitar la fragmentación de la MFT cuando esta crece.
El archivo $MFTMirror contiene una copia de las primeras entradas de la MFT, en la
práctica, las 4 primeras entradas: $MFT, $MFTMirr, $LogFile y $Volume. Suele ubicarse en
10
La excepción ocurre cuando se ejecuta la utilidad chkdsk y ésta detecta una incoherencia, marcando la
entrada como “BAAD” (inválida).
Los primeros 1024 bytes del volumen están reservados. Pueden contener el código de
arranque del volumen cuando el sistema operativo arranca desde el volumen11.
11
Hay volúmenes arrancables que no incluyen código de arranque. En estos casos el arranque suele hacerse a
través de un gestor de arranque, fuera del volumen.
José María López López 11
Dpto. De Informática de la Universidad de Oviedo
El resto del volumen se divide en bloques de igual tamaño. El concepto de bloque es análogo
al concepto de cluster de los sistemas de archivos FAT y NTFS.
Los bloques se organizan en grupos, conteniendo todos ellos el mismo número de bloques,
excepto el último que puede ser más pequeño.
El superbloque tiene un tamaño de 1024 bytes (aunque muchos de estos bytes no los usa) y
contiene los parámetros del sistema de archivos. Es análogo al BIOS Parameter Block de los
sistemas de archivos FAT y NTFS. Todos los grupos tienen una copia del superbloque al
comienzo del grupo, aunque en la práctica sólo se utiliza el superbloque del primer grupo,
salvo que éste esté dañado 12 . El superbloque contiene información como el tamaño del
bloque, el número de bloques del sistema, nombre del volumen, fecha y hora en la que se
montó por última vez el volumen, etc.
La tabla de descriptores de grupo es una tabla de tamaño 1 bloque situada después del
superbloque y comenzando en un bloque nuevo. Por lo tanto, puede haber sectores que no se
usan entre el superbloque y la tabla de descriptores. La tabla de descriptores contiene
entradas de 32 bytes que describen el grupo del que forma parte. Cada una de estas entradas
proporciona:
• Número de bloque de comienzo del bitmap de bloques,
• Número de bloque de comienzo del bitmap de inodos
• Número de bloque de comienzo de la tabla de inodos
• Número de bloques que aún no han sido asignados en el grupo.
• Número de inodos que aún no han sido asignados en el grupo.
• Número de directorios en el bloque.
La contabilidad de los bloques que han sido asignados dentro de cada grupo se lleva a cabo
con el bitmap de bloques. Cada bit del bitmap indica si un bloque del grupo ha sido asignado
o no. El bit 0 de su primer byte está asociado al bloque 0, el bit 7 de su primer byte al bloque
8, el bit 0 de su segundo byte al bloque 9 y así sucesivamente. El bitmap de bloques
comienza justo después de la tabla de descriptores del grupo y tiene un tamaño de 1 bloque.
Para comprender el funcionamiento del bitmap de nodos y la tabla de inodos es necesario
conocer el concepto de inodo.
Cada archivo y directorio en el sistema tiene asociado un inodo almacenado en la tabla de
inodos de un grupo. El inodo es una estructura de datos (metadatos) de tamaño 128 bytes13.
El inodo contiene toda la información necesaria sobre un archivo o directorio, salvo los datos
que contiene. Por ejemplo, define los permisos, la fecha de creación, direcciones a los
bloques de datos, etc.
Cada inodo puede almacenar 12 punteros directos a bloques de datos, así como un puntero
de simple indirección, un puntero de doble indirección y un puntero de triple indirección. Si
un archivo o directorio requiere 12 bloques o menos se emplean los doce punteros directos.
Si por ejemplo un archivo requiere más de 12 bloques de datos, puede usarse 1 puntero de
12
La excepción está cuando se emplea la característica sparse superblock del sistema de archivos, en cuyo
caso, sólo alguno de los grupos contiene una copia del superbloque.
13
Si se emplea la versión dinámica de Ext2/Ext3 el tamaño del inodo puede ser variable.
Los directorios no son más que archivos especiales que almacenan listas de entradas en sus
bloques de datos. Cada entrada contiene un número de inodo, la longitud de la entrada, la
longitud del nombre, el nombre del archivo y opcionalmente el tipo de archivo. La figura
muestra un ejemplo simplificado de directorio
En la figura anterior puede observarse además como hay dos entradas del directorio que
apuntan al mismo inodo. A esto se le conoce como hard link. Básicamente consiste en tener
dos nombres para el mismo archivo o directorio14.
14
Symbolic links o soft links son simplemente archivos que contienen dentro de sus datos el nombre de otro
archivo o directorio.
Bibliografía
Se recomienda el siguiente libro:
“File System Forensic Analysis” by Brian Carrier. Addison Wesley Professional, 2005.
ISBN: 0-32-126817-2