Tipo de sistema de archivos y posibilidades de recuperar datos

En muchas situaciones, una herramienta de recuperación de datos puede ser un verdadero salvador que devuelve milagrosamente los archivos de los que mentalmente se ha despedido. Pero aunque el proceso puede parecer una maravilla desde el punto de vista de un usuario común, no se debe olvidar que, de hecho, esta herramienta no es una varita mágica. Todo lo que hace se realiza gracias a técnicas científicas en su base que, eso sí, tienen sus limitaciones. A veces, puede que un archivo se restaure sin su nombre inicial o fuera de la carpeta a la que pertenecía. En ciertos casos, los datos perdidos son irrecuperables, sin importar cuán avanzado sea el programa. Y, sin lugar a dudas, los resultados de la recuperación nunca son aleatorios: se ven afectados por un conjunto de factores, e incluso uno de ellos puede marcar la diferencia. Aquí nos fijamos en lo crítico que determina la posibilidad de recuperación: la forma de organización de datos en un almacenamiento o, como se le llama, el sistema de archivos. Una vez que comprenda las diferencias entre los sistemas de ficheros, le será más fácil evaluar un escenario de recuperación particular y tendrá expectativas realistas del uso del software.

Última actualización:
el 20 de julio de 2023

Tiempo de lectura: 24 min

¿Cómo se relaciona un sistema de archivos con el potencial de recuperar datos?

Para empezar, cualquier dispositivo de almacenamiento de datos, desde una tarjeta de memoria diminuta hasta un disco duro interno voluminoso, tiene una o varias particiones. Estas son regiones en un medio físico que crea el sistema operativo y que se tratan como discos lógicos separados. La información sobre ellas generalmente se almacena al comienzo de la unidad en un elemento especial llamado tabla de particiones.

Cada partición es independiente de las demás y tiene su propio sistema de archivos (sistema de ficheros). Este es el principal mecanismo responsable de la colocación de datos dentro de los límites de una partición. Gracias a dicho sistema, los datos se mantienen ordenados y se puede acceder fácilmente a ellos siempre que sea necesario.

Sin embargo, los sistemas de archivos no son todos iguales: pueden tener diferentes principios de organización del espacio de almacenamiento. Sus variantes se conocen principalmente como tipos o, con menos frecuencia, como formatos. El formato puede ser asignado automáticamente por el SO o elegido por el usuario entre las opciones disponibles.

Cada tipo de sistema de ficheros separa los datos reales que contienen los archivos de la información que describe este contenido, conocida como metadatos. Estos últimos incluyen el nombre del archivo, su tamaño, ubicación, posición en la estructura del directorio y otras propiedades que ayudan a identificarlo. Al mismo tiempo, las reglas que siguen los sistemas de ficheros para almacenar dichos detalles técnicos pueden variar sustancialmente.

Aparte de regular la forma en que se coloca la información, el sistema de archivos también define el método de manejar la misma en el proceso de eliminación o formateo. Como regla general, el contenido de los archivos no se destruye de inmediato, pero los metadatos se borran o, como alternativa, se modifican para que sea claro que ahora es el momento de deshacerse de ellos. Por lo tanto, en caso de cualquier percance y cuando ocurre la necesidad de recuperación de datos, las posibilidades de restaurar lo perdido dependen drásticamente del comportamiento del sistema de archivos empleado.

Si usted eliminó algunos datos o formateó todo el volumen por un error desafortunado, puede estimar la posibilidad de arreglar las cosas, si sabe el tipo de sistema de archivos que realizó esta operación. Así que, echemos un vistazo más de cerca a diferentes formatos de Windows (NTFS, FAT/FAT32, exFAT, ReFS), macOS (HFS+, APFS), Linux (Ext2, Ext3, Ext4, ReiserFS, XFS, JFS) y BSD/Solaris/ Unix (UFS, ZFS), su estructura general y métodos de eliminación y formateo.

Los sistemas de archivos de Windows

El sistema operativo Windows de Microsoft actualmente ofrece dos formatos para unidades internas: NTFS y ReFS de grado de servidor. Los dispositivos de almacenamiento externos, como las memorias USB y tarjetas de memoria, suelen formatearse con FAT/FAT32 o exFAT.

NTFS

Al comienzo de una partición NTFS está el Registro de arranque de volumen (Volume Boot Record o VBR). Este archivo contiene información sobre el tamaño y la estructura del sistema de archivos, así como el código de arranque.

NTFS gestiona datos mediante la Tabla maestra de archivos (Master File Table o MFT). Básicamente, es una base de datos que comprende registros para cada archivo y carpeta presente en el sistema de ficheros. Cada registro de la Tabla contiene una variedad de atributos como ubicación, nombre, tamaño, fecha/hora de creación y última modificación. La propia MFT tiene el atributo Bitmap que indica cuáles de los registros están actualmente en uso.

Los archivos muy pequeños se almacenan como atributos directamente en las celdas de la tabla MFT. Y en caso de un archivo grande, se almacena fuera de la Tabla maestra de archivos que, a su vez, contiene un registro que apunta a la ubicación del mismo. De manera similar, cuando los atributos no caben en un solo registro de la tabla MFT, se almacenan fuera de ella y solo se mantienen allí sus direcciones.

