# Desfragmentación

La desfragmentación es el proceso conveniente mediante el cual se acomodan los archivos en un disco para que no se aprecien fragmentos de cada uno de ellos, de tal manera que quede contiguo el archivo y sin espacios dentro del mismo. Al irse escribiendo y borrando archivos continuamente en el disco duro, los fragmentos tienden a no quedar en áreas continuas, así, un archivo puede quedar "partido" en muchos pedazos a lo largo del disco, se dice entonces que el archivo está "fragmentado". Al tener fragmentos de incluso un archivo esparcidos por el disco, se vuelve ineficiente el acceso a los archivos. Los fragmentos de uno o varios archivos es lo que hace factible la desfragmentación.
El problema de almacenamiento no contiguo de los archivos se denomina fragmentación, es conveniente desfragmentar el almacenamiento de los archivos en dispositivos de almacenamiento electromecánicos por el uso del computador. (Los SSD no son mecánicos).
Existen varias estrategias de desfragmentación. Cada sistema operativo puede utilizar una o varias de estas estrategias. Es importante el tipo elegido puesto que cada Sistema Operativo tiene el suyo característico por defecto. La estrategia de desfragmentación ha sido estudiada por los programadores del Sistema Operativo para optimizar la navegación por los archivos al máximo para ese Sistema, es por ello que cada Sistema Operativo tiene una o varias estrategias de desfragmentación que le son más favorables, la elección no es de poca importancia.
La fragmentación es un problema que surge debido al ordenamiento interno de los archivos de un sistema de archivos. Se da muy comúnmente en el sistema operativo Windows aunque también afecta a otras plataformas pero en una escala mucho menor. Existen dos tipos de fragmentación: interna y externa.
En algunos sistemas como Linux la desfragmentación es menos frecuente que en otros sistemas porque la distribución de los archivos en un disco, característico de los mismos, lo hace posible. Desfragmentar no hace que el ordenador compute más rápido, sino que agiliza el proceso de la navegación por los archivos.

## Motivación

La lectura y escritura secuenciales de sistemas de archivos fuertemente fragmentados se ralentiza, debido a que aumenta el tiempo necesario para que los cabezales del disco se muevan entre los fragmentos y esperen a que el disco gire hasta la posición de lectura (véase tiempo de búsqueda y retardo rotacional). Para muchas operaciones comunes, el cuello de botella en la operación de todo el computador es el disco duro; de ahí que el deseo de procesar más eficientemente anime a la desfragmentación. Los vendedores de sistemas operativos a menudo recomiendan la desfragmentación periódica para evitar que la velocidad de acceso al disco se degrade con el tiempo.
Los datos fragmentados también se extienden por el disco más de lo necesario. Por lo tanto, uno puede desfragmentar para agrupar los datos en una zona, antes de dividir una partición en dos o más (por ejemplo, con GNU Parted o PartitionMagic).
La desfragmentación puede aumentar la propia vida del disco duro, al minimizar el movimiento de los cabezales y simplificar las operaciones de acceso a los datos, así como aumentar las posibilidades de recuperación en caso de un fallo.

## Causas

La fragmentación ocurre cuando el sistema operativo no asigna suficiente espacio contiguo para almacenar un archivo completo como una unidad, sino que, en cambio, pone partes de él en huecos entre otros archivos (usualmente estos huecos existen porque antes contuvieron un archivo que posteriormente fue borrado por el sistema operativo, o porque este en primer lugar asignó demasiado espacio para un archivo). Los archivos más grandes y el mayor número de archivos también contribuyen a la fragmentación y en consecuencia a la pérdida de rendimiento. La desfragmentación intenta aliviar estos problemas.

## Fragmentación

La fragmentación es la memoria que queda desperdiciada al usar los métodos de gestión de memoria. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa (conocidos como estrategias de Colocación).
La fragmentación es generada cuando durante el reemplazo de procesos quedan huecos entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar ningún proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente, pero se requeriría de un proceso de desfragmentación de memoria o compactación para lograrlo. Esta fragmentación se denomina fragmentación externa.
Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es generada cuando se reserva más memoria de la que el proceso va realmente a usar. Sin embargo a diferencia de la externa, estos huecos no se pueden compactar para ser utilizados. Se debe de esperar a la finalización del proceso para que se libere el bloque completo de la memoria.

