Journaling y otras propiedades de los sistemas de archivos que son desconocidas







Actualizado a: 17 de octubre de 2023

Los sistemas de archivos tienen una serie de características interesantes y poco conocidas por muchos usuarios. Una de ellas es el journaling, aunque hay otras interesantes a las que también le daremos un repaso. Así comprenderás mejor cómo funcionan las distintas implementaciones de FS.

También te puede interesar:

¿Qué es un sistema de archivos?

Interior disco duro

Un sistema de archivos (a lo que comúnmente llamamos formato, cuando formateamos) es una estructura organizativa utilizada por un sistema operativo para administrar y almacenar archivos en un dispositivo de almacenamiento secundario, como puede ser un disco duro, un pendrive, un disco duro externo, una tarjeta de memoria, etc., e incluso algunas veces se puede implementar también en una memoria primaria, como la memoria RAM. Gracias a este file system (FS), se puede organizar los datos, tener nombres de archivos, se puede acceder a ellos, los archivos cuentan con metadatos, aportar atributos, etc.

Ejemplos de los sistemas de archivos más populares

¿Qué son las IOPS en discos duros y por qué son importantes?

Existen muchos sistemas de archivos diferentes, pero algunos ejemplos destacables que deberías conocer son:

  • NTFS (New Technology File System): es un sistema de archivos usado en Microsoft Windows, implementado para Windows NT.
  • FAT (File Allocation Table): este formato también fue empleado en Windows anteriormente a NT, aunque en la actualidad se sigue usando algunas variantes de este para medios extraíbles.
  • ext4 (Fourth Extended File System): es uno de los FS más populares en el mundo Linux, y es el sucesor de ext3.
  • HFS+ (Hierarchical File System Plus): se trata de la nueva versión del FS para macOS de Apple, y sucesor de HFS.
  • APFS (Apple File System): este sistema también está implementado por Apple, y es empleado en dispositivos iOS, iPadOS, watchOS, y tvOS.
  • ZFS (Zettabyte File System): es un sistema creado por Sun Microsistems (ahora Oracle) para el sistema operativo Solaris. Sin embargo, también se puede emplear en otros Unix, como es el caso de Linux. Existe un fork denominado OpenZFS.
  • ReFS (Resilient File System): es un FS especialmente utilizado en Windows Server, dado que está creado para mantener una integridad y resistencia de datos. No obstante, también se empleó en algunas ediciones de Windows 10 y 11.

Existen muchos más, y con muy diversas características. Además, hay que decir que Linux es el que más formatos soporta, entre todos los sistemas operativos. Esto es así gracias a la implementación de un Virtual File System (VFS), que permite tener una interfaz de abstracción entre el kernel y los FS, para poder agregar soporte para más sistemas de archivos fácilmente.

Tecnologías o propiedades de los sistemas de archivos

Ahora vamos a ver qué es eso del journaling, entre otras tecnologías o propiedades interesantes de los sistemas de archivos:

Journaling

Un sistema de archivos con registro (journaling) es una estructura que registra cambios no confirmados en la parte principal del sistema de archivos en una estructura llamada «registro», que generalmente es circular. Estos sistemas permiten una recuperación más rápida y con menor riesgo de corrupción en caso de bloqueos o fallas de energía. La implementación puede variar, algunos registran solo metadatos para un mejor rendimiento a costa de un mayor riesgo de corrupción, mientras que otros registran tanto datos como metadatos, ofreciendo flexibilidad en la configuración.

Fue introducido por IBM en 1990, con su JFS (Journaling File System) para el sistema operativo AIX 3.1. Esta idea se popularizó y fue adoptada por otros sistemas, como NTFS de Microsoft en 1993 para sus sistemas operativos basados en el kernel Windows NT. Además, Apple también haría lo mismo en HFS+ en 1998, al igual que ext3 para Linux en 2001.

Hay que agregar que podemos tener varios tipos de journaling en un FS:

  • Registros físicos: anticipan y registran cada bloque que se escribirá en el sistema principal. Si hay un bloqueo durante la escritura en el sistema principal, la escritura se reproduce por completo en el próximo montaje, pero esto tiene un impacto significativo en el rendimiento. Se utilizan cuando se necesita una protección absoluta contra fallos.
  • Registros lógicos: solo registran cambios en los metadatos de los archivos, lo que mejora el rendimiento de escritura. Aunque estos sistemas se recuperan rápidamente después de bloqueos, pueden permitir que los datos y los metadatos se desincronicen, lo que podría causar la corrupción de datos.

Symbolic Link / Hard Link