En NTFS, las carpetas están representadas por entradas de directorio. Estas, de hecho, son archivos que contienen una lista de otros archivos con referencias a ellos.

Otro archivo importante de NTFS es el Mapa de bits (Bitmap). El Bitmap realiza un seguimiento de todas las ubicaciones ocupadas y vacantes en el sistema de archivos.

En la imagen a continuación, se puede ver la relación entre los elementos clave de la estructura de NTFS: Registro de arranque de volumen ($Boot), Tabla maestra de archivos ($MFT) y región de contenido de datos:

alt

Borrado

Procedimiento: NTFS mantiene el registro del archivo en la MFT, pero lo etiqueta como no utilizado y marca la ubicación ocupada por su contenido como libre en el Mapa de bits. El archivo también se elimina de la entrada de directorio correspondiente.

Recuperación: El nombre, el tamaño y la ubicación del archivo se deben permanecer en el registro correspondiente en la Tabla maestra de archivos. Si el registro respectivo permanece sin cambios y el contenido de datos no se ha sobrescrito ya, las posibilidades de una recuperación exitosa son del 100%. Incluso si falta este registro, todavía es posible encontrar el archivo sin pasar por la estructura del sistema de ficheros con la ayuda del método de recuperación por datos RAW. En este caso, los datos sin procesar en el disco se analizan en busca de patrones predefinidos característicos de los archivos del tipo dado. No obstante, la desventaja principal del método es la falta de los nombres de fichero y la estructura de carpetas originales en los resultados.

Formateo

Procedimiento: Se crea una nueva tabla MFT que borra el comienzo de la MFT existente. Sin embargo, el resto de la Tabla permanece intacto.

Recuperación: Los primeros 256 archivos ya no están presentes en la Tabla maestra de archivos, por lo que su recuperación sólo es posible con el método de recuperación por datos RAW. La posibilidad de recuperar los archivos que siguen a estos 256 es de hasta el 100%.

FAT/FAT32

La información básica sobre la organización del sistema de ficheros está disponible en el Sector de arranque (Boot Sector) al comienzo de la partición.

FAT/FAT32 divide el espacio de almacenamiento en piezas del mismo tamaño llamadas clústeres. El contenido de un archivo puede guardarse en uno o más clústeres que no necesariamente están cerca uno de otro. Los archivos cuyo contenido se almacena en clústeres no secuenciales se llaman fragmentados.

La Tabla de asignación de archivos (File allocation table o FAT) rastrea qué clústeres están ocupados por qué archivos. Por lo general, se crean dos copias de la tabla con fines de respaldo. Cada clúster tiene su propia entrada en la tabla FAT donde se indica si está ocupado. Si está así, allí también habrá un enlace al siguiente clúster al que pertenece el mismo archivo o una indicación de que éste es el último clúster de la cadena.

El Directorio raíz (Root Directory) es una serie de entradas que describen todos los archivos y carpetas. Cada entrada de directorio comprende el clúster inicial, el nombre, el tamaño y otros atributos del archivo. El número del clúster también apunta a una entrada en la Tabla de asignación de archivos.

En la imagen a continuación, se muestra la relación entre los elementos clave de la estructura de FAT/FAT32: Sector de arranque, dos Tablas FAT, Directorio raíz y área de datos:

alt

Borrado

Procedimiento: FAT/FAT32 marca la entrada de directorio del archivo como eliminada y borra toda la información de las entradas correspondientes de la Tabla de asignación de archivos, destruyendo así los enlaces a sus clústeres intermedios y final. El primer carácter del nombre de archivo se reemplaza por un valor que indica su estado eliminado. FAT32 también elimina parcialmente la información sobre el clúster inicial del fichero.

Recuperación: El primer clúster y el tamaño del archivo se pueden encontrar en la entrada de directorio respectiva, pero la ubicación de los clústeres intermedios y final se debe asumir. Por esta razón, la recuperación de datos puede traer resultados incompletos. Mientras tanto, FAT/FAT32 no realiza la desfragmentación, lo que dificulta la restauración de archivos con el método de recuperación por datos RAW. Otro problema es que los nombres de archivo tienen una longitud limitada e incluso pueden almacenarse por separado. Así que, es posible que la recuperación de los nombres de archivo largos no tenga éxito.

Formateo

Procedimiento: Se borran ambas copias de la Tabla FAT, así como el Directorio raíz. Sin embargo, el contenido de datos aún se preserva allí.

Recuperación: Al igual que en el caso anterior, los archivos que se almacenaban en clústeres consecutivos se pueden recuperar usando el método de recuperación por datos RAW. Pero, debido a la fragmentación, una gran parte de los datos pueden resultar dañados.

exFAT

exFAT se ha desarrollado como sucesor de FAT/FAT32 y, por lo tanto, se parece mucho a los sistemas de archivos de esta familia. En exFAT, la estructura del volumen también se describe en el Sector de arranque (Boot Sector). Una copia más del Sector de arranque se almacena para respaldo.

