¿Qué es la fragmentación en un sistema de archivos y por qué ocurre?
Antes de concentrarse en la fragmentación en un sistema de ficheros, primero hay que familiarizarse con el concepto de sistema de archivos como tal. Se refiere a la tecnología sobre la base de la cual se organizan y gestionan los datos dentro de cada sección separada de un medio de almacenamiento (un disco duro, una unidad de estado sólido, una memoria USB, etc.), denominada partición. Creado en un almacenamiento en el proceso de formateo, el sistema de archivos cuenta con un conjunto de métodos y estructuras que se utilizan para el control sobre cómo y dónde se almacena cada dato. Gracias a él, los datos se mantienen de manera ordenada en lugar de un flujo continuo de bytes. Además, el sistema de archivos mantiene registros que permiten acceder instantáneamente a archivos siempre que el sistema operativo los solicite. Cuando el SO necesita eliminar ciertos datos del almacenamiento, el sistema de archivos también proporciona un mecanismo para realizar esta operación.
Diferentes plataformas de sistemas operativos generalmente usan diferentes tipos de sistemas de archivos. Los más comunes son FAT/FAT32, exFAT, NTFS y ReFS de Windows, APFS y HFS+ de macOS, Ext4, XFS, Btrfs, F2FS de Linux y UFS, ZFS de BSD, Solaris, Unix. Aunque todos ellos, en esencia, realizan las mismas funciones, sus diseños y estrategias de colocación de datos pueden diferir en gran medida.
La fragmentación es una condición que ocurre cuando un sistema de archivos particular no puede preparar un área contigua en el almacenamiento para guardar todo el archivo en una sola ubicación. En consecuencia, un archivo se divide en piezas que se almacenan en partes separadas del disco. Esas piezas individuales se llaman fragmentos, y los archivos cuyos fragmentos no se colocan uno al lado del otro se consideran fragmentados. Para acceder a cada fragmento de forma secuencial y, de esta manera, leer un fichero como este, cada sistema de archivos usa la información de servicio especial (los metadatos), que, entre otras cosas, contiene punteros a los fragmentos relacionados.
Idealmente, los fragmentos que constituyen un solo archivo deben estar lo más cerca posible. Y esto no suele ser un problema en una unidad nueva que tiene mucho espacio libre. Sin embargo, con el tiempo, a medida que se crean, modifican y eliminan archivos, aparecen brechas entre ellos que deben llenarse con nuevos datos. Cuando los archivos entrantes son pequeños, pueden caber fácilmente en dichas brechas. Pero la mayoría de las veces, un archivo es mucho más grande que la brecha más grande disponible. Asimismo, el tamaño de un archivo existente puede aumentar, pero es posible que no haya partes de espacio libres a su lado. Para realizar la escritura sin demora, el sistema de archivos suele colocar datos donde puede encontrar espacio en ese momento, dejando los fragmentos del archivo esparcidos por todo el almacenamiento.
En general, la fragmentación es más típica de los sistemas de archivos de generaciones anteriores, como, por ejemplo, FAT/FAT32 de Microsoft. Los modernos principalmente buscan mantenerla al mínimo aplicando varias técnicas:
-
Asignación basada en extent
Los archivos se almacenan en áreas contiguas denominadas extents. Un extent se presenta como una dirección inicial de esta área y su longitud. Cuando sea posible, el algoritmo selecciona un solo extent con el espacio suficiente para el contenido del archivo, o al menos utiliza una cantidad mínima de extents. Los más típicos sistemas de archivos basados en extents son NTFS, APFS, HFS+, Ext4, XFS y Btrfs.
-
Asignación retrasada
El contenido del archivo a escribir se almacena en caché en la RAM, mientras que la operación de escritura real se pospone por tanto tiempo como sea posible. Cuando se conoce el tamaño final del archivo, hay muchas más posibilidades de que, eventualmente, se seleccione un extent de tamaño suficiente y que no se requieran más extents en el futuro próximo. Además, los archivos temporales no tienen que escribirse obligatoriamente en bloques contiguos y se pueden eliminar directamente de la memoria. Muchos sistemas de archivos modernos utilizan la asignación retrasada, incluidos Ext4, XFS, Btrfs, ZFS y HFS+.
-
Desfragmentación sobre la marcha
Algunos sistemas de archivos pueden detectar archivos fragmentados por ciertos criterios y re-ubicar automáticamente sus fragmentos para volver a hacerlos contiguos. Tales algoritmos son empleados, por ejemplo, por APFS, HFS+, Ext4 y Btrfs.
A pesar de ello, la fragmentación no puede considerarse un problema resuelto ni siquiera en los sistemas de archivos modernos. Los sistemas de ficheros todavía pueden estar sujetos a ella, especialmente en los siguientes casos:
-
un disco HDD o una unidad SSD de baja capacidad se utiliza como unidad del sistema;
-
hay un gran número de particiones pequeñas en un disco;
-
un almacenamiento se está quedando sin espacio libre (se utiliza más del 85%-95% de toda la capacidad);
-
los archivos de gran tamaño se editan con frecuencia, sobre todo, cuando se queda poco espacio de almacenamiento;
-
se eliminan y escriban nuevos archivos de diferentes tamaños cuando el almacenamiento está casi lleno.
¿Cuáles son los efectos negativos de la fragmentación?
Con el tiempo y a medida que el sistema de archivos se usa activamente, los archivos almacenados en él pueden dividirse en cientos o incluso miles de fragmentos repartidos por la unidad. Esto puede tener un impacto serio en el rendimiento, según el tipo de medio digital involucrado. Los discos duros mecánicos almacenan datos en sus discos giratorios. Para acceder a un archivo solicitado, el dispositivo tiene que mover su cabezal de lectura y escritura sobre la superficie y encontrar cada fragmento del mismo. Cuando los últimos están dispersos en ubicaciones completamente diferentes, tarda mucho más tiempo en llegar a ellos que para leer una secuencia contigua de los mismos. Esto también da como resultado que los componentes giratorios del disco duro se utilicen mucho más, lo que, a su vez, reduce la vida útil del dispositivo. Las unidades de estado sólido, a cambio, no tienen partes mecánicas y, por lo tanto, no son susceptibles a la degradación del rendimiento causada por la fragmentación.
Aparte de eso, la fragmentación agrava la situación cuando se produce una pérdida de datos y es necesario recuperar lo perdido. En primer lugar, la posibilidad de que un archivo fragmentado pierda su integridad debido a que se sobrescribió parcialmente con otros datos es mucho mayor. Además, en algunos casos, el contenido puede estar todavía presente en el almacenamiento, pero no se puede recuperar debido a una fragmentación significativa. Este problema se examina con más detalle a continuación.
Fragmentación en el contexto de la recuperación de datos
Para que un archivo fragmentado se restaure correctamente, no solo es necesario determinar la ubicación de su inicio, sino que también identificar todos los fragmentos de los que se compone y organizarlos en el orden correcto. El sistema de archivos generalmente recurre a sus metadatos para rastrear este tipo de correspondencia. Cuando los registros de servicio aún están disponibles, generalmente es posible analizarlos y descubrir qué fragmentos pertenecen a qué archivos. Por lo tanto, siempre que un archivo no esté sobrescrito, es fácil recuperarlo, sin importar cuán fragmentado pueda estar.
Pero las cosas empeoran mucho más, cuando estos archivos deben extraerse sin la ayuda de metadatos. Estos últimos pueden corromperse debido a alguna falla lógica o durante una operación de formateo. Más aún, ciertos sistemas de archivos, como, por ejemplo, FAT/FAT32, borran deliberadamente una parte de ellos una vez que se elimina un archivo. En este caso, una herramienta de recuperación de datos puede encontrar la ubicación del inicio del archivo basándose en el conocimiento de su estructura. Buscará patrones específicos conocidos como firmas en el contenido sin procesar del disco. No obstante, detectar el inicio del siguiente fragmento puede ser extremadamente difícil o incluso imposible, en particular cuando un archivo está dividido en muchas piezas colocadas a gran distancia una de la otra.
La fragmentación es un desafío serio en cuanto a la recuperación de datos. Incluso los algoritmos más sofisticados no pueden proporcionar un resultado del 100%, cuando se trata de datos muy fragmentados en ausencia de registros utilizables del sistema de archivos. Y, desafortunadamente, el grado de fragmentación de los archivos más valiosos (imágenes, vídeos, documentos, bases de datos, correos electrónicos, etc.) es generalmente alto. Es que alrededor del 15% de las imágenes e incluso el 50% de los archivos de vídeo se fragmenten en el sistema de archivos FAT/FAT32 que se usa con frecuencia en los medios portátiles como las unidades USB y tarjetas de memoria. En vista de esto, es esencial tomar precauciones contra la fragmentación para evitar la pérdida de datos permanente en caso de errores lógicos. Los sistemas de archivos que están más sujetos a ella pueden desfragmentarse con las herramientas especializadas integradas en Windows o por medio de las utilidades de terceros que también están desarrolladas para Linux y macOS.