En algunos sistemas de archivos para Unix, también puede haber soporte para enlaces blandos y duros.

  • Hard Link: este tipo de enlace duro se refiere a la conexión física entre un archivo original y una copia. Ambos hacen referencia idéntica al mismo archivo. Los cambios realizados en uno de ellos se reflejarán en el otro automáticamente. Si eliminas uno de los dos, se eliminarán ambos.
  • Symbolic Link: se trata de un archivo especial que contiene una referencia o que apunta a otro archivo o carpeta. No comparte datos, si cambias el original no afectará al enlace y viceversa. Si eliminas el enlace no afectará al original, y si eliminas el original, el enlace apuntará a una dirección inexistente.

Timestamp (Metadatos)

Hoy la mayoría de sistemas de archivos tienen soporte para el timestamp, es decir, para almacenar una marca de tiempo que se asocia con un archivo o directorio para registrar información específica sobre cuándo ocurrieron ciertos eventos relacionados con ese archivo. Por ejemplo, cuándo fue accedido por última vez, cuándo se modificó por última vez, cuándo fue creado, etc.

Soporte para atributos extendidos

Algunos sistemas de archivos también incluyen soporte para atributos extendidos, es decir, otros metadatos asociados a los archivos y carpetas que son usados por el sistema operativo y las aplicaciones para varias funciones. Por ejemplo, para controlar el acceso, para identificar si se puede o no modificar, etc.

Case preserving

Esto es algo que incluyen la mayoría de sistemas de archivos modernos. Se dice que un FS tiene case preserving cuando almacena nombres de archivos manteniendo la información de mayúsculas y minúsculas de los nombres.

Case sensitive

El case sensitive, o la sensibilidad a las mayúsculas y minúsculas define si las letras en mayúsculas y minúsculas se tratan como distintas o como equivalentes. Por ejemplo, cuando los usuarios crean un archivo que se llama «ejemplo» y tratan de guardar otro en la misma ubicación que se llama «Ejemplo», en un sistema sin case sensitive te daría error, porque el nombre a ojos del FS es idéntico. En cambio, en un sistema con case sensitive, podrías crear archivos en la misma ubicación tipo: «ejemplo», «Ejemplo», «ejEmplo», «EJEMPLO», «ejeMPLo», etc., ya que todos serían nombres diferentes para este FS.

Los antiguos FAT de Microsoft eran case insensitive, al igual que HFS y HFS+ de Apple lo siguen siendo. No obstante, Microsoft rectificó esto en NTFS, que sí es case sensitive, al igual que muchos FS para Linux y otros Unix.

File change log

El file change log, o registro de cambios de archivos, realiza un seguimiento de los cambios realizados en el espacio de nombres, registrando cambios en la creación, enlaces, cambios de nombre, cambios de metadatos, etc. Este registro podría incluso ser accesible, y no estar oculto. NTFS y HFS+ son dos ejemplos de sistemas de archivos que tienen uno de estos registros.

XIP

XIP son las siglas de eXecute In Place, es decir, ejecución en su lugar. Un método para poder ejecutar programas directamente desde el medio de almacenamiento en lugar de tenerlos que copiar a la memoria RAM para su ejecución. Esto puede reducir la cantidad de memoria RAM necesaria, aunque también es más lento. Algunos ejemplos de sistemas que lo implementan son ext2, ext3, ext4, UDF, etc.

Deduplicación

La deduplicación de datos es una técnica para eliminar copias duplicadas de datos repetidos, lo que puede hacer que no se desperdicie tanto espacio con copias idénticas de archivos, y que no tengas que buscarlas manualmente para dejar más espacio libre en la unidad, sino que se hace solo. Ejemplos de sistemas que lo implementan, pues puede ser btrfs, ZFS, SquashFS, NTFS, XFS, etc.

Compresión

La compresión en un sistema de archivos se refiere a la técnica de reducir el tamaño de los archivos y datos almacenados a través de algoritmos de compresión. Existen dos tipos principales de compresión en sistemas de archivos:

  • Compresión en tiempo real: los archivos se comprimen y descomprimen mientras se leen o escriben en el sistema de archivos. Esto significa que los archivos se mantienen comprimidos en el disco y solo se descomprimen cuando se acceden. Esta técnica puede ahorrar espacio en disco, pero a menudo implica una sobrecarga de CPU al comprimir y descomprimir datos en tiempo real.
  • Compresión por lotes: los archivos se comprimen por lotes en un proceso separado y se almacenan en disco en su forma comprimida. Cuando se accede a un archivo comprimido, se descomprime antes de ser entregado al usuario. Esto reduce la sobrecarga de CPU al comprimir y descomprimir, pero implica que el proceso de compresión debe ejecutarse de manera regular para mantener los beneficios de ahorro de espacio.

Algunos ejemplos de sistemas de archivos que lo soportan son: NTFS, Raiser4, ZFS, Btrfs, etc.

Cifrado

