Archivo disperso
# Archivo disperso

En informática, un archivo disperso es un tipo de archivo de ordenador que intenta utilizar más eficientemente el espacio del sistema de archivos cuando los bloques (el espacio) asignados a los archivos están en su mayor parte vacíos.

Esto se consigue escribiendo una breve información (metadatos) representando los bloques vacíos en el disco en vez del verdadero espacio "vacío" que constituye el bloque, utilizando así menos espacio en disco. El tamaño del bloque completo se escribe en el disco como el tamaño real solo cuando el bloque contiene "datos reales" (no vacíos). Al leer los archivos dispersos, el sistema de archivos de forma transparente convierte los metadatos que representan los bloques vacíos en bloques llenos de bytes ceros en tiempo de ejecución, por lo que la aplicación no es consciente de esta conversión.

La mayoría de los sistemas de archivos modernos soportan archivos dispersos, incluyendo la mayoría de variantes de Unix y NTFS, pero no de HFS+. Los archivos dispersos se utilizan comúnmente para imágenes de disco, copia de bases de datos, archivos de registro y en aplicaciones científicas.

## Ventajas

La ventaja de los archivos dispersos es que el almacenamiento solo se asigna cuando realmente se necesita: el espacio de disco se guarda, y se pueden crear archivos de gran tamaño incluso si no hay suficiente espacio libre en el sistema de archivos.

## Desventajas

Algunos de los principales inconvenientes son:

* Los archivos pueden ser fragmentados ya que el espacio en el sistema de archivos se asigna a medida que los huecos están llenos, y no están necesariamente contiguos.
* La información sobre el espacio libre en el sistema de archivos puede ser engañosa si se tiene en cuenta el tamaño aparente de los archivos dispersos.
* Quedarse sin espacio libre en los sistemas de archivos que contienen los archivos dispersos puede causar efectos no deseados.

## Archivos dispersos en Unix

Los archivos dispersos se manejan de forma transparente para el usuario. Pero las diferencias entre un archivo normal y un archivo disperso pueden llegar a ser visibles en algunas situaciones.

### Creación

El comando Unix:

creará un archivo de cinco megabytes de tamaño, pero sin almacenar datos en el disco (solo metadatos). (GNU dd tiene este comportamiento porque llama a ftruncate para establecer el tamaño de archivo; otras implementaciones pueden crear un archivo vacío.)

De la misma forma, si está disponible, puede usarse el comando truncate:

### Detección

Los archivos dispersos tienen un tamaño aparente distinto del tamaño real. Esto se puede detectar comparando la salida de

con

(Algunos sistemas no soportan la opción -B1 ; Puede utilizarse du -k, que reporta la información en kibibytes.)

### Copia

Normalmente, la versión GNU de cp es buena detectando si el archivo es disperso, así que basta con ejecutar:

y nuevo-archivo será disperso. Sin embargo, el comando cp de GNU tiene una opción --sparse=WHEN. Esto es especialmente útil si el archivo disperso de alguna manera deja de serlo (p.e. los bloques vacíos se han escrito a disco en su totalidad). El espacio en disco puede recuperarse haciendo:

La mayoría de las implementaciones cp no soportan la opción --sparse y siempre expandirán los archivos dispersos, como el comando cp de FreeBSD. Una alternativa parcialmente viable para estos sistemas es utilizar rsync con su propia opción --sparse en vez de cp. Desafortunadamente no se puede combinar --sparse con --inplace, así que aplicar rsync sobre archivos de mucho tamaño sobre la red será siempre una pérdida tanto de ancho de banda en red como en disco.

