En el mantenimiento de sistemas de archivos , la desfragmentación es un proceso que reduce el grado de fragmentación . Esto se logra organizando físicamente el contenido del dispositivo de almacenamiento masivo utilizado para almacenar archivos en el menor número de regiones contiguas (fragmentos, extensiones ). También intenta crear regiones más grandes de espacio libre mediante la compactación para impedir el retorno de la fragmentación. Algunas utilidades de desfragmentación intentan mantener juntos los archivos más pequeños dentro de un solo directorio, ya que a menudo se accede a ellos en secuencia.
La desfragmentación es ventajosa y relevante para los sistemas de archivos en unidades de disco electromecánicas ( unidades de disco duro , unidades de disquete y medios de disco óptico ). El movimiento de los cabezales de lectura/escritura del disco duro por diferentes áreas del disco al acceder a archivos fragmentados es más lento, en comparación con el acceso a todo el contenido de un archivo no fragmentado de forma secuencial sin mover los cabezales de lectura/escritura para buscar otros fragmentos.
La fragmentación se produce cuando el sistema de archivos no puede o no quiere asignar suficiente espacio contiguo para almacenar un archivo completo como una unidad, sino que coloca partes de él en espacios entre archivos existentes (normalmente, esos espacios existen porque antes contenían un archivo que el sistema de archivos ha eliminado posteriormente o porque el sistema de archivos asignó espacio sobrante para el archivo en primer lugar). Los archivos que se suelen añadir a otros archivos (como los archivos de registro), así como la adición y eliminación frecuente de archivos (como los correos electrónicos y la memoria caché del navegador web), los archivos más grandes (como los vídeos) y una mayor cantidad de archivos contribuyen a la fragmentación y la consiguiente pérdida de rendimiento. La desfragmentación intenta aliviar estos problemas.
Un disco en blanco tiene cinco archivos, A a E, cada uno de los cuales utiliza 10 bloques de espacio (para esta sección, un bloque es una unidad de asignación del sistema de archivos ; el tamaño del bloque se establece cuando se formatea el disco y puede ser cualquier tamaño admitido por el sistema de archivos). En un disco en blanco, todos estos archivos se asignarían uno después del otro (ver ejemplo 1 en la imagen). Si se eliminara el archivo B, habría dos opciones: marcar el espacio para el archivo B como vacío para volver a usarlo más tarde o mover todos los archivos después de B para que el espacio vacío esté al final. Dado que mover los archivos podría llevar mucho tiempo si hubiera muchos archivos que se debieran mover, generalmente el espacio vacío simplemente se deja allí, marcado en una tabla como disponible para nuevos archivos (ver ejemplo 2 en la imagen). [nb 1] Cuando se asigna un nuevo archivo, F, que requiere 6 bloques de espacio, se podría colocar en los primeros 6 bloques del espacio que anteriormente contenía el archivo B, y los 4 bloques siguientes permanecerán disponibles (ver ejemplo 3 en la imagen). Si se agrega otro archivo nuevo, G, y solo necesita 4 bloques, entonces podría ocupar el espacio después de F y antes de C (ejemplo 4 en la imagen).
Sin embargo, si luego es necesario ampliar el archivo F, hay tres opciones, ya que el espacio inmediatamente siguiente ya no está disponible:
Además, el concepto de “fragmentación” no se limita únicamente a archivos individuales que tienen múltiples extensiones en el disco. Por ejemplo, un grupo de archivos que normalmente se leen en una secuencia particular (como los archivos a los que accede un programa cuando se está cargando, que pueden incluir ciertas DLL , varios archivos de recursos, los archivos multimedia de audio/video en un juego) se pueden considerar fragmentados si no están en orden de carga secuencial en el disco, incluso si estos archivos individuales no están fragmentados; los cabezales de lectura/escritura tendrán que buscar estos archivos (no fragmentados) aleatoriamente para acceder a ellos en secuencia. Algunos grupos de archivos pueden haberse instalado originalmente en la secuencia correcta, pero se van distanciando con el tiempo a medida que se eliminan ciertos archivos dentro del grupo. Las actualizaciones son una causa común de esto, porque para actualizar un archivo, la mayoría de los actualizadores generalmente eliminan primero el archivo antiguo y luego escriben uno nuevo y actualizado en su lugar. Sin embargo, la mayoría de los sistemas de archivos no escriben el nuevo archivo en el mismo lugar físico en el disco. Esto permite que archivos no relacionados llenen los espacios vacíos que quedan.
La desfragmentación es la operación de mover extensiones de archivos (bloques de asignación física) para que finalmente se fusionen, preferiblemente en uno solo. Para ello, normalmente se requieren al menos dos operaciones de copia: una para mover los bloques a algún espacio libre en el disco para que se puedan realizar más movimientos, y otra para mover finalmente los bloques a su lugar previsto. En este paradigma, nunca se eliminan datos del disco, de modo que la operación se puede detener de forma segura incluso en caso de un corte de energía. La imagen del artículo muestra un ejemplo.
Para desfragmentar un disco, el software de desfragmentación (también conocido como "desfragmentador") sólo puede mover archivos dentro del espacio libre disponible. Se trata de una operación intensiva y no se puede realizar en un sistema de archivos con poco o ningún espacio libre. Durante la desfragmentación, el rendimiento del sistema se degradará y es mejor dejar la computadora en paz durante el proceso para que el desfragmentador no se confunda con cambios inesperados en el sistema de archivos. Según el algoritmo utilizado, puede ser ventajoso o no realizar varias pasadas. La reorganización involucrada en la desfragmentación no cambia la ubicación lógica de los archivos (definida como su ubicación dentro de la estructura de directorios ).
Además de desfragmentar los archivos de programa, la herramienta de desfragmentación también puede reducir el tiempo que lleva cargar programas y abrir archivos. Por ejemplo, el desfragmentador de Windows 9x incluía el Intel Application Launch Accelerator, que optimizaba los programas en el disco colocando los archivos de programa desfragmentados y sus dependencias uno al lado del otro, en el orden en que el programa los carga, para cargar estos programas más rápido. [1] En Windows, un buen desfragmentador leerá los archivos Prefetch para identificar tantos de estos grupos de archivos como sea posible y colocará los archivos dentro de ellos en secuencia de acceso.
Al principio del disco duro, las pistas externas tienen una velocidad de transferencia de datos mayor que las pistas internas. Colocar los archivos a los que se accede con frecuencia en las pistas externas aumenta el rendimiento. [2] Los desfragmentadores de terceros, como MyDefrag, moverán los archivos a los que se accede con frecuencia a las pistas externas y los desfragmentarán. [3]
Las mejoras en los discos duros modernos, como la memoria caché de RAM , una mayor velocidad de rotación de los platos, la cola de comandos ( SCSI / ATA TCQ o SATA NCQ ) y una mayor densidad de datos reducen hasta cierto punto el impacto negativo de la fragmentación en el rendimiento del sistema, aunque los aumentos en las cantidades de datos de uso común compensan esos beneficios. Sin embargo, los sistemas modernos se benefician enormemente de las enormes capacidades de disco disponibles actualmente, ya que los discos parcialmente llenos se fragmentan mucho menos que los discos llenos [4] y, en un HDD de alta capacidad, la misma partición ocupa un rango menor de cilindros, lo que da como resultado búsquedas más rápidas. Sin embargo, el tiempo de acceso promedio nunca puede ser inferior a la mitad de la rotación de los platos, y la rotación del plato (medida en rpm) es la característica de velocidad de los HDD que ha experimentado el crecimiento más lento a lo largo de las décadas (en comparación con la velocidad de transferencia de datos y el tiempo de búsqueda), por lo que minimizar el número de búsquedas sigue siendo beneficioso en la mayoría de las aplicaciones con gran capacidad de almacenamiento. La desfragmentación es justamente eso: garantizar que haya como máximo una búsqueda por archivo, contando solo las búsquedas de pistas no adyacentes.
Una estrategia común para optimizar la desfragmentación y reducir el impacto de la fragmentación es particionar el disco duro de forma que se separen las particiones del sistema de archivos que experimentan muchas más lecturas que escrituras de las zonas más volátiles donde se crean y eliminan archivos con frecuencia. Los directorios que contienen los perfiles de los usuarios se modifican constantemente (especialmente con el directorio Temp y la caché del navegador web, que crean miles de archivos que se eliminan en unos pocos días). Si los archivos de los perfiles de usuario se guardan en una partición dedicada (como se hace habitualmente en los sistemas de archivos recomendados por UNIX , donde normalmente se almacenan en la partición /var), el desfragmentador funciona mejor, ya que no necesita tratar con todos los archivos estáticos de otros directorios. (Alternativamente, se le puede indicar a un desfragmentador que simplemente excluya ciertas rutas de archivo). Para particiones con relativamente poca actividad de escritura, el tiempo de desfragmentación mejora en gran medida después de la primera desfragmentación, ya que el desfragmentador necesitará desfragmentar solo una pequeña cantidad de archivos nuevos en el futuro.
La presencia de archivos de sistema inamovibles, especialmente un archivo de intercambio , puede impedir la desfragmentación. Estos archivos se pueden mover de forma segura cuando el sistema operativo no está en uso. Por ejemplo, ntfsresize mueve estos archivos para cambiar el tamaño de una partición NTFS . La herramienta PageDefrag podría desfragmentar archivos de sistema de Windows, como el archivo de intercambio y los archivos que almacenan el registro de Windows , ejecutándose en el momento del arranque antes de que se cargue la GUI. Desde Windows Vista, la función no es totalmente compatible y no se ha actualizado.
En NTFS, a medida que se agregan archivos al disco, la tabla maestra de archivos (MFT) debe crecer para almacenar la información de los nuevos archivos. Cada vez que la MFT no se puede ampliar debido a que algún archivo está en el camino, la MFT ganará un fragmento. En las primeras versiones de Windows, no se podía desfragmentar de forma segura mientras la partición estaba montada, por lo que Microsoft escribió un bloqueo duro en la API de desfragmentación . Sin embargo, desde Windows XP , un número cada vez mayor de desfragmentadores ahora pueden desfragmentar la MFT, porque la API de desfragmentación de Windows se ha mejorado y ahora admite esa operación de movimiento. [5] Incluso con las mejoras, los primeros cuatro clústeres de la MFT permanecen inamovibles por la API de desfragmentación de Windows, lo que da como resultado el hecho de que algunos desfragmentadores almacenarán la MFT en dos fragmentos: los primeros cuatro clústeres donde sea que se colocaron cuando se formateó el disco, y luego el resto de la MFT al comienzo del disco (o donde sea que la estrategia del desfragmentador considere que es el mejor lugar).
Al leer datos de una unidad de disco duro electromecánica convencional, el controlador del disco primero debe posicionar el cabezal, relativamente lentamente, en la pista donde reside un fragmento determinado, y luego esperar mientras el plato del disco gira hasta que el fragmento llega al cabezal. Una unidad de estado sólido (SSD) se basa en una memoria flash sin partes móviles, por lo que el acceso aleatorio a un fragmento de archivo en la memoria flash no sufre este retraso, lo que hace innecesaria la desfragmentación para optimizar la velocidad de acceso. Además, dado que la memoria flash solo se puede escribir un número limitado de veces antes de que falle, la desfragmentación es realmente perjudicial (excepto en la mitigación de fallas catastróficas ). Sin embargo, Windows todavía desfragmenta un SSD automáticamente (aunque con menos vigor) para evitar que el sistema de archivos alcance su tolerancia máxima de fragmentación (cuando los metadatos no pueden representar más fragmentos de archivos). Una vez que se alcanza el límite máximo de fragmentación, los intentos posteriores de escribir en el disco fallan. [6]
Aunque muchos discos duros SMR aceptan el comando TRIM , aún necesitan desfragmentación para mejorar el rendimiento. [ cita requerida ]
e2defrag
, que no funciona con su sucesor ext3. Sin embargo, otros programas, o independientes del sistema de archivos como defragfs
, [17] se pueden utilizar para desfragmentar un sistema de archivos ext3. ext4 es algo compatible con versiones anteriores de ext3 y, por lo tanto, generalmente tiene la misma cantidad de soporte de los programas de desfragmentación. Actualmente, e4defrag se puede utilizar para desfragmentar un sistema de archivos ext4, incluida la desfragmentación en línea.fsadm
utilidad que incluye operaciones de desfragmentación.defragfs
utilidad en sistemas operativos IBM. [18]reallocate
tiene un comando llamado que está diseñado para desfragmentar archivos grandes.xfs_fsr
.del disco duro es considerablemente más rápido que el final, ¡a veces hasta en un 200 por ciento! Puede medir esto usted mismo con utilidades como *HD Tune. Por lo tanto, MyDefrag está orientado a mover todos los archivos al comienzo del disco.
{{cite web}}
: CS1 maint: estado de la URL ( enlace ){{cite web}}
: CS1 maint: estado de la URL ( enlace )Como hemos visto, un volumen HFS+ parece resistir bastante bien la fragmentación en Mac OS X 10.3.x, y no creo que la fragmentación sea un problema lo suficientemente grave como para requerir soluciones proactivas (como una herramienta de desfragmentación).