exFAT también usa la Tabla de asignación de archivos (File Allocation Table), pero sólo hay una copia de la misma y ella contiene enlaces solamente para archivos fragmentados. Además, el estado de clúster no se presenta directamente en la entrada de la tabla, sino que está indicado en el Mapa de bits de asignación (Allocation Bitmap) dedicado. Dicho mapa se almacena en la región de datos y muestra si el clúster está en uso o listo para escribir datos. Este enfoque facilita que exFAT encuentre clústeres contiguos para colocar el contenido del archivo y, por lo tanto, ayuda a evitar la fragmentación.

Las entradas de directorio se manejan de la misma manera que en FAT/FAT32, pero también hay una entrada especial en el Directorio raíz (Root Directory) en la que se almacena información sobre el Mapa de bits de asignación.

En la imagen a continuación, se puede examinar la relación entre los elementos clave de la estructura de exFAT: Sector de arranque, Tabla de asignación de archivos, Directorio raíz y área de datos:

alt

Borrado/formateo

Procedimiento: exFAT cambia el estado de los clústeres asociados con el fichero en el archivo del Mapa de bits de asignación. Las entradas de la tabla FAT no se actualizan de inmediato para evitar escrituras innecesarias. El área de datos tampoco se limpia.

Recuperación: Si un archivo se fragmentó, la cadena de sus clústeres se puede reconstruir utilizando las entradas restantes de la Tabla de asignación de archivos. En caso de que estos enlaces se pierdan, los resultados de recuperación pueden ser incompletos. Sin embargo, en caso de exFAT, el método de recuperación por datos RAW puede dar resultados buenos, gracias a una menor fragmentación en comparación con FAT/FAT32.

ReFS

El diseño de ReFS difiere considerablemente del mismo del resto de formatos de Windows de Microsoft. En este sistema, la información generalmente se organiza en forma de árboles B+ que funcionan de manera similar a las bases de datos. Los árboles B+ se usan para casi todos los elementos del sistema de archivos, incluido el contenido de los archivos y los metadatos. Este tipo de árbol está compuesto por la raíz, los nudos internos y las hojas. Cada nodo del árbol tiene una lista ordenada de claves y punteros a los nodos de nivel inferior o a las hojas.

El Directorio (Directory) es el componente principal del sistema de ficheros. También está representado por un árbol B+. La clave en él corresponde al número de un objeto de carpeta. Un archivo no se trata como un elemento separado del Directorio, sino que existe en forma de registro.

Otra característica notable de ReFS es el uso del método Copy-on-Write o CoW (copiar al escribir): las entradas originales del sistema de archivos nunca se modifican de inmediato, sino que se copian y se escriben en una nueva ubicación junto con los cambios necesarios.

Borrado

Procedimiento: La estructura de los metadatos se debe re-construir en respuesta a la eliminación del archivo. No obstante, ReFS no la edita en el acto. En lugar de esto, crea una copia de la misma, realiza los cambios necesarios allí y vincula los datos a la estructura actualizada sólo después de que se haya escrito correctamente en el almacenamiento.

Recuperación: Gracias al método Copy-on-Write, la versión anterior de los metadatos aún permanece en el almacenamiento, lo que permite recuperar hasta el 100% de los archivos eliminados a menos que se sobrescriban con nuevos datos.

Los sistemas de archivos de macOS

En estos días, la Utilidad de disco de Apple (Disk Utility) permite elegir entre varios tipos de sistemas de archivos. Inicialmente, HFS+ (también conocido como Mac OS Extended) era la opción predeterminada para las unidades en macOS. Pero en las últimas versiones hubo un cambio al moderno sistema de archivos APFS optimizado para los almacenamientos de memoria flash. El formato exFAT anteriormente descrito, aunque creado por Microsoft, también se puede usar en los dispositivos externos que se comparten entre diferentes plataformas.

HFS+

El Encabezado de volumen (Volume Header) está presente al comienzo de una partición de HFS+. Proporciona toda la información general al respecto, así como las ubicaciones de las estructuras primarias del sistema de archivos. Al final de la partición, se coloca una copia idéntica del Encabezado de volumen.

El resto de los metadatos del sistema de ficheros está representado por un conjunto de archivos especiales que pueden almacenarse en cualquier lugar dentro de la partición. La mayoría de ellos están organizados como árboles B. Un árbol B consta de varios nodos, cada uno de los cuales tiene registros que contienen una clave y datos específicos.

HFS+ divide todo el espacio de almacenamiento en unidades del mismo tamaño llamadas bloques de asignación (allocation blocks). En un esfuerzo por minimizar la fragmentación, estos bloques generalmente se asignan en grupos continuos llamados clumps. El Archivo de asignación (Allocation File) registra si un bloque de asignación particular está ocupado por el momento.

La información sobre el contenido de cada archivo se gestiona mediante las estructuras especiales: una para los datos reales (data fork o bifurcación de datos) y otra para la información adicional (resource fork o bifurcación de recursos). Un rango de bloques de asignación contiguos asignados a un fork se llama extent. Un solo extent está representado por el número de su bloque inicial y la longitud en bloques.

El Archivo de catálogo (Catalog File) describe la jerarquía de todos los archivos y carpetas, así como contiene sus propiedades esenciales, como los nombres. Allí también se almacenan los ocho primeros extents de cada fork. Los extents adicionales se pueden encontrar en el Archivo de desbordamiento de extents (Extents Overflow File). Otras propiedades de archivo están en el Archivo de atributos (Attributes File).

