Sistemas de Archivos … ¿Y eso que és?

Saludos a nuestros lectores. Los usuarios de sistemas Microsoft Windows (sobre todo en las versiones workstation) generalmente no se rompen mucho la cabeza con eso de “Sistemas de Archivos” o “File System” y tienen razón en evitar sumar conocimiento innecesario a su cerebro ya que, casi siempre, se enfrentan a dispositivos de almacenamiento formateados con estructuras NTFS o FAT 16/32. Sin embargo cuando llegas a GNU/Linux y te enfrentas a tu primera instalación, dependiendo de la distro en que te inaugures en este mundo, ves frente a ti un universo de posibilidades para configurar las particiones de tus dispositivos de almacenamiento, comenzando por las particiones que alojarán al sistema operativo en sí. Sobre Sistemas de Archivos estaremos hablando hoy en GUTL, veamos que diantres es eso de File System.

Escribir artículos extremadamente largos en un sitio Web es totalmente contraproducente, pero por hoy haremos la excepción

A mi no me crean pero dicen por ahí que un sistema de archivos (o «filesystem») es un medio para organizar los datos que se espera se mantengan después que un programa haya terminado, al proporcionar procedimientos para almacenar, recuperar y actualizar dichos datos, así como gestionar el espacio disponible en el dispositivo(s) que lo contiene. Un sistema de archivos organiza los datos de una manera eficiente y está sintonizado con las características específicas del dispositivo. En resumen, los sistemas de archivos estructuran la información guardada en una unidad de almacenamiento (normalmente un disco duro de una computadora), que luego será representada ya sea textual o gráficamente utilizando un gestor de archivos. La mayoría de los sistemas operativos manejan su propio sistema de archivos.

Cada partición individual se puede configurar mediante uno de los muchos sistemas de archivos disponibles. Cada uno tiene sus propias ventajas, desventajas e idiosincrasias únicas.

Lo habitual es utilizar dispositivos de almacenamiento de datos que permiten el acceso a los datos como una cadena de bloques de un mismo tamaño, a veces llamados sectores, usualmente de 512 bytes de longitud (También denominados clústers). El software del sistema de archivos es responsable de la organización de estos sectores en archivos y directorios y mantiene un registro de qué sectores pertenecen a qué archivos y cuáles no han sido utilizados. En la práctica, un sistema de archivos también puede ser utilizado para acceder a datos generados dinámicamente, como los recibidos a través de una conexión de red (sin la intervención de un dispositivo de almacenamiento).

A continuación les dejo una breve descripción de algunos sistemas de archivos que podemos encontrar con cierta frecuencia. Quedan fuera algunos sistemas de archivos, no obstante, con los comentarios de los lectores podemos complementar más este “MegaPost“:

Btrfs

También conocido como «Better FS» o B-tree FS, es un sistema de archivos con potentes funciones, similares al excelente ZFS de Sun/Oracle. Estas incluyen la creación de instantáneas, striping y mirroring multi-disco (RAID software sin mdadm), sumas de comprobación, copias de seguridad incrementales, y compresión sobre la marcha integrada, que pueden dar un significativo aumento de las prestaciones, así como ahorrar espacio. Btrfs parece ser el futuro de los sistemas de archivos de GNU/Linux y se ofrece como una opción para el sistema de archivos de root en todos las instalaciones de las distribuciones más importantes. Podríamos resumir sus potencialidades haciendo énfasis en las siguientes características:

  • Empaquetado eficiente en espacio de archivos pequeños y directorios indexados
  • Asignación dinámica de inodos (no se fija un número máximo de archivos al crear el sistema de archivos)
  • Snapshots escribibles y snapshots de snapshots
  • Subvolúmenes (raíces del sistema de archivos internas separadas)
  • Mirroring y Stripping a nivel de objeto
  • Comprobación de datos y metadatos (alta seguridad de integridad)
  • Compresión
  • Copy-on-write del registro de todos los datos y metadatos
  • Gran integración con device-mapper para soportar múltiples dispositivos, con varios algoritmos de RAID incluidos
  • Comprobación del sistema de archivos sin desmontar y comprobación muy rápida del sistema de archivos desmontado
  • Copias de seguridad incrementales eficaces y mirroring del sistema de archivos
  • Actualización desde ext3 a Btrfs, y reconversión a ext3 al momento de la actualización
  • Modo optimizado para SSD (activado a través de una opción de montaje)
  • Defragmentación sin desmontar

