Un sistema de archivos es una de esas implementaciones en un sistema operativo que todos usan, pero la mayoría no sabe cómo funciona.
Considere los viejos tiempos cuando las oficinas guardaban registros y archivos dentro de carpetas, los agrupaban en pilas y los colocaban en sus respectivos estantes donde pertenecen. Puede agrupar las carpetas según sus fechas de registro o agruparlas según el área a la que se refieren. Tantas formas de mantener sus archivos, pero cada una de ellas tenía un propósito, que era facilitar nuestro trabajo manteniéndolos de manera estructurada y encontrándolos fácilmente.
Un sistema de archivos es una arquitectura que define cómo se almacenan y recuperan los archivos. Define un formato y una lógica de: si se guardará un archivo recién creado, cómo se guardará, con qué datos adicionales se guardará, dónde se guardará y cómo se accederá a él desde donde se guardó.
Los sistemas de archivos se definen en función de dónde se utilizan. Hay sistemas de archivos definidos para sistemas operativos, redes, bases de datos y otros sistemas de archivos de propósito especial. Cuando se habla de un sistema operativo, un sistema de archivos puede definirse como un disco duro, memoria flash, RAM o discos ópticos.
En este artículo, nos centraremos en el sistema de archivos para discos duros en un sistema operativo Linux y discutiremos qué tipo de sistema de archivos es adecuado. Antes de eso, familiaricémonos con las diversas características asociadas con un sistema de archivos.
La arquitectura de un sistema de archivos:
Un sistema de archivos consta principalmente de 3 capas. De arriba a abajo:
- Sistema de archivos lógicos : interactúa con la aplicación del usuario con la ayuda de una API para proporcionar operaciones de apertura, lectura, cierre, etc. y pasa las requests a la capa inferior.
- Sistema de archivos virtual : permite que varias instancias del sistema de archivos físico se ejecuten simultáneamente.
- Sistema de archivos físicos : maneja el aspecto físico del disco mientras administra y almacena los bloques de memoria física que se leen y escriben.
Características de un sistema de archivos
- Gestión del espacio : cómo se almacenan los datos en un dispositivo de almacenamiento. Relativo a los bloques de memoria y prácticas de fragmentación aplicadas en ella.
- Nombre de archivo : un sistema de archivos puede tener ciertas restricciones para los nombres de archivo, como la longitud del nombre, el uso de caracteres especiales y la distinción entre mayúsculas y minúsculas.
- Directorio : los directorios/carpetas pueden almacenar archivos de forma lineal o jerárquica manteniendo una tabla de índice de todos los archivos contenidos en ese directorio o subdirectorio.
- Metadatos : para cada archivo almacenado, el sistema de archivos almacena información diversa sobre la existencia de ese archivo, como la longitud de los datos, los permisos de acceso, el tipo de dispositivo, la fecha y hora modificada y otros atributos. Esto se llama metadatos.
- Utilidades : los sistemas de archivos brindan funciones para inicializar, eliminar, renombrar, mover, copiar, respaldar, recuperar y controlar el acceso a archivos y carpetas.
- Diseño : debido a sus implementaciones, los sistemas de archivos tienen limitaciones en la cantidad de datos que pueden almacenar.
Algunos términos importantes:
Diario:
Los sistemas de archivos de diario mantienen un registro llamado diario, que mantiene un registro de los cambios realizados en un archivo pero que aún no se han comprometido permanentemente en el disco para que, en caso de una falla del sistema, los cambios perdidos puedan recuperarse.
Versionado:
Los sistemas de archivos de control de versiones almacenan versiones guardadas previamente de un archivo, es decir, las copias de un archivo se almacenan en función de confirmaciones anteriores en el disco por minutos u horas para crear una copia de seguridad.
INode:
El Node de índice es la representación de cualquier archivo o directorio en función de los parámetros: tamaño, permiso, propiedad y ubicación del archivo y directorio.
Ahora, llegamos a la parte donde discutimos las diversas implementaciones del sistema de archivos en Linux para dispositivos de almacenamiento en disco.
Sistemas de archivos Linux:
Nota: Los sistemas de archivos de clúster y distribuidos no se incluirán por simplicidad.
ext (Sistema de archivos extendido) :
Implementado en 1992, es el primer sistema de archivos diseñado específicamente para Linux. Es el primer miembro de la familia ext de sistemas de archivos.
ext2 :
El segundo ext se desarrolló en 1993. Es un sistema de archivos sin diario que se prefiere usar con unidades flash y SSD. Resolvió los problemas de la marca de tiempo separada para el acceso, la modificación de iNodes y la modificación de datos. Debido a que no se registra en el diario, se carga lentamente en el momento del arranque.
Xiaf :
También desarrollado en 1993, este sistema de archivos era menos poderoso y funcional que ext2 y ya no se usa en ninguna parte.
ext3 :
La tercera extensión desarrollada en 1999 es un sistema de archivos de diario. Es confiable y, a diferencia de ext2, evita largas demoras en el arranque del sistema si el sistema de archivos se encuentra en un estado inconsistente después de un apagado incorrecto. Otros factores que lo hacen mejor y diferente a ext2 es el crecimiento del sistema de archivos en línea y la indexación de HTree para directorios grandes.
JFS (Sistema de archivos con registro) :
Creado por primera vez por IBM en 1990, el JFS original se convirtió en código abierto para implementarlo en Linux en 1999. JFS funciona bien bajo diferentes tipos de carga, pero ya no se usa comúnmente debido al lanzamiento de ext4 en 2006, que brinda un mejor rendimiento.
ReiserFS :
Es un sistema de archivos de registro diario desarrollado en 2001. A pesar de sus problemas anteriores, tiene el empaquetado final como un esquema para reducir la fragmentación interna. Utiliza un árbol B+ que proporcionó menos tiempo lineal en búsquedas y actualizaciones de directorios. Fue el sistema de archivos predeterminado en SUSE Linux hasta la versión 6.4, hasta que se cambió a ext3 en 2006 para la versión 10.2.
XFS :
XFS es un sistema de archivos de diario de 64 bits y se trasladó a Linux en 2001. Ahora actúa como el sistema de archivos predeterminado para muchas distribuciones de Linux. Proporciona funciones como instantáneas, desfragmentación en línea, archivos dispersos, tamaños de bloque variables y excelente capacidad. También sobresale en operaciones de E/S paralelas.
SquashFS :
Desarrollado en 2002, este sistema de archivos es de solo lectura y se usa solo con sistemas integrados donde se necesita una sobrecarga baja.
Reiser4 :
Es un modelo incremental para ReiserFS. Fue desarrollado en 2004. Sin embargo, no está ampliamente adaptado ni es compatible con muchas distribuciones de Linux.
ext4 :
La cuarta extensión, desarrollada en 2006, es un sistema de archivos de diario. Tiene compatibilidad con versiones anteriores de ext3 y ext2 y proporciona varias otras características, algunas de las cuales son asignación previa persistente, número ilimitado de subdirectorios, suma de verificación de metadatos y tamaño de archivo grande. ext4 es el sistema de archivos predeterminado para muchas distribuciones de Linux y también tiene compatibilidad con Windows y Macintosh.
btrfs (Mejor/Mantequilla/B-tree FS) :
Fue desarrollado en 2007. Ofrece muchas funciones, como instantáneas, agrupación de unidades, depuración de datos, autorreparación y desfragmentación en línea. Es el sistema de archivos predeterminado para Fedora Workstation.
bcachefs:
Este es un sistema de archivos de copia en escritura que se anunció por primera vez en 2015 con el objetivo de funcionar mejor que btrfs y ext4. Sus características incluyen cifrado completo del sistema de archivos, compresión nativa, instantáneas y suma de verificación de 64 bits.
Otros : Linux también admite sistemas de archivos de sistemas operativos como NTFS y exFAT, pero estos no admiten la configuración de permisos estándar de Unix. Se utilizan principalmente para la interoperabilidad con otros sistemas operativos.
A continuación se muestra una tabla que enumera los criterios en los que se pueden comparar los sistemas de archivos:
Tenga en cuenta que hay más criterios que los enumerados en la tabla. Se supone que esta tabla le dará una idea de cómo han evolucionado los sistemas de archivos.
Parámetros | Sistemas de archivos | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
extensión | ext2 | Xiafs | ext3 | JFS | ReiserFS | XFS | Reiser4 | ext4 | btrfs | |
máx. longitud del nombre de archivo (bytes) |
255 | 255 | 248 | 255 | 255 |
4032 255 caracteres |
255 | 3976 | 255 | 255 |
Caracteres permitidos en las entradas del directorio (Cualquier byte) |
excepto NUL | excepto NUL, / | excepto NUL | excepto NUL o / |
Cualquier Unicode excepto NUL |
excepto NUL o / | excepto NUL | excepto NUL, / | excepto NUL, / | excepto NUL, / |
máx. longitud de la ruta | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido | Indefinido |
máx. tamaño del archivo | 2 GB | 16 GB – 2 TB | 64MB | 16 GB – 2 TB | 4PB | 8TB | 8EB | 8 TB (en x86) | 16 GB – 16 TB | 16EB |
máx. tamaño del volumen | 2 GB | 2 TB – 32 TB | 2 GB | 2 TB – 32 TB | 32PB | 16TB | 8EB | – | 1EB | 16EB |
máx. no. de archivos | – | – | – | – | – | – | – | – | 2^32 | 2^64 |
Solo metadatos diario |
No | No | No | Sí | Sí | Sí | Sí | No | Sí | No |
Compresión | No | No | No | No | No | No | No | Sí | No | Sí |
Bloquear subasignación | No | No | No | No | Sí | Sí | No | Sí | No | Sí |
Crecimiento en línea | No | No | – | Sí | No | Sí | Sí | Sí | Sí | Sí |
Cifrado | No | No | No | No | No | No | No | Sí |
Sí (experimental) |
No |
Suma de verificación | No | No | No | No | No | No | Parcial | No | Parcial | Sí |
Observaciones
Vemos que XFS, ext4 y btrfs funcionan mejor entre todos los demás sistemas de archivos. De hecho, parece que btrfs es casi el mejor. A pesar de eso, la familia de sistemas de archivos ext ha sido la predeterminada para la mayoría de las distribuciones de Linux durante mucho tiempo. Entonces, ¿qué es lo que hizo que los desarrolladores eligieran ext4 como predeterminado en lugar de btrfs o XFS? Dado que ext4 es tan importante para esta discusión, describámoslo un poco más.
ext4:
Ext4 fue diseñado para ser compatible con versiones anteriores de ext3 y ext2, sus generaciones anteriores. Es mejor que las generaciones anteriores de las siguientes maneras:
- Proporciona un gran sistema de archivos como se describe en la tabla anterior.
- Utiliza extensiones que mejoran el rendimiento de archivos grandes y reducen la fragmentación.
- Proporciona una asignación previa persistente que garantiza la asignación de espacio y la memoria contigua.
- La asignación retrasada mejora el rendimiento y reduce la fragmentación mediante la asignación efectiva de grandes cantidades de datos a la vez.
- Utiliza índices HTree para permitir una cantidad ilimitada de subdirectorios.
- Realiza una suma de verificación de diario que permite que el sistema de archivos se dé cuenta de que algunas de sus entradas no son válidas o están fuera de servicio después de un bloqueo.
- Soporte para marcas de tiempo de tiempo de creación y marcas de tiempo mejoradas para inducir granularidad.
- Cifrado transparente.
- Permite la limpieza de tablas de iNodes en segundo plano, lo que a su vez acelera la inicialización. El proceso se llama inicialización diferida .
- Habilita las barreras de escritura de forma predeterminada. Lo que garantiza que los metadatos del sistema de archivos se escriban y ordenen correctamente en el disco, incluso cuando las cachés de escritura pierden energía.
Todavía hay algunas características en el proceso de desarrollo, como la suma de verificación de metadatos, compatibilidad con cuotas de primera clase y grandes bloques de asignación.
Sin embargo, ext4 tiene algunas limitaciones. Ext4 no garantiza la integridad de sus datos, si los datos están dañados mientras ya están en el disco, entonces no tiene forma de detectar o reparar dicha corrupción. El sistema de archivos ext4 no puede realizar una eliminación segura de archivos, lo que se supone que provoca la sobrescritura de los archivos al eliminarlos. Da como resultado que los datos confidenciales terminen en el diario del sistema de archivos.
XFS funciona muy bien para sistemas de archivos grandes y altos grados de concurrencia. Entonces, XFS es estable, pero no hay un límite sólido que lo haga elegirlo sobre ext4, ya que ambos funcionan de la misma manera. A menos que desee un sistema de archivos que resuelva directamente un problema de ext4 como tener una capacidad> 50TiB.
Btrfs , por otro lado, a pesar de ofrecer características como administración de múltiples dispositivos, suma de verificación por bloque, replicación asíncrona y compresión en línea, no funciona mejor en muchos casos de uso comunes en comparación con ext4 y XFS. Varias de sus características pueden tener errores y dar como resultado un rendimiento reducido y pérdida de datos.
Conclusión
ext4 se usa como un sistema de archivos predeterminado para muchas distribuciones de Linux y, a menos que desee practicar con otros tipos de sistemas de archivos, ext4 debería ser su primera opción. Se adoptan otros sistemas de archivos donde funcionan mejor. Por ejemplo, XFS es el valor predeterminado para Red Hat Enterprise 7 y todavía lo utilizan agencias como la NASA y el Departamento de Energía de EE. UU., y btrfs se utiliza como un sistema de archivos de disco único en los dispositivos de almacenamiento de Synology.
Publicación traducida automáticamente
Artículo escrito por yuvrajjoshi31 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA