Unix y Linux: cómo guarda datos el sistema de archivo de Android

viernes, 13 de mayo de 2016 por Milagros Gamero

Para empezar, ¿qué es UNIX exactamente?

UNIX es un sistema operativo multiusuario, multitarea, desarrollado en los años 60 por AT&T Bell labs. Casi todo UNIX está escrito en el idioma de programación C y por tanto puede funcionar en un amplio rango de arquitecturas de ordenadores. Los proveedores de hardware como SCO, SGI, IBM, Hewlett Pachard y Sun tienen cada uno su propia versión de UNIX funcionando en sus servidores de gama alta.

Linux explicado

Linux, a veces llamado GNU/Linux, es un sistema operativo gratuito y open source parecido a Unix. El proyecto GNU comenzó en 1984 con la meta de crear una versión libre de UNIX. Sin embargo, el proyecto no tuvo un núcleo totalmente operativo hasta 1991, cuando un núcleo de un tercero llamado Linux fue lanzado por Linux Torvalds. El núcleo Linux normalmente se lanza en combinación con varios paquetes del proyecto GNU y de otras fuentes.

Conociendo sus sistemas operativos

Fast File System, EXT 2, 3 y 4

El sistema de archivos EXT 2 file system (a veces conocido como el segundo sistema de archivo extendido) fue originalmente diseñado para la plataforma Linux y lanzado en 1993. Desde entonces ha sido reemplazado por EXT3, que añadía algunas características, siendo el journaling la más notable. EXT 4 es actualmente el sistema de archivo por defecto para la mayoría de distribuciones populares de Linux.

Como muchos otros sistemas de archivo de UNIX, la estructura principal es muy similar a la del Fast File System (FFS) original de UNIX. La partición está dividida en Grupos de Cilindros y cada uno de estos grupos contiene originalmente un Superbloque, Tabla de Grupo, Bitmap de Datos, Bitmap de Inodos, Inodos y por último Datos. Sin embargo, algunas versiones de EXT 2 y EXT 3 tienen Grupos de Cilindros Dispersos que sólo contienen Inodos y Datos.

Los sistemas de archivo EXT 2, 3 y 4 tienen un número fijo de inodos que son mapeados en la partición por los Superbloques y tablas de grupo. Estos inodos se usan para representar tanto archivos como directorios y contienen:

  • Tipo de archivo
  • Derechos de acceso
  • Propietarios
  • Timestamps
  • Tamaño
  • Indicadores de bloques de datos

Cuando se borra un Grupo de Cilindros, normalmente puede ser reemplazado por otro, protegiendo los datos.

Como puedes ver en la imagen de arriba, en in EXT 3 los indicadores de bloques de datos son la parte del inodo que se dirige a la información del archivo en el disco.

Los primeros doce puntos de los bloques físicos contienen los datos, mientras que los tres últimos se dirigen a los bloques de datos de forma indirecta (indicadores indirectos individual, doble y triple). El individual indirecto contiene la dirección de un bloque que contiene indicadores directos como muestra el diagrama, el doble indirecto apunta a un bloque que contiene indicadores individuales indirectos y lógicamente el indirecto triple apunta a bloques que contienen indicadores dobles indirectos. Esto puede ser difícil de visualizar, pero básicamente cada paso de indirección permite que la cantidad de datos a tratar aumente exponencialmente. Vale la pena apuntar que la recuperación desde EXT 3 es muy difícil y los resultados tienden a no ser tan buenos como los que se logran en otros sistemas de archivo.

En EXT 4 la estructura de datos sigue siendo muy similar a la de EXT 3. La principal diferencia es que los Extents han reemplazado a los indicadores de datos directos e indirectos, mejorando de forma significativa el rendimiento de los archivos grandes. Cuando se borran datos en EXT 4, la recuperación tiende a ser más exitosa, pues los propios Extents no se borran, haciendo posible reconstruir el archivo perdido.

XFS

XFS fue desarrollado originalmente por SGI en 1993 para superar algunas de las limitaciones de rendimiento y escala de FFS. Fue lanzado en 1994 con IRIX v5-3 y en el 2000 SGI lanzó el código como open source, entonces fue oficialmente incluido en el nucleo Linux de 2003. A primera vista la estructura XFS es muy similar a la de FFS. Mantiene el sistema de grupos de cilindros de dividir la partición pero los llama grupos de distribución y también tiene superbloques y usa Inodos para contener los metadatos de los archivos, sin embargo aquí acaban las similitudes.

A diferencia de FFS el sistema de archivo no tiene un número fijo de inodos preasignados en el disco, en su lugar es labor de cada grupo de asignación monitorear el espacio libre y asignar inodos dinámicamente como lo requiera el sistema de archivos. Estos inodos están organizados en un árbol equilibrado B+, que hace que cruzar la estructura del directorio sea más rápido que el sistema de disco tradicional implementado en FFS. Sin embargo, para mantener un alto rendimiento el árbol B+ debe mantenerse equilibrado a medida que se asignan más inodos, lo que requiere de un algoritmo relativamente avanzado. Los inodos XFS también usan extents (listas de documentos) para tratar los datos en lugar de tratar los bloques individuales de datos  como FFS, pues esto normalmente funciona mejor con archivos grandes.