En adición, HFS+ soporta enlaces duros: múltiples referencias a una sola instancia del contenido de un archivo. Este tipo de referencia no es más que un archivo de enlace duro separado creado en el Archivo de catálogo (Catalog File) para cada entrada de directorio. Mientras tanto, el contenido original se mueve al directorio raíz oculto.

Todas las modificaciones al sistema de archivos se documentan en el Registro por diario (Journal). En HFS+, el Registro tiene un tamaño limitado: cada vez que se agrega y escribe nueva información, se escribe sobre los registros anteriores. De esta manera, HFS+ sobrescribe la información anterior para que el Registro por diario contenga información sobre las modificaciones más recientes.

En la siguiente imagen, se puede ver la relación entre los elementos clave de la estructura de HFS+: Encabezado de volumen, Registro por diario y Archivo de catálogo:

alt

Borrado

Procedimiento: HFS+ actualiza el Archivo de catálogo reorganizando el árbol B, lo que puede sobrescribir los registros en el nodo que corresponde al archivo eliminado. Los bloques respectivos en el Archivo de asignación se marcan como libres. El enlace duro (enlace físico) se elimina de la entrada de directorio respectiva. No obstante, los extents del fork de datos correspondiente permanecen en el volumen. Más aún, esta información se mantiene en el Registro por diario durante algún tiempo.

Recuperación: En el Registro por diario, es posible encontrar los registros que describen el estado anterior de los bloques actualizados e identificar los metadatos de los elementos eliminados recientemente. Las posibilidades de recuperar los ficheros eliminados dependen en gran medida de cuánto tiempo haya estado activo el sistema después de la eliminación de los mismos. Si los registros necesarios se han borrado del Registro por diario, el método de recuperación por datos RAW puede dar excelentes resultados de restauración de archivos no fragmentados. No obstante, los archivos fragmentados todavía plantearán un problema y conducirán a una recuperación incompleta.

Formateo

Procedimiento: El Archivo de catálogo se restablece a la jerarquía predeterminada, y por lo tanto, se pierden todos los registros sobre los archivos anteriores. Sin embargo, el Registro por diario y el propio contenido de datos permanecen intactos.

Recuperación: Un programa de recuperación de datos puede dirigirse al Registro por diario para recuperar todo lo que se puede recuperar de sus registros y luego emplear el método de recuperación por datos RAW para restaurar los archivos faltantes utilizando las plantillas predefinidas. Similarmente, las posibilidades de recuperación serán bajas en caso de fragmentación extensa.

APFS

APFS emplea una estrategia de organización de datos totalmente diferente. Un volumen de APFS siempre está en un Contenedor especial. Un solo Contenedor puede incorporar varios volúmenes (sistemas de archivos) que comparten el espacio de almacenamiento disponible. Todos los bloques ocupados y libres en el Contenedor se registran en el Mapa de bits común. Cada uno de los volúmenes, por su parte, tiene su propio Superbloque (Superblock) y gestiona sus propios elementos que contienen información, como la jerarquía de directorios, el contenido de los archivos y los metadatos.

La asignación de archivos y carpetas se presenta en forma de un árbol B. Tiene las mismas funciones que el Archivo de catálogo (Catalog File) en HFS+. Cada elemento del árbol se compone de varios registros, y cada registro se almacena como una clave y un valor.

El contenido de un archivo consta de al menos un extent. Un extent contiene información sobre dónde comienza el contenido y su longitud en bloques. En adición, hay un árbol B independiente para todos los extents del volumen.

A diferencia de HFS+, APFS nunca modifica ningún objeto en el lugar. En vez de hacerlo, crea copias y realiza cambios necesarios en una nueva ubicación en el almacenamiento según el método conocido como Copy-on-Write o CoW (copiar al escribir).

Borrado

Procedimiento: APFS borra los nodos correspondientes en el árbol B de asignación de archivos y carpetas.

Recuperación: Es posible encontrar versiones anteriores de los nodos que faltan y analizarlos para reconstruir sus instancias más recientes. Sin embargo, debido a que está diseñado para las unidades de estado sólido, APFS lanza el comando TRIM después de una operación de eliminación de datos. Y dado que TRIM borra el contenido de datos real, no se quedan posibilidades de recuperarlo después de que se haya completado dicho comando.

Los sistemas de archivos de Linux

Linux, a diferencia de Windows y macOS, es un proyecto de código abierto desarrollado por una comunidad de entusiastas. Es por eso que hay tantos sistemas de archivos para elegir en este SO: Ext2, Ext3, Ext4, ReiserFS, XFS, JFS, Btrfs y F2FS.

Ext2

Todos los parámetros del sistema de ficheros se pueden encontrar en el Superbloque (Superblock).

Ext2 divide el espacio de almacenamiento en unidades pequeñas llamadas bloques. Luego, los bloques se organizan en unidades más grandes llamadas Grupos de bloques (Block Groups). La información sobre todos los Grupos de bloques está disponible en la Tabla de descriptores (Descriptor Table) almacenada justo después del Superbloque. Cada Grupo de bloques también contiene el Mapa de bits de bloque (Block Bitmap) y el Mapa de bits de inodo (Inode Bitmap) para rastrear los estados de bloques e inodos respectivamente.