exFAT

El Extended File Allocation Table es un Sistema de archivos de Microsoft optimizado para unidades flash. A diferencia de NTFS, exFAT no puede preasignar espacio en disco para un archivo con solo marcar el espacio arbitrariamente en el disco como «asignado». Al igual que en FAT, cuando se crea un archivo de longitud conocida, exFAT debe llevar a cabo una completa escritura física del mismo tamaño del archivo. exFAT se utiliza cuando el sistema de archivos NTFS no es factible debido a la sobrecarga de las estructuras de datos. En distribuciones GNU/Linux se puede disponer de soporte a través del subsistema FUSE. Dicho soporte ya se encuentra empaquetado oficialmente en algunas distribuciones como Debian.

Dentro de sus características distintivas se encuentran:

  • Límite teórico para el tamaño de fichero de 264 bytes (16 Exbibytes), límite aumentado desde 232 bytes (4 Gibibytes).
  • Tamaño de cluster de hasta 2255 bytes, límite implementado de 32MB.
  • Mejoras en el rendimiento de la asignación de espacio libre gracias a la introducción de un free space bitmap.
  • Soporte de 2.796.202 ficheros por directorio.
  • Soporte de 2.796.202 directorios por partición. Lo que permite almecenar hasta 7,8 billones de archivos.
  • Soporte para listas de control de acceso.
  • Soporte para Transaction-Safe FAT File System (TFAT) (función activada opcionalmente en WinCE).
  • En Windows 7, la función ReadyBoost mejora su capacidad, al eliminarse el límite de archivos de 4Gb del sistema FAT.
  • Multiplataforma, tanto Mac OS X (desde la versión 10.7) como Microsoft Windows (desde la versión 7) soportan lectura y escritura de forma nativa. Windows XP mediante el Service Pack 2 y Windows Vista con el Service Pack 1, también pueden manejar este formato.

ext2

Second Extended Filesystem es un consolidado y maduro sistema de archivos para GNU/Linux muy estable. Uno de sus inconvenientes es que no tiene apoyo para el registro (journaling) o las barreras. La falta de registro por diario («journaling») puede traducirse en la pérdida de datos en caso de un corte de corriente o fallo del sistema. También puede no ser conveniente para las particiones root (/) y /home, porque las comprobaciones del sistema de archivos pueden tomar mucho tiempo. Un sistema de archivos ext2 puede ser convertido a ext3. ext2 fue el sistema de ficheros por defecto de las distribuciones de Linux Red Hat Linux, Fedora Core y Debian. Los lanzamientos de las nuevas versiones estables, ext3 y ext4, han desplazado considerablemente su uso.

El sistema de ficheros tiene una tabla donde se almacenan los i-nodos. Un i-nodo almacena información del archivo (ruta o path, tamaño, ubicación física). En cuanto a la ubicación, es una referencia a un sector del disco donde están todas y cada una de las referencias a los bloques del archivo fragmentado. Estos bloques son de tamaño especificable cuando se crea el sistema de archivos, desde los 512 bytes hasta los 4 KiB, lo cual asegura un buen aprovechamiento del espacio libre con archivos pequeños. Los límites son un máximo de 2 terabytes de archivo, y de 4 para la partición.

ext3

Third Extended Filesystem es, esencialmente, el sistema de archivos ext2 pero con las ventajas del journaling (registro por diario) y la escritura de barreras. Es compatible con ext2, bien probado, y extremadamente estable. Fue el sistema de archivo más usado en distribuciones Linux, aunque desde hace algunos años se ha ido remplazando por su sucesor, ext4.

Aunque su velocidad y escalabilidad es menor que sus competidores, como JFS, ReiserFS o XFS, tiene la ventaja de permitir actualizar de ext2 a ext3 sin perder los datos almacenados ni tener que formatear el disco. Tiene un menor consumo de CPU y está considerado más seguro que otros sistemas de ficheros en Linux dada su relativa sencillez y su mayor tiempo de prueba.