XFS también incluye journaling para ofrecer recuperabilidad de sistemas de datos en caso de fallos del sistema y cortes de luz. Sin embargo, XFS sólo registra los metadatos del sistema de archivos de manera que mientras el volumen puede ser reparado y montado aún puede haber pérdida de datos del usuario.

Otra característica de XFS es la asignación remota, un método de asignar los bloques a datos de archivo mientras se almacenan en la memoria caché. Estos datos son después escritos en el sistema de archivos cuando la memoria caché es borrada por el sistema operativo. Las principales ventajas de este enfoque son que a menudo puede reducir dramáticamente la fragmentación, especialmente con archivos que se expanden lentamente, y a menudo reduce la carga de la CPU.

JFS (Journaled File System)

En 1990, IBM lanzó JFS con la versión 3.1 de AIX. Después, en 1999, IBM lo transfirió a OS/2 y lanzó una versión de JFS a la comunidad open source, y en 2006 ya había una versión estable para Linux.

La filosofía de diseño detrás de JFS es comparable a la de XFS y ambas superan muchas de las limitaciones de rendimiento de FFS de forma similar, aún cuando sus implementaciones finales son distintas. Ambos usan journaling de metadatos para ofrecer recuperabilidad del sistema de archivo, inodos asignados dinámicamente, extents para tratar el área de datos y también árboles B+ para cruzar directorios.

ReiserFS y LVM (Logical Volume Management)

Logical Volume Management es un método para superar algunas de las limitaciones de usar métodos de partición tradicionales para asignar espacio de almacenamiento. Las características normalmente incluidas son:

  • Abarcamiento de sistemas de archivos y RAIDs de software (Niveles 0, 1 y 5)
  • Modificar el volumen de los grupos y los volúmenes lógicos
  • Fotografías

Normalmente el espacio de los discos duros se divide en particiones sobre las que se escriben directamente los sistemas de archivo. Sin embargo LVM funciona de forma algo distinta: los discos siguen siendo asignados usando particiones, pero el LVM las ve como volúmenes físicos, que después son combinados como un RAID o cruzándolos para formar un Grupo de Volúmenes. El Grupo de Volúmenes podrá entonces ser asignado para formar Volúmenes Lógicos en los que residirán los sistemas de archivo. La imagen de abajo muestra un ejemplo relativamente simple de cómo puede llegar a usarse un LVM.

Las versiones modernas de UNIX tienen sus propias variaciones de LVM y dependiendo del proveedor tienen distintos nombres y características.

Linux también tiene un LVM que originalmente se basó en la versión de UNIX de Hewlett Packard. Una característica importante que falta tanto en el LVM de HP como en el de Linux es que no tienen implementación para tolerancia de fallos de paridad, y por lo tanto no tienen asistencia de software para RAID 5.

Windows 2000, 2003, XP y Vista tienen un sistema equivalente llamado Logical Disk Manager, que da una funcionalidad similar.

Los pros y los contras

Aunque UNIX y Linux no son tan populares como otros sistemas operativos, ofrecen algunas ventajas para ciertas necesidades específicas.

Linux puede que no sea tan intuitivo como otros sistemas (hablamos de vosotros, Windows y MAC), pero las personas que tienen un cierto conocimiento de programación pueden aprovechar este sistema open source para adaptarlo a necesidades muy específicas. El sistema es muy rápido y es más eficiente en programas basados en la producción.

Por otro lado, UNIX se ve más a menudo cuando se requiere un procesamiento de alto rendimiento. Algunos ejemplos de esto son las máquinas nucleares, centrales eléctricas, sistemas militares, etc. No es el sistema más intuitivo del mundo pero es muy eficiente cuando se requiere una alta capacidad de procesamiento.

¿La recuperación es la misma en estos sistemas?

Si trabajas con Linux o con UNIX es importante recordar que estos sistemas presentan sus propios desafíos si llegases a perder datos.

Afortunadamente, en caso de un fallo físico, las posibilidades de una recuperación exitosa son tan altas como con cualquier otro sistema operativo. Sin embargo, una vez que sufras fallos lógicos, hay algunas diferencias que vale la pena tener en cuenta.

Si formateas tus archivos erróneamente, la recuperación será más difícil. Puede que los datos en crudo aún estén ahí, pero todas las estructuras e inodos habrán desaparecido.

En el caso de un borrado accidental, sigue siendo posible recuperar los datos. En el caso de EXT 4, por ejemplo, los Extents no se borran, de manera que es posible reconstruir el archivo.

Así que recuerda – ten cuidado antes de ejecutar un comando Remove. Asegúrate de que estás quitando sólo lo que quieres quitar y sé muy cuidadoso cuando decidas formatear los datos.

El blog de la recuperación de datos

Si ha sufrido una pérdida de datos, contáctenos inmediatamente.