El inodo (descriptor de índice o inode) es un concepto central en Ext2. Se utiliza para describir todos los archivos y carpetas del sistema de ficheros, junto con sus tamaños y la ubicación de los bloques que contienen sus datos reales. Los inodos para cada Grupo de bloques se almacenan en su Tabla de inodos (Inode Table).

No obstante, el nombre de fichero no se considera metadato en este sistema de archivos. Los nombres se almacenan por separado en archivos de directorio especiales, junto con los números de inodos correspondientes.

En la imagen a continuación, se puede ver la relación entre los elementos clave de la estructura de Ext2: Superbloque, Grupos de bloques, Tablas de inodos, inodos:

alt

Borrado

Procedimiento: Ext2 etiqueta el inodo que describe el archivo como libre y actualiza los Mapas de bits de bloque y de inodo. El registro que asocia el nombre del archivo con el número de inodo particular se elimina del archivo de directorio.

Recuperación: Con la información que permanece en el inodo, las posibilidades de recuperar lo borrado son bastante altas. Pero, dado que el nombre de archivo no se almacena en el inodo y el enlace a él ya no existe, es probable que se pierda de forma permanente.

Formateo

Procedimiento: Ext2 limpia los Grupos de bloques existentes y elimina los inodos.

Recuperación: Se puede aplicar el método de recuperación por datos RAW para restaurar archivos por su contenido conocido. Las posibilidades de recuperación dependen en gran medida del grado de fragmentación de ficheros: es probable que los fragmentados se corrompan.

Ext3/Ext4

El principal beneficio de Ext3 sobre Ext2 es que cuenta con el registro por diario (journaling). El Registro por diario se implementa como un archivo especial que realiza un seguimiento de todas las modificaciones en el sistema de archivos.

Ext4 apareció como resultado de la expansión de Ext3 con nuevas estructuras de sistema de archivos. La más distintiva de estas estructuras se llama extent. En lugar de asignar el contenido a bloques individuales, Ext4 intenta colocar la mayor cantidad de datos posible en un área continua. Dicha área está descrita por la dirección de su bloque de inicio y la longitud en bloques. Este tipo de extents pueden almacenarse directamente en el inodo (descriptor de índice o inode). Sin embargo, cuando un archivo tiene más de cuatro extents, el resto de ellos se organizan como un árbol B+.

Ext4 también utiliza la asignación retrasada: recopila los datos a escribir en el almacenamiento antes de asignarles espacio real y, por lo tanto, mantiene la fragmentación al mínimo.

En la imagen a continuación, se muestra la relación entre los elementos clave de la estructura de Ext3/Ext4: Superbloque, Registro por diario, Grupos de bloques, Tablas de inodos, inodos:

alt

Borrado

Procedimiento: El sistema de archivos crea una entrada en el Registro por diario y luego borra el inodo asociado. El registro de directorio no se elimina por completo, sino que se cambia el orden de lectura del directorio.

Recuperación: La recuperación de archivos eliminados incluso con sus nombres iniciales es posible por medio de las entradas del Registro por diario. Aún así, la calidad del resultado depende de la cantidad de tiempo que el sistema de archivos permanece en funcionamiento después de la eliminación.

Formateo

Procedimiento: Se limpian todos los Grupos de bloques, así como los inodos del archivo e incluso el Registro por diario. A pesar de eso, el Registro por diario aún puede contener información sobre algunos de los archivos recientemente creados.

Recuperación: La recuperación sólo es posible con la ayuda del método de recuperación por datos RAW. Aún así, las posibilidades son muy bajas en caso de archivos fragmentados.

ReiserFS

Una partición de ReiserFS se divide en bloques de un tamaño fijo. La información más importante al respecto está disponible en el Superbloque (Superblock). Siguiendo el Superbloque, va el mapa de bits de bloques ocupados y libres.

El sistema de archivos se basa completamente en una estructura llamada árbol S+, compuesta de nodos internos y de hoja. Dicho árbol se utiliza para organizar todos los archivos, carpetas y metadatos. Hay cuatro tipos básicos de elementos en el árbol: elementos indirectos, elementos directos, elementos de directorio y elementos de estadísticas. Los elementos directos contienen datos reales, mientras que los indirectos sólo apuntan a ciertos bloques de datos. Los elementos de directorio representan entradas en un directorio y los elementos de estadísticas contienen detalles sobre archivos y carpetas. A cada elemento se le asigna una clave única que se puede usar para ubicarlo en el árbol. La clave contiene el identificador, la dirección y el tipo del elemento particular.

ReiserFS emplea un mecanismo especial llamado tail-packing (empaquetado de cola). Este mecanismo combina archivos y fragmentos de archivos que son menores que un bloque completo y los almacena directamente en los nodos de hoja del árbol S+. Tal enfoque reduce la cantidad de espacio desperdiciado y el grado de fragmentación.

El Registro por diario (Journal) documenta todas las modificaciones realizadas en el sistema de archivos. En lugar de realizar cambios directamente en el árbol S+, ReiserFS los escribe primero en el Registro por diario. En un momento posterior, se copian del Registro por diario a una ubicación real en el almacenamiento. Por lo tanto, ReiserFS puede almacenar muchas copias de metadatos.

