En informática , la fragmentación del sistema de archivos , a veces denominada envejecimiento del sistema de archivos , es la tendencia de un sistema de archivos a disponer el contenido de los archivos de forma no continua para permitir la modificación in situ de su contenido. Es un caso especial de fragmentación de datos . La fragmentación del sistema de archivos afecta negativamente el tiempo de búsqueda en los medios de almacenamiento giratorios, lo que se sabe que obstaculiza el rendimiento . La fragmentación se puede remediar reorganizando los archivos y el espacio libre en áreas contiguas, un proceso llamado desfragmentación .
Las unidades de estado sólido no realizan búsquedas físicas, por lo que su acceso a los datos no secuenciales es cientos de veces más rápido que el de las unidades móviles, lo que hace que la fragmentación sea un problema menor. Se recomienda no desfragmentar manualmente el almacenamiento de estado sólido, ya que esto puede desgastar prematuramente las unidades mediante operaciones de escritura y borrado innecesarias. [1]
Cuando un sistema de archivos se inicializa por primera vez en una partición , contiene solo unas pocas estructuras internas pequeñas y, por lo demás, es un bloque contiguo de espacio vacío. [a] Esto significa que el sistema de archivos puede colocar archivos recién creados en cualquier lugar de la partición. Durante algún tiempo después de la creación, los archivos se pueden distribuir de forma casi óptima. Cuando se instalan el sistema operativo y las aplicaciones o se descomprimen los archivos , los archivos separados terminan apareciendo secuencialmente, por lo que los archivos relacionados se colocan cerca unos de otros.
A medida que se eliminan o truncan archivos existentes, se crean nuevas regiones de espacio libre. Cuando se agregan archivos existentes, a menudo es imposible reanudar la escritura exactamente donde terminaba el archivo, ya que es posible que ya haya otro archivo asignado allí; por lo tanto, se debe asignar un nuevo fragmento. A medida que pasa el tiempo y los mismos factores están presentes continuamente, el espacio libre, así como los archivos que se agregan con frecuencia, tienden a fragmentarse más. Las regiones de espacio libre más cortas también significan que el sistema de archivos ya no puede asignar nuevos archivos de forma contigua y debe dividirlos en fragmentos. Esto es especialmente cierto cuando el sistema de archivos se llena y no hay grandes regiones contiguas de espacio libre disponibles.
El siguiente ejemplo es una simplificación de un tema que de otro modo sería complicado. Consideremos el siguiente escenario: en un disco nuevo se han guardado cinco archivos, denominados A, B, C, D y E, de forma continua y secuencial en ese orden. Cada archivo utiliza 10 bloques de espacio (aquí, el tamaño del bloque no es importante). El resto del espacio del disco es un bloque libre. Por lo tanto, se pueden crear y guardar archivos adicionales después del archivo E.
Si se elimina el archivo B, se crea una segunda región de diez bloques de espacio libre y el disco se fragmenta. El espacio vacío simplemente se deja allí, se marca como disponible para su uso posterior y luego se vuelve a utilizar según sea necesario. [b] El sistema de archivos podría desfragmentar el disco inmediatamente después de una eliminación, pero al hacerlo se produciría una grave penalización del rendimiento en momentos impredecibles.
Ahora, un nuevo archivo llamado F, que requiere siete bloques de espacio, puede colocarse en los primeros siete bloques del espacio recién liberado que anteriormente contenía el archivo B, y los tres bloques siguientes permanecerán disponibles. Si se agrega otro nuevo archivo llamado G, que necesita solo tres bloques, podría ocupar el espacio después de F y antes de C.
Si posteriormente es necesario ampliar F, dado que el espacio inmediatamente siguiente está ocupado, existen tres opciones para el sistema de archivos:
La segunda opción probablemente no sea práctica por razones de rendimiento, al igual que la tercera cuando el archivo es muy grande. La tercera opción es imposible cuando no hay un único espacio libre contiguo lo suficientemente grande como para albergar el nuevo archivo. Por lo tanto, la práctica habitual es simplemente crear una extensión en otro lugar y encadenar la nueva extensión a la antigua.
El material añadido al final del archivo F formaría parte de la misma extensión. Pero si hay tanto material que no queda espacio libre después de la última extensión, entonces se deberá crear otra extensión, y así sucesivamente. Al final, el sistema de archivos tiene segmentos libres en muchos lugares y algunos archivos pueden estar repartidos en muchas extensiones. El tiempo de acceso a esos archivos (o a todos los archivos) puede llegar a ser excesivamente largo.
Algunos de los primeros sistemas de archivos no podían fragmentar archivos. Un ejemplo de ello era el sistema de archivos Acorn DFS utilizado en BBC Micro . Debido a su incapacidad para fragmentar archivos, a veces aparecía el mensaje de error " can't extend" (no se puede extender) y, a menudo, el usuario no podía guardar un archivo incluso si el disco tenía espacio suficiente para él.
DFS utilizaba una estructura de disco muy simple y los archivos en el disco se ubicaban únicamente por su longitud y sector inicial. Esto significaba que todos los archivos debían existir como un bloque continuo de sectores y la fragmentación no era posible. Usando el ejemplo de la tabla anterior, el intento de expandir el archivo F en el paso cinco habría fallado en un sistema de este tipo con el mensaje de error "can't extend" . Independientemente de cuánto espacio libre pudiera quedar en el disco en total, no estaba disponible para extender el archivo de datos.
Los estándares de manejo de errores en ese momento eran primitivos y, en cualquier caso, los programas apretados en la memoria limitada del BBC Micro rara vez podían permitirse el lujo de desperdiciar espacio intentando manejar errores elegantemente. En lugar de eso, el usuario se encontraría devuelto al símbolo del sistema con el mensaje Can't extend y todos los datos que aún no se habían adjuntado al archivo se perderían. El problema tampoco se podía resolver simplemente comprobando el espacio libre en el disco de antemano. Si bien puede haber espacio libre en el disco, el tamaño del bloque contiguo más grande de espacio libre no era inmediatamente aparente sin analizar los números presentados por el catálogo de discos y, por lo tanto, escapaba a la atención del usuario. Además, casi todos los usuarios de DFS habían utilizado anteriormente el almacenamiento de archivos en casete , que no sufre este error. La actualización a un sistema de disquete era una actualización costosa, y fue una sorpresa que la actualización pudiera causar la pérdida de datos sin previo aviso . [2] [3]
La fragmentación del sistema de archivos puede ocurrir en varios niveles:
La fragmentación de archivos individuales se produce cuando un solo archivo se ha dividido en varias partes (denominadas extensiones en los sistemas de archivos basados en extensiones). Si bien los sistemas de archivos de disco intentan mantener los archivos individuales contiguos, esto no suele ser posible sin sufrir importantes penalizaciones de rendimiento. Las herramientas de comprobación y desfragmentación del sistema de archivos normalmente solo tienen en cuenta la fragmentación de archivos en su estadística de "porcentaje de fragmentación".
La fragmentación del espacio libre (no asignado) ocurre cuando hay varias áreas no utilizadas del sistema de archivos donde se pueden escribir nuevos archivos o metadatos. La fragmentación no deseada del espacio libre generalmente se debe a la eliminación o truncamiento de archivos, pero los sistemas de archivos también pueden insertar intencionalmente fragmentos ("burbujas") de espacio libre para facilitar la extensión de archivos cercanos (consulte la sección sobre cómo prevenir la fragmentación a continuación).
La segmentación de archivos, también llamada fragmentación de archivos relacionados o fragmentación a nivel de aplicación (archivo), se refiere a la falta de localidad de referencia (dentro del medio de almacenamiento) entre archivos relacionados. A diferencia de los dos tipos de fragmentación anteriores, la dispersión de archivos es un concepto mucho más vago, ya que depende en gran medida del patrón de acceso de aplicaciones específicas. Esto también hace que medirla o estimarla objetivamente sea muy difícil. Sin embargo, podría decirse que es el tipo de fragmentación más crítico, ya que los estudios han descubierto que los archivos a los que se accede con más frecuencia tienden a ser pequeños en comparación con el rendimiento del disco disponible por segundo. [4]
Para evitar la fragmentación de archivos relacionados y mejorar la localidad de referencia (en este caso llamada contigüidad de archivos ), se deben hacer suposiciones u observaciones activas sobre el funcionamiento de las aplicaciones. Una suposición muy frecuente es que vale la pena mantener juntos los archivos más pequeños dentro de un solo directorio y disponerlos en el orden natural del sistema de archivos. Si bien a menudo es una suposición razonable, no siempre se cumple. Por ejemplo, una aplicación puede leer varios archivos diferentes, tal vez en diferentes directorios, exactamente en el mismo orden en que fueron escritos. Por lo tanto, un sistema de archivos que simplemente ordena todas las escrituras sucesivamente, puede funcionar más rápido para la aplicación en cuestión.
Los catálogos o índices utilizados por un sistema de archivos también pueden fragmentarse con el tiempo, a medida que se crean, modifican o eliminan las entradas que contienen. Esto es más preocupante cuando el volumen contiene una multitud de archivos muy pequeños que cuando un volumen está lleno de menos archivos más grandes. Según el diseño particular del sistema de archivos, los archivos o regiones que contienen esos datos también pueden fragmentarse (como se describió anteriormente para los archivos "normales"), independientemente de cualquier fragmentación de los registros de datos reales que se mantienen dentro de esos archivos o regiones. [5]
Para algunos sistemas de archivos (como NTFS [c] y HFS / HFS Plus [6] ), la intercalación / ordenación / compactación necesaria para optimizar estos datos no puede ocurrir fácilmente mientras el sistema de archivos está en uso. [7]
La fragmentación del sistema de archivos es más problemática con las unidades de disco duro de nivel de consumidor debido a la creciente disparidad entre la velocidad de acceso secuencial y la latencia rotacional (y en menor medida el tiempo de búsqueda ) en la que se colocan habitualmente los sistemas de archivos. [8] Por lo tanto, la fragmentación es un problema importante en la investigación y el diseño de sistemas de archivos. La contención de la fragmentación no solo depende del formato en disco del sistema de archivos, sino también en gran medida de su implementación. [9] La fragmentación del sistema de archivos tiene un menor impacto en el rendimiento en las unidades de estado sólido , ya que no hay tiempo de búsqueda mecánico involucrado. [10] Sin embargo, el sistema de archivos necesita almacenar metadatos adicionales para cada parte no contigua del archivo. Cada pieza de metadatos ocupa espacio y requiere potencia de procesamiento y tiempo de procesador. Si se alcanza el límite máximo de fragmentación, las solicitudes de escritura fallan. [10]
En las pruebas comparativas de sistemas de archivos simples , el factor de fragmentación se suele omitir, ya que es difícil modelar el envejecimiento y la fragmentación realistas. En cambio, para simplificar la comparación, las pruebas comparativas de sistemas de archivos se suelen ejecutar en sistemas de archivos vacíos. Por lo tanto, los resultados pueden variar mucho de los patrones de acceso de la vida real. [11]
Se han desarrollado varias técnicas para combatir la fragmentación. Por lo general, se pueden clasificar en dos categorías: preventivas y retroactivas . Debido a la dificultad de predecir los patrones de acceso, estas técnicas suelen ser de naturaleza heurística y pueden degradar el rendimiento en caso de cargas de trabajo inesperadas.
Las técnicas preventivas intentan mantener la fragmentación al mínimo en el momento en que se escriben los datos en el disco. La más sencilla es agregar datos a un fragmento existente en el lugar donde sea posible, en lugar de asignar nuevos bloques a un nuevo fragmento.
Muchos de los sistemas de archivos actuales intentan preasignar fragmentos más largos, o fragmentos de diferentes fragmentos de espacio libre, llamados extensiones, a los archivos a los que se les agregan datos de forma activa. Esto evita en gran medida la fragmentación de archivos cuando se agregan varios archivos simultáneamente, evitando así que se entrelacen excesivamente. [9]
Si se conoce el tamaño final de un archivo sujeto a modificación, se puede preasignar espacio de almacenamiento para todo el archivo. Por ejemplo, el archivo de intercambio (archivo de paginación) de Microsoft Windows se puede redimensionar dinámicamente durante el funcionamiento normal y, por lo tanto, puede llegar a fragmentarse en gran medida. Esto se puede evitar especificando un archivo de paginación con los mismos tamaños mínimo y máximo, lo que preasigna efectivamente todo el archivo.
BitTorrent y otras aplicaciones de intercambio de archivos peer to peer limitan la fragmentación al preasignar todo el espacio necesario para un archivo al iniciar las descargas . [12]
Una técnica relativamente reciente es la asignación retrasada en XFS , HFS+ [13] y ZFS ; la misma técnica también se denomina allocate-on-flush en reiser4 y ext4 . Cuando se escribe en el sistema de archivos, se reservan bloques del sistema de archivos, pero las ubicaciones de archivos específicos aún no se establecen. Más tarde, cuando el sistema de archivos se ve obligado a vaciar los cambios como resultado de la presión de la memoria o una confirmación de transacción, el asignador tendrá un conocimiento mucho mejor de las características de los archivos. La mayoría de los sistemas de archivos con este enfoque intentan vaciar los archivos en un solo directorio de forma contigua. Suponiendo que las lecturas múltiples de un solo directorio son comunes, se mejora la localidad de referencia. [14] Reiser4 también ordena la disposición de los archivos según la tabla hash del directorio , de modo que cuando se accede a los archivos en el orden natural del sistema de archivos (como lo dicta readdir ), siempre se leen secuencialmente. [15]
Las técnicas retroactivas intentan reducir la fragmentación, o los efectos negativos de la fragmentación, después de que se haya producido. Muchos sistemas de archivos proporcionan herramientas de desfragmentación , que intentan reordenar fragmentos de archivos y, a veces, también reducen su dispersión (es decir, mejoran su contigüidad o localidad de referencia ) manteniendo archivos más pequeños en directorios , árboles de directorios o incluso secuencias de archivos cercanas entre sí en el disco.
El sistema de archivos HFS Plus desfragmenta de forma transparente los archivos que tienen un tamaño inferior a 20 MiB y están divididos en 8 o más fragmentos cuando se abre el archivo. [16]
El ahora obsoleto sistema de archivos inteligente (SFS) de Commodore Amiga se desfragmentó a sí mismo mientras el sistema de archivos estaba en uso. El proceso de desfragmentación es casi completamente sin estado (aparte de la ubicación en la que está trabajando), por lo que se puede detener e iniciar instantáneamente. Durante la desfragmentación, se garantiza la integridad de los datos tanto de los metadatos como de los datos normales.
{{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: CS1 maint: URL no apta ( enlace )