Como ext3 está hecho para ser compatible con ext2, la mayoría de las estructuras del archivación son similares a las del ext2. Por ello, ext3 carece de muchas características de los diseños más recientes como las extensiones, la localización dinámica de los inodos, y la sublocalización de los bloques. Hay un límite de 31998 subdirectorios por cada directorio, que se derivan de su límite de 32000 links por inodo. Ext3, como la mayoría de los sistemas de archivos actuales de Linux, no puede ser chequeado por el fsck mientras el sistema de archivos está montado para la escritura. Si se intenta chequear un sistema de ficheros que está montado puede detectar falsos errores donde los datos no han sido volcados al disco todavía, y corromper el sistema de archivos al intentar arreglar esos errores.

ext4

Fourth Extended Filesystem es un sistema de archivos que evoluciona a partir de sus predecesores ext2 y ext3 con quienes mantiene compatibilidad. Proporciona apoyo para volúmenes con tamaños de hasta 1 exabyte (es decir, 1.048.576 terabytes) y archivos con tamaños de hasta 16 terabytes. Aumenta el límite de los 32.000 subdirectorios de ext3 a 64.000. También ofrece la capacidad de desfragmentación en línea.

En ext4, los grupos de bloques no asignados y secciones de la tabla de inodos están marcados como tales. Esto permite a e2fsck saltárselos completamente en los chequeos y en gran medida reduce el tiempo requerido para chequear un sistema de archivos del tamaño para el que ext4 está preparado. Esta función está implementada desde la versión 2.6.24 del kernel Linux.

En ext4 han sido introducidos los extents para reemplazar al tradicional esquema de bloques usado por los sistemas de archivos ext2/3. Un extent es un conjunto de bloques físicos contiguos, mejorando el rendimiento al trabajar con ficheros de gran tamaño y reduciendo la fragmentación. Un extent simple en ext4 es capaz de mapear hasta 128 MiB de espacio contiguo con un tamaño de bloque igual a 4 KiB.

El sistema de archivos ext4 permite la reserva de espacio en disco para un fichero. Hasta ahora la metodología consistía en rellenar el fichero en el disco con ceros en el momento de su creación. Esta técnica no es ya necesaria con ext4, ya que una nueva llamada del sistema “preallocate()” ha sido añadida al kernel Linux para uso de los sistemas de archivos que permitan esta función. El espacio reservado para estos ficheros quedará garantizado y con mucha probabilidad será contiguo. Esta función tiene útiles aplicaciones en streaming y bases de datos.

FAT 12/16/32

El sistema de archivos Tabla de asignación de archivos, comúnmente conocido como FAT (del inglés file allocation table), es un sistema de archivos desarrollado para MS-DOS, así como el sistema de archivos principal de las ediciones no empresariales de Microsoft Windows hasta Windows Me. Las implementaciones más extendidas de FAT tienen algunas desventajas. Cuando se borran y se escriben nuevos archivos tiende a dejar fragmentos dispersos de éstos por todo el soporte. Con el tiempo, esto hace que el proceso de lectura o escritura sea cada vez más lento. La denominada desfragmentación es la solución a esto, pero es un proceso largo que debe repetirse regularmente para mantener el sistema de archivos en perfectas condiciones. FAT tampoco fue diseñado para ser redundante ante fallos. Inicialmente solamente soportaba nombres cortos de archivo: ocho caracteres para el nombre más tres para la extensión. También carece de permisos de seguridad: cualquier usuario puede acceder a cualquier archivo.

La versión inicial de FAT se conoce ahora como FAT12. Es un sistema de archivos para disquete. En 1987 apareció lo que hoy se conoce como el formato FAT16. Se eliminó el contador de sectores de 16 bits. El tamaño de la partición ahora estaba limitado por la cuenta de sectores por clúster, que era de 8 bits. Esto obligaba a usar clusters de 32 KiB con los usuales 512 bytes por sector. Así que el límite definitivo de FAT16 se situó en los 90 GiB. FAT32 fue la respuesta para superar el límite de tamaño de FAT16 al mismo tiempo que se mantenía la compatibilidad con MS-DOS en modo real. Microsoft decidió implementar una nueva generación de FAT utilizando direcciones de cluster de 32 KiB (aunque sólo 28 de esos KiB se utilizaban realmente).