En la imagen a continuación, se presenta la relación entre los elementos clave de la estructura de ReiserFS: Superbloque, Árbol S+ y elementos del árbol:

alt

Borrado

Procedimiento: ReiserFS actualiza el árbol S+ para excluir el archivo borrado y cambia el estado de los bloques respectivos en el mapa de bits.

Recuperación: Como se preserva la copia del árbol S+, es posible recuperar todos los archivos borrados, incluso con sus nombres. Más aún, se puede recuperar la versión anterior de un archivo desde una copia anterior del árbol S+.

Formateo

Procedimiento: ReiserFS crea un nuevo árbol S+ sobre el existente.

Recuperación: El árbol S+ anterior se puede recuperar a partir de una copia, lo que hace posible la recuperación de todos los datos. Sin embargo, las posibilidades disminuyen, si la partición estuvo llena. En esta situación, el sistema de archivos puede escribir información nueva sobre los datos anteriores.

XFS

XFS se compone de regiones de igual tamaño denominadas Grupos de asignación (Allocation Groups). Cada Grupo de asignación opera como un sistema de archivos individual que tiene su propio Superbloque (Superblock), mantiene sus propias estructuras y controla el uso del espacio.

El espacio libre se rastrea utilizando un par de árboles B+: el primero indica el bloque de inicio de la región de espacio libre contigua y el segundo, el número de bloques en ella. Se utiliza un enfoque similar basado en extents para rastrear los bloques asignados a cada archivo.

Todos los archivos y carpetas en XFS están representados por inodos (descriptores de índice o inodes) especiales que contienen sus metadatos. Si es posible, la asignación de extents se almacena directamente en el inodo. En caso de archivos muy grandes o fragmentados, los extents son rastreados por otro árbol B+ vinculado al inodo. Se utiliza un árbol B+ separado en cada Grupo de asignación para mantener un registro de estos inodos a medida que se asignan y liberan.

Al igual que muchos sistemas de archivos similares, XFS no almacena el nombre de archivo en el inodo. El nombre existe sólo en la entrada de directorio.

XFS implementa el Registro por diario (journaling) para las operaciones con los metadatos. El Registro por diario (Journal) almacena los cambios a aplicar hasta que se realicen las actualizaciones reales.

En la imagen a continuación, se muestra la relación entre los elementos clave de la estructura de XFS: Grupos de asignación, Superbloques, estructuras de árbol B+, inodos:

alt

Borrado

Procedimiento: El inodo responsable del archivo se excluye del árbol B+; la mayor parte de la información que contiene se sobrescribe, pero los datos del extent permanecen intactos. Se pierde la referencia entre la entrada de directorio y el nombre de archivo.

Recuperación: XFS mantiene copias de metadatos en el Registro, lo que permite recuperar con éxito lo perdido. Las posibilidades de devolver los archivos perdidos incluso con los nombres correctos son bastante altas.

Formateo

Procedimiento: Los árboles B+ que gestionan la asignación del espacio se limpian y un nuevo directorio raíz sobrescribe el existente.

Recuperación: Las posibilidades de recuperar los archivos que no se ubicaron al comienzo del almacenamiento son altas, en contraste con estos almacenados más cerca del comienzo.

JFS

La información esencial sobre JFS está incluida en el Superbloque (Superblock).

Un volumen de JFS puede constar de varias regiones denominadas Grupos de asignación (Allocation Groups). Cada Grupo de asignación tiene uno o más FileSets (conjuntos de ficheros).

Cada archivo y carpeta en el sistema de archivos se describe por su inodo (descriptor de índice o inode). Además de contener la información de identificación, el inodo también apunta a la ubicación donde se almacenan los contenidos del archivo. El contenido en sí está representado por uno o más extents. Un extent se compone de uno o varios bloques contiguos. Todos los extents se indexan mediante un árbol B+ especial.

El contenido de los directorios pequeños se almacena dentro de sus inodos, mientras que los más grandes se organizan como árboles B+.

El espacio libre en JFS también se rastrea con los árboles B+: un árbol se usa para almacenar los bloques de inicio de los extents libres y el segundo árbol registra el número de extents libres.

JFS tiene un área de registro dedicada y escribe en el Registro por diario cada vez que se produce un cambio de metadatos.

En la imagen a continuación, se muestra la relación entre los elementos clave de la estructura de JFS: Superbloque, Grupo de asignación, Conjunto de ficheros, Árboles B+, Registro por diario, inodos:

alt

Borrado

Procedimiento: JFS actualiza la información sobre el espacio libre en el árbol B+ respectivo y libera el inodo asociado con el archivo. El directorio se re-construye para reflejar los cambios.

Recuperación: El inodo aún permanece en el almacenamiento, lo que aumenta las posibilidades de recuperación de archivos hasta casi el 100%. Las posibilidades de recuperación son bajas sólo para los nombres de archivo.

Formateo

Procedimiento: JFS crea un nuevo árbol B+. Es pequeño desde el principio y se amplía a medida que se usa el sistema de archivos.

Recuperación: Las posibilidades de recuperar los archivos perdidos después del formateo son bastante altas en vista del pequeño tamaño del árbol B+ nuevo.