### Fragmentación interna

La fragmentación interna es la pérdida de espacio en disco debido al hecho de que el tamaño de un determinado archivo sea inferior al tamaño del clúster, ya que teóricamente el archivo estaría obligado a ser referenciado como un clúster completo. Los clústeres son contiguos de forma que desde el último bit del archivo situado en el clúster "a" hasta el primer bit del archivo situado en el clúster contiguo (es decir "b") queda un espacio sobrante siempre teniendo la condición de que el archivo del clúster "a" fuera más pequeño que el clúster en sí.
Por eso se sugiere no disponer de un gran tamaño de partición en los discos nuevos donde la capacidad es muy importante. Por ejemplo si nuestro clúster es de 18 KB (18.432 bytes) por más que un archivo ocupe menos, en nuestro disco ocupara 18KB. Esto sugiere una pérdida de ese espacio que dice utilizar pero no utiliza.
Por eso, en nuestro ejemplo, un archivo de 3 KB ocupará en nuestro disco lo mismo que uno de 10 KB, o sea 18 KB. Esa pérdida de espacio se denomina fragmentación interna, y no se corrige con el desfragmentador, sino disminuyendo el tamaño del clúster, algo que habitualmente los usuarios solo pueden conseguir creando particiones más pequeñas.

### Fragmentación externa

Este tipo de fragmentación aparece como consecuencia de las distintas políticas de ajuste de bloques que tiene un sistema de ficheros, o al utilizar asignaciones dinámicas de bloques en el caso de la memoria. En el sistema de ficheros, la sucesiva creación y eliminación de ficheros de distintos tamaños puede conducir al aislamiento de los bloques libres de un disco y, dependiendo de la política de ajuste, su no elección para futuros ficheros.
En la memoria del sistema la fragmentación se produce cuando los procesos asignados han ocupado posiciones no contiguas de memoria dejando demasiados bloques libres de pequeño tamaño, en los que no "caben" nuevos procesos.
En sistemas de ficheros la desfragmentación trata de resolver este problema, alineando los bloques de datos contiguos y juntando los bloques libres, produciendo así fragmentos mayores que sí serán elegidos para futuros ficheros. En la memoria principal se soluciona compactando los procesos para que estos ocupen posiciones contiguas y dejar los bloques libres juntos, o también se soluciona con la paginación de memoria.

## Desfragmentación

Este proceso consiste en ordenar los trozos de información distribuida a través de todo el disco, para mejorar la velocidad de acceso y distribuir de mejor forma el espacio libre del dispositivo. Como este proceso consiste en la reorganización de partes de archivos, requiere de suficiente memoria para realizar los movimientos de los trozos de información. Al mover en forma física la información, la estructura lógica no sufre alteraciones.

### Aspectos de la desfragmentación

En Windows la presencia de archivos inamovibles del sistema, o que el desfragmentador no moverá para simplificar su tarea (sobre todo con el archivo de intercambio, o swap file), puede impedir un buen porcentaje de desfragmentación en el disco.
Ciertos sistemas de archivos son más susceptibles a cambios por desfragmentación que otros. Por ejemplo, una partición del tipo FAT se fragmenta más rápido que una de partición del tipo NTFS (Windows), EXT 4 (Linux) o HFS + (MacOSX).

## Contramedidas comunes
### Particionado