GNU/Linux, FreeBSD y otros sistemas operativos abiertos soportan FAT. El sistema operativo Mac OS X también soporta sistemas de archivos FAT, siempre que no se trate del volumen de arranque del sistema.

F2FS

Flash-Friendly File System es un sistema de archivos flash creado por Kim Jaegeuk de Samsung para el kernel Linux. La motivación para F2FS era construir un sistema de archivos que desde el principio tuviese en cuenta las características de los dispositivos de almacenamiento basados en memoria flash NAND (como los discos de estado sólido, eMMC, y tarjetas SD), que han sido ampliamente utilizados en el en sistemas informáticos que van desde dispositivos móviles a servidores.

Samsung eligió un enfoque log-structured file system que se adaptara a las nuevas formas de almacenamiento. F2FS también soluciona algunos de los problemas conocidos de los log-structured file system antiguos, como el efecto bola de nieve (snowball effect), los árboles errantes y la alta sobrecarga de la limpieza.

JFS

El Journaled File System de IBM ha sido empleado durante muchos años en el sistema operativo IBM AIX® antes de ser portado a GNU/Linux. JFS demanda menos recursos de la CPU que cualquier otro disponible para los sistemas GNU/Linux. Es muy rápido en el formato, montaje y comprobación del sistema de archivos (fsck). JFS ofrece óptimas prestaciones en general, especialmente en conjunción con el planificador de I/O. No es tan ampliamente soportado como los sistemas de archivos ext o ReiserFS, pero, sin embargo, es muy maduro y estable.

JFS, al igual que ReiserFS, sigue el principio de metadata only. En vez de una completa comprobación sólo se tienen en cuenta las modificaciones en los metadatos provocadas por las actividades del sistema. Esto ahorra una gran cantidad de tiempo en la fase de recuperación del sistema tras una caída. Las actividades simultáneas que requieren más entradas de protocolo se pueden unir en un grupo, en el que la pérdida de rendimiento del sistema de ficheros se reduce en gran medida mediante múltiples procesos de escritura.

JFS abarca diversas estructuras de directorios. En pequeños directorios se permite el almacenamiento directo del contenido del directorio en Inode. En directorios más grandes se utiliza B-trees, que facilitan considerablemente la administración del directorio.

NTFS

Sistema de archivos utilizado por Windows. NTFS contiene algunas mejoras técnicas respecto a FAT y HPFS (High Performance File System), como el soporte mejorado para los metadatos y el uso de estructuras de datos avanzadas para mejorar el rendimiento, la confiabilidad y la utilización del espacio en disco, además de extensiones adicionales, como las listas de control de acceso de seguridad (ACL) y journaling del sistema de archivos.

NTFS permite definir el tamaño del clúster a partir de 512 bytes (tamaño mínimo de un sector) de forma independiente al tamaño de la partición. Es un sistema adecuado para las particiones de gran tamaño requeridas en estaciones de trabajo de alto rendimiento y servidores. Puede manejar volúmenes de, teóricamente, hasta 264–1 clústeres. En la práctica, el máximo volumen NTFS soportado es de 232–1 clústeres (aproximadamente 16 TiB usando clústeres de 4 KiB).

El tamaño mínimo recomendado para la partición es de 10 GB. Aunque son posibles tamaños mayores, el máximo recomendado en la práctica para cada volumen es de 2 TB (Terabytes). El tamaño máximo de fichero viene limitado por el tamaño del volumen. Tiene soporte para archivos dispersos.

Este sistema de archivos posee un funcionamiento prácticamente secreto, ya que Microsoft no ha liberado su código, como hizo con FAT. Gracias a la ingeniería inversa, aplicada sobre el sistema de archivos, se desarrollaron controladores como el NTFS-3G que actualmente proveen a sistemas operativos GNU/Linux, Solaris, MacOS X o BSD, entre otros, de soporte completo de lectura y escritura en particiones NTFS.