Btrfs

Como muchos otros sistemas de archivos, Btrfs comienza con el Superbloque (Superblock) con la información esencial sobre su diseño.

Otros elementos se representan como árboles B, cada uno con su propio propósito. La ubicación del árbol B raíz (Root B-tree) se puede encontrar en el Superbloque, y este árbol, a su vez, contiene referencias al resto de árboles B. Cualquier árbol B consta de nodos internos y hojas: un nodo interno se vincula con un nodo secundario o una hoja, mientras que una hoja contiene algún elemento con contenido real. La estructura y el contenido exactos de un elemento dependen del tipo de árbol B dado.

Una de las características destacadas de Btrfs es que puede distribuirse entre varios dispositivos, cuyos espacios de almacenamiento se combinan en un solo pool compartido. Después de eso, a cada bloque del almacenamiento físico se le asigna una dirección virtual. Estas direcciones, no las reales, son utilizadas por otras estructuras del sistema de ficheros. La información sobre la correspondencia entre las direcciones virtuales y físicas está disponible en el Árbol B de fragmentos (Chunk B-tree). Allí también está la información sobre los dispositivos que forman el pool. El Árbol B del dispositivo (Device B-tree), viceversa, asocia los bloques físicos en los dispositivos subyacentes con sus direcciones virtuales.

El Árbol B del sistema de archivos (File System B-tree) organiza toda la información sobre los archivos y carpetas. Los archivos muy pequeños se pueden almacenar directamente en el árbol, dentro de los elementos de extent. Los archivos más grandes se almacenan afuera, en las áreas contiguas llamadas extents. En este caso, un elemento de extent apunta a todos los extents a los que pertenecen los datos reales del archivo. Los elementos de directorio constituyen el contenido de las carpetas y también incluyen nombres de archivo y apuntan a sus elementos de inodo. Los elementos de inodo se utilizan para almacenar otras propiedades, como el tamaño, los permisos, etc.

El árbol B de extent (Extent B-tree) realiza un seguimiento de los extents asignados en los elementos de extent. Sirve como un mapa del espacio libre.

En los árboles B descritos, las modificaciones nunca se realizan en el acto. En su lugar, la información modificada se escribe en una ubicación diferente. Esta técnica se conoce como Copy-on-Write (copiar al escribir).

Mientras tanto, en las unidades de estado sólido, Btrfs puede detectar extents que están marcados como no utilizadas y limpiarlos automáticamente al ejecutar el comando TRIM.

Borrado

Procedimiento: Brtfs re-construye el Árbol B del sistema de archivos para excluir los nodos asociados con el archivo y libera los extents asignados a él en el Árbol B de extent. Todas las estructuras vinculadas se actualizan.

Recuperación: Los elementos necesarios ya no forman parte de la estructura del sistema de archivos. Pero, dado que Brtfs se basa en el principio de Copy-on-Write, es posible acceder a varias copias anteriores, incluida la versión anterior del Árbol B del sistema de archivos, analizarlas y recuperar con éxito el archivo eliminado, siempre que su contenido y metadatos no se hayan sobrescrito.

F2FS

F2FS está diseñado teniendo en cuenta las peculiaridades del almacenamiento de memoria flash. Divide todo el espacio en segmentos de un tamaño fijo. Una sección consta de segmentos consecutivos y un conjunto de secciones comprende una zona.

El Superbloque (Superblock) se encuentra al comienzo de una partición de F2FS. Contiene la información básica sobre el mismo y sobre la ubicación de otras áreas importantes. Hay una segunda copia del Superbloque que se crea con fines de respaldo. Los Bloques de punto de control (Checkpoint blocks) almacenan puntos de recuperación para el estado anterior y actual de los elementos cruciales del sistema de archivos.

La colocación de datos se realiza utilizando las estructuras de nodos especiales. Estos nodos pueden ser de tres tipos: directos, indirectos e inodos (descriptores de índice o inodes). Un nodo directo contiene direcciones de bloques de datos reales, uno indirecto, enlaces a bloques en otros nodos y un inodo, metadatos, incluido nombre de archivo, tamaño y otras propiedades. El mapeo de nodos a sus ubicaciones físicas en el sistema de archivos se almacena en la Tabla de direcciones de nodos (Node Address Table o NIT).

El contenido de archivos y carpetas se almacena en el Área principal (Main Area). En ella, las secciones separan los bloques que contienen datos de los bloques de nodos con información de indexación. El estado de uso de todos los tipos de bloques se indica en la Tabla de información de segmento (Segment Information Table o SIT): los que están en uso se etiquetan como válidos y los que contienen datos eliminados se consideran no válidos. El Área de resumen de segmento (Segment Summary Area o SSA) registra qué bloques pertenecen a qué nodo.

Las entradas de directorio en F2FS se denominan dentries. Una entrada dentry contiene el nombre del archivo y el número de su nodo.

F2FS realiza la limpieza cuando le faltan segmentos libres y en segundo plano cuando el sistema está inactivo. En este caso, los segmentos a borrar se seleccionan en función del número de bloques utilizados según la tabla SIT o por su "antigüedad".

Borrado