El cifrado, también denominado Filesystem-level encryption, es similar a lo anterior, pero en lugar de usar algoritmos de compresión, en este caso se aplican algoritmos de cifrado, para proteger los archivos y directorios. Este cifrado es de forma completa en toda la partición o disco. Y, al igual que la compresión, también puede mermar el rendimiento al sobrecargar la CPU cifrando y descifrando. Ejemplos son NTFS, ext4, ZFS, APFS,etc.

ECC/checksum

En este caso hablamos del uso de técnicas ECC (Error Correcting Code) y checksum para evitar errores. En este caso tenemos ejemplos como ZFS, Btrfs, XFS, NTFS, etc.

Self-healing

El self-healing se refiere a la capacidad del sistema para detectar y corregir errores o daños en los datos o la estructura del sistema de archivos de manera automática o autónoma, sin intervención del usuario. Esta característica es especialmente valiosa para mantener la integridad de los datos y la confiabilidad del sistema de archivos a lo largo del tiempo. Algo importante en sistemas críticos o centros de datos.

Para que esto sea posible, este sistema de autoreparación implica detección de la corrupción de datos y errores en los metadatos, reparación de bloques defectuosos, etc. Ejemplos de estos sistemas de archivos son Btrfs, ZFS, CephFS…

Sparce Files

Sparce Files, o archivo disperso, si el FS lo soporta, se refiere a un tipo de archivo que intenta utilizar el espacio del sistema de archivos de manera más eficiente cuando el archivo en sí está parcialmente vacío. Esto se logra escribiendo una breve información (metadatos) en un registro. Esta información representa los bloques vacíos en el medio de almacenamiento de datos en lugar de usar directamente el espacio «vacío» real que conforma el bloque, lo que consume menos espacio de almacenamiento. Cuando se quieren leer estos datos, el FS convierte de manera totalmente automática y transparente para el usuario esos metadatos en bloques reales llenos de bytes nulos en tiempo de ejecución. Esto es algo que hacen la mayoría de los sistemas de archivos modernos, como NTFS, UFS, Raiser4, RaiserFS, ext2, ext3, ext4, JFS, XFS, ZFS, Btrfs, etc.

Técnicas contra la fragmentación: Block Suballocation o Tail Packing / Extents / Allocate on flush

La subasignación de bloques (también denominado fusión de colas o empaquetado de colas) es otra importante característica que tienen algunos sistemas de archivos. Permite utilizar unidades de asignación más eficientes para el espacio vacío al final de archivos grandes, espacio que de otro modo se perdería debido a la fragmentación interna. Ejemplos de sistemas que lo soportan son: ZFS, Btrfs, JFS, XFS, ext3, ext4, RaiserFS, NTFS, etc.

Por otro lado, un extent es un área que se reserva para un archivo, representada como un rango de números de bloques. Un archivo podría constar de cero o más extents, según su extensión. Esto beneficia al sistema de archivos, como el caso anterior, reduciendo la fragmentación de los archivos. Ejemplos de soporte de extent son Btrfs, JFS, XFS, Raiser4, ext4, NTFS, HFS+, etc.

La acción denominada como allocate on flush es una característica del sistema de archivos que se asemeja a una técnica antigua empleada en UFS para la reubicación de bloques. Es decir, cuando se deben asignar bloques para contener escrituras pendientes, el espacio en disco para los datos agregados se resta del contador de espacio libre, pero no se asigna realmente en el mapa de espacio libre. Esto mantiene los datos en la memoria principal, hasta que deben guardarse en la memoria secundaria debido a que se llena la RAM o que el kernel decide guardar los buffers mediante la llamada sync en el mundo Unix. Esto permite agrupar asignaciones más grandes, y reduce el uso de la CPU, mejorando el rendimiento, además de reducir la fragmentación de datos (especialmente en archivos que crecen lentamente). Ejemplos son Btrfs, ZFS, XFS, ext4, Raiser4, APFS, etc.

Copy on Write (COW)

La técnica Copy-on-write o COW permite implementar de forma más eficiente la duplicación de datos cuando no se modifica, lo que permite evitar la creación de un nuevo recurso. Es decir, la copia se pospone hasta que se necesite modificar el original. Esto reduce recursos cuando las copias no son modificadas, reduciendo la sobrecarga de la CPU. Ejemplos son APFS, LFS, XFS, ZFS, Btrfs, etc.

TRIM

TRIM es un comando de eliminación pensado especialmente para las unidades SSD. Esto permite que el sistema operativo informe al SSD sobre qué bloques ya no están en uso y pueden ser borrados o sobre-escritos. De esta forma se produce un manejo más eficiente de la recolección de basura y reduce la cantidad de escrituras necesarias, aumentando la vida útil de las unidades SSD. Ejemplos son Btrfs, ZFS, XFS, ext2, ext3, ext4, NTFS, HFS+, etc., e incluso se ha agregado a algunas implementaciones de FAT.




Source link

Deja un comentario