MacOS X provee soporte de sólo lectura a particiones formateadas como NTFS. Los desarrolladores de NTFS-3G también proveen una versión comercial y de alto rendimiento denominada Tuxera NTFS para Mac.

ReiserFS

Sistema de archivos con journaling y altas prestaciones de Hans Reiser (V3) que utiliza un método muy interesante de transferencia de datos basado en un algoritmo creativo e innovador. ReiserFS es anunciado como muy rápido, especialmente cuando se trata de muchos archivos pequeños. ReiserFS es rápido en dar formato, sin embargo, comparativamente lento en el montaje. Muy maduro y estable. ReiserFS (V3) no está siendo activamente desarrollado en este momento. Generalmente considerado como una buena opción para /var.

ReiserFS ofrece funcionalidades que pocas veces se han visto en otros sistemas de archivos:

  • Journaling. Esta es la mejora a la que se ha dado más publicidad, ya que previene el riesgo de corrupción del sistema de archivos.
  • Reparticionamiento con el sistema de ficheros montado y desmontado. Podemos aumentar el tamaño del sistema de ficheros mientras lo tenemos montado y desmontado (online y offline). Para disminuirlo, únicamente se permite estando offline (desmontado). Namesys proporciona las herramientas para estas operaciones, e incluso, podemos usarlas bajo un gestor de volúmenes lógicos como LVM o EVMS.
  • Tail packing, un esquema para reducir la fragmentación interna.

Reiser4

Sucesor del sistema de archivos ReiserFS, desarrollado desde cero por Namesys y patrocinado por DARPA y Linspire, utiliza B*-trees junto con el enfoque del equilibrado del árbol de directorios, en el que los nodos poco poblados no se fusionarán hasta que no se efectúe un nivelado del disco, o cuando la memoria esté baja o se completa una operación. Este sistema también permite a Reiser4 crear archivos y directorios sin tener que perder el tiempo y el espacio a través de bloques fijos.

Actualmente no se distribuye de forma conjunta con el kernel de Linux y por tanto no es soportado por muchas distribuciones. Reiser4 se encuentra disponible en la rama -mm del kernel de Linux, mantenida por Andrew Morton. Dentro de las características distintivas de REISER4 están:

  • Journaling más eficiente gracias a la técnica de “wandering log”.
  • Soporte más eficiente de archivos pequeños, en términos de espacio en disco y velocidad gracias a “tail packing”.
  • Administración más rápida de directorios con un número elevado de ficheros.
  • Infraestructura de plugins más flexible (a través de tipos especiales de metadatos: cifrado, compresión).
  • Soporte transaccional.
  • Optimización dinámica de la estructura del disco a través del método “allocate-on-flush”, llamado “delayed allocation” en el sistema de ficheros XFS.
  • Transacciones atómicas.
  • Integración de metadatos en el espacio de nombres del sistema de archivos.

Algunas de las características más avanzadas de Reiser4 (como transacciones definidas por el usuario) no se encuentran disponibles debido a la falta de una API en la capa VFS del kernel para ellas.

Actualmente, Reiser4 carece de algunas utilidades estándar, como un repacker (similar a un desfragmentador proporcionado con otros sistemas de ficheros). Sus creadores dicen que se implementará más tarde; o más temprano si alguien les paga.

XFS

Primero sistema de archivos con journaling desarrollado originalmente por Silicon Graphics para el sistema operativo IRIX y portado después a GNU/Linux. Proporciona un rendimiento muy rápido en los archivos y sistemas de archivos grandes y es muy rápido en el formato y montaje. Pruebas de benchmark comparativa han demostrado que es más lento cuando trata con muchos archivos pequeños. XFS es muy maduro y ofrece capacidad de desfragmentación en línea.

XFS soporta un sistema de archivos de hasta 8 exabytes, aunque esto puede variar dependiendo de los límites impuestos por el sistema operativo. En sistemas GNU/Linux de 32 bits, el límite es 16 terabytes. Los sistemas de archivos XFS están particionados internamente en grupos de asignación, que son regiones lineares de igual tamaño dentro del sistema de archivos. Los archivos y los directorios pueden crear grupos de asignación. Cada grupo gestiona sus inodos y su espacio libre de forma independiente, proporcionando escalabilidad y paralelismo — múltiples hilos pueden realizar operaciones de E/S simultáneamente en el mismo sistema de archivos.

XFS provee soporte para llevar un registro (journaling), donde los cambios al sistema de archivos primero son escritos a un diario o journal antes de que se actualicen los datos del disco. El journal es un buffer circular de bloques del disco que no son parte del sistema de archivos. En XFS el registro (journal) contiene entradas ‘lógicas’ que describen a un alto nivel las operaciones que se están realizando, al contrario de otros sistemas de archivo con un registro (journal) ‘físico’, que guardan una copia de los bloques modificados durante cada transacción. Las actualizaciones del registro (journal) se realizan asincrónicamente para evitar una baja en el rendimiento. En el caso de una caída repentina del sistema, las operaciones inmediatamente anteriores a la caída pueden ser terminadas, garantizando así la consistencia del sistema. La recuperación se realiza automáticamente a la hora del montaje del sistema de archivos y la velocidad de recuperación es independiente del tamaño del sistema de archivos. Incluso si alguna información que fuese modificada inmediatamente antes de la caída del sistema no fuese escrita al disco, XFS se encarga de borrar todos los bloques de datos sin escribir, eliminando así cualquier compromiso de seguridad.

ZFS

Combinación de sistema de archivos y gestor de volumen lógicos diseñado por Sun Microsystems. Las características de ZFS incluyen la protección contra la corrupción de datos, soporte para grandes capacidades de almacenamiento, la integración de los conceptos de sistema de archivos y la gestión de volúmenes, instantáneas y clones copy-on-write, la comprobación continua de la integridad y reparación automática de los archivos, RAID-Z y NFSv4 ACL nativos.

Los límites de ZFS están diseñados para ser tan grandes que no se encuentren nunca en la práctica.

Algunos límites teóricos de ZFS son:

  • 248 — Número de snapshots en cualquier sistema de ficheros (2 × 1014)
  • 248 — Número de ficheros en un sistema de ficheros (2 × 1014)
  • 16 exabytes — Tamaño máximo de un sistema de ficheros.
  • 16 exabytes — Tamaño máximo de un fichero.
  • 16 exabytes — Tamaño máximo de cualquier atributo.
  • 3 × 1023 petabytes — Tamaño máximo de un zpool.
  • 256 — Número de atributos de un fichero (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS).
  • 256 — Número de ficheros en un directorio (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS).
  • 264 — Número de dispositivos en cualquier zpool.
  • 264 — Número de zpools en un sistema.
  • 264 — Número de sistemas de ficheros en un zpool.

Como ejemplo de las capacidades expresadas por estos números, si un usuario crease 1000 ficheros por segundo, tardaría unos 9000 años en alcanzar el límite impuesto por el número de ficheros.

¿Te resultó interesante? Compártelo ...



Maikel Llamaret Heredia

Publicado por Maikel Llamaret Heredia

https://swlx.info » Facebook » Twitter » Google+ » Linkedin » Forma parte de GUTL desde el 6 diciembre, 2011. Parte de la familia GUTL. Usuario de Tecnologías Libres desde hace varios años. Fiel a GNU/Linux y las filosofías del Software Libre y el Código Abierto. Linux User # 587451. Creador y actual mantenedor del Proyecto SWL-X. Freelancer dedicado al Desarrollo / Diseño Web y Marketing Online. Creador de Web & Media Integrated Solutions

Este artículo tiene 2 comentarios

  1. Gran recopilación @Maikel. Creo que faltó uno en la lista, UFS el que utiliza FreeBSD.

    De todos esos creo que el mejor -según dicen- es ZFS (el de Solaris) a este no hay con que darle. En cuanto a ReiserFS 3 creo que venía en Kanoppix por defecto y funcionaba una maravilla esa distro.

    En cuanto a Btrfs no sé si alguien lo utiliza, en un tiempo atrás se decía que estaba muy lejos de ZFS.

    • Tienes razón, faltó UFS, de seguro faltan muchos otros, pero creo que debí incluir a UFS 🙁

Los comentarios están cerrados.