Procedimiento: Los cambios se realizan en las Tablas de direcciones de nodos y de información de segmento. Esta información se mantiene en la memoria hasta que se cree un nuevo punto de control y se escriba en el Bloque de checkpoint. El contenido de los bloques liberados se mantiene hasta que se limpie en el proceso de limpieza.

Recuperación: Utilizando el punto de control reciente, es posible acceder al estado anterior de los metadatos del sistema de archivos y encontrar el nodo y los bloques de datos asociados con el archivo, a menos que se hayan sobrescrito.

Los sistemas de archivos de BSD, Solaris, Unix

Estos sistemas operativos similares a Unix ofrecen dos formatos nativos: UFS que existe desde el principio, y el moderno sistema de archivos ZFS.

UFS

Un volumen de UFS consta de uno o más Grupos de cilindros (Cylinder Groups). Sus ubicaciones y otros detalles importantes relacionados con el sistema de archivos están disponibles en el Superbloque (Superblock). En cada Grupo de cilindros, también se almacena una copia de seguridad del Superbloque.

Cualquier archivo en UFS se compone de un inodo (descriptor de índice o inode) y bloques de datos con su contenido real. Un inodo contiene todas las propiedades del archivo, excepto su nombre que se guarda en un directorio. También apunta directamente a los primeros 12 bloques de datos del archivo. Si el archivo es más grande, la siguiente dirección apunta a los bloques indirectos que contienen las direcciones de bloques directos.

Todos los directorios están representados por grupos de entradas que almacenan una lista de nombres de archivos y el número de inodo de cada archivo. Aunque un archivo siempre está asociado con un solo inodo, en el caso de enlaces duros, el mismo archivo puede tener varios nombres. Cuando los nombres de archivo en diferentes directorios apuntan al mismo inodo, el número de referencias se indica en el inodo.

Cada Grupo de cilindros tiene sus propios mapas de bits de bloques e inodos libres. Además, hay una cierta cantidad de inodos, cada uno de los cuales contiene atributos de archivo. El resto del Grupo de cilindros está ocupado por bloques de datos.

Borrado

Procedimiento: UFS limpia el inodo que pertenece al archivo y actualiza los mapas de bits de bloques e inodos libres. La entrada correspondiente se elimina del directorio.

Recuperación: Sin el inodo respectivo, no hay información sobre el tamaño del archivo y los primeros 12 bloques de datos. El enlace a su nombre también se pierde permanentemente. Los datos todavía se pueden restaurar utilizando el método de recuperación por datos RAW. Aún así, las posibilidades de recuperar archivos fragmentados son bastante bajas.

ZFS

A diferencia de la mayoría de los sistemas de archivos, ZFS puede abarcar una serie de unidades físicas combinadas en un grupo de almacenamiento (pool) común. Un pool incluye uno o más dispositivos virtuales llamados vdevs. Un vdev tiene una etiqueta que lo describe, con cuatro copias almacenadas por motivos de seguridad. Hay un Uberbloque (Uberblock) dentro de cada etiqueta vdev. Al igual que el Superbloque (Superblock) utilizado por otros sistemas de ficheros, este contiene información vital necesaria para acceder a todo el contenido.

ZFS asigna el espacio de almacenamiento en unidades de tamaño variable denominadas bloques. Todos los bloques en ZFS están organizados como objetos de diferentes tipos. Los objetos se caracterizan por las estructuras especiales llamadas dnodes. Un dnode describe el tipo de objeto y su tamaño, junto con la colección de bloques que contienen sus datos. Puede contener hasta tres punteros de bloque. Un puntero de bloque es una estructura básica utilizada por ZFS para el direccionamiento de bloques, puede apuntar a un bloque de hoja que contiene información real o a un bloque indirecto que apunta a otro bloque.

Los objetos relacionados se agrupan en conjuntos de objetos. Cada objeto en él está identificado de forma única por un número de objeto. Un ejemplo de un conjunto de objetos es un sistema de archivos que contiene objetos de archivo y de directorio. La colección de dnodes que describen los objetos en el conjunto de objetos dado también se almacena como un objeto al que apunta el metadnode respectivo. Los metadatos que se refieren a todo el grupo están colocados en un conjunto de objetos llamado Conjunto meta de objetos (Meta Object Set o MOS).

Cuando ZFS escribe datos, los bloques nunca se sobrescriben en su lugar. Al principio, se asigna un nuevo bloque a un lugar diferente. Una vez que se completa la operación, los metadatos del sistema de archivos se actualizan para apuntar al bloque recién escrito, mientras que su versión anterior también se conserva.

Borrado

Procedimiento: ZFS desvincula los bloques de datos del objeto de archivo y del dnode respectivos. El número de objeto pasa a estar disponible para el reuso. El archivo se elimina de la lista en el objeto de directorio. El Uberbloque se reemplaza por uno nuevo.

Recuperación: Como ZFS emplea la técnica de Copy-on-Write (copiar al escribir), las copias anteriores pueden permanecer en el pool de almacenamiento, lo que permite recuperar con éxito archivos eliminados. Sin embargo, los datos están dispersos en bloques de diferentes tamaños en varias unidades, y por lo tanto, el procedimiento se puede realizar siempre que los metadatos del grupo estén intactos, lo cual es esencial para volver a ensamblar correctamente su configuración.