Una estrategia común para optimizar la desfragmentación y reducir el impacto de la fragmentación es particionar el/los disco(s) duro(s) para separar las particiones del sistema de archivos que experimentan muchas más lecturas y escrituras, de las zonas más volátiles, donde se crean y borran frecuentemente los archivos. En Windows de Microsoft, el contenido de directorios tales como "\Archivos de programas" o "\Windows" se modifica con mucha menor frecuencia que la de sus lecturas. Los directorios que contienen los perfiles de los usuarios se modifican constantemente (especialmente el directorio Temp y el cache del Explorador de Internet, que crea miles de archivos que se borran en unos cuantos días). Si los archivos de los perfiles de los usuarios se mantienen en una partición dedicada (como se hace comúnmente en los sistemas UNIX), el desfragmentador funciona mejor, pues no tiene que tratar con todos los archivos estáticos de los otros directorios. En las particiones con relativamente poca actividad, el rendimiento de la desfragmentación mejora grandemente después de la primera de ellas, pues en el futuro el desfragmentador sólo tendrá que desfragmentar un pequeño número de nuevos archivos.

## Problemas
### Archivos inamovibles

La presencia de archivos de sistema inamovibles, especialmente un archivo de intercambio, puede dificultar la desfragmentación. Estos archivos se pueden mover con seguridad cuando el sistema operativo no está funcionando. Por ejemplo, ntfsresize mueve estos archivos para cambiar el tamaño de una partición NTFS.

### Crecimiento de la fragmentación

En sistemas sin resistencia a la fragmentación, esta crece por sí misma si no se hace nada, así que es necesaria la desfragmentación periódica para mantener el rendimiento del disco al máximo y evitar la sobrecarga de desfragmentaciones menos frecuentes.

## Aproximación y desfragmentadores según el tipo de sistema

Los programas de desfragmentación, por lo general, vienen incorporados al sistema operativo (excepto en Windows NT 4). También existen aplicaciones externas, las cuales poseen opciones más avanzadas que las propuestas por los fabricantes del sistema operativo.
El desfragmentador más conocido es el Defrag, que es usado en MS-DOS y en las plataformas de Windows (en estas últimas con el nombre de "Desfragmentador de disco"). Puede ser encontrado en las versiones de Windows en Inicio -> Programas -> Accesorios -> Herramientas de Sistema.

### Desfragmentadores según tipo de partición del sistema

* FAT: Los sistemas DOS 6.x y Windows 9x vienen con una utilidad de desfragmentación llamada Defrag. La de DOS es una versión limitada de SpeedDisk de Norton[6], y la de Windows es una versión con licencia de Diskeeper.
* NTFS: Windows 2000 y posteriores incluyen una herramienta de desfragmentación basada en Diskeeper. NT 4 y anteriores no incorporan utilidades de desfragmentación. Desafortunadamente, el desfragmentador integrado no consolida el espacio libre. Por lo tanto una unidad fuertemente fragmentada con muchos archivos pequeños puede no tener grandes espacios libres consecutivos después de la desfragmentación. Así, cualquier nuevo archivo grande instantáneamente será dividido en fragmentos pequeños, con un impacto inmediato en el rendimiento. Esto puede ocurrir incluso si el espacio usado en el disco es inferior al 60%.[7]
* ext2 (Linux) usa un desfragmentador externo llamado e2defrag, el cual no funciona con su sucesor ext3, a menos que este sistema de archivos se convierta temporalmente en ext2. En su lugar se puede usar un desfragmentador independiente del sistema de archivos, tal como Shake.
* vxfs tiene una utilidad, fsadm, pensada para realizar también operaciones de desfragmentación.
* JFS tiene una utilidad, defragfs, en los sistemas operativos de IBM.
* HFS Plus (MAC OS X) introdujo en 1998 un número de optimizaciones a los algoritmos de asignación, en un intento de desfragmentar los archivos mientras se accedía a ellos, sin un desfragmentador separado. Si el sistema de archivos se vuelve fragmentado, la única manera de desfragmentarlo es adquirir iDefrag de Coriolis System.
* WAFL en el sistema operativo ONTAP 7.2 de NetApp tiene un comando llamado reallocate, diseñado para desfragmentar archivos grandes.
* XFS proporciona una utilidad de desfragmentación en línea, llamada xfs_fsr.
* SFS procesa la característica de desfragmentación de manera casi completamente desnacionalizada (aparte de la ubicación donde está funcionando), así que la desfragmentación se puede detener e iniciar instantáneamente.