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[1]​ cuando los bloques (el espacio) asignados a los archivos están en su mayor parte vacíos.[2]

Un archivo disperso: Los bytes en blanco no necesitan guardarse, sino que pueden ser representados por metadatos. De esta forma, solo se guarda la información en sí y la situación en la que se encuentran los espacios.

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,[3]​ 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 editar

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 editar

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 editar

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 editar

El comando Unix:

dd if=/dev/null of=archivo-disperso-file bs=1k seek=5120

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:

truncate -s 5M <nombredearchivo>

Detección editar

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

du -B1 archivo-disperso

con

ls -l archivo-disperso

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

Copia editar

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

cp archivo-disperso nuevo-archivo

y nuevo-archivo será disperso. Sin embargo, el comando cp de GNU tiene una opción --sparse=WHEN.[4]​ 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:

cp --sparse=always anterior-archivo-disperso archivo-disperso-recuperado

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[5]​ 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.

Uso de tuberías editar

cat algúarchivo | cp --sparse=always /proc/self/fd/0 nuevo-archivo-disperso

Véase también editar

Referencias editar

  1. Microsoft. «Descripción del tamaño de los archivos dispersos en instantáneas de bases de datos». Consultado el 11 de septiembre de 2011. 
  2. Universidad de Jaén. «Tema 7: Archivos dispersos». Archivado desde el original el 22 de septiembre de 2010. Consultado el 11 de septiembre de 2011. 
  3. Dominic Giampaolo (1999). Practical File System Design with the Be File System Archivado el 13 de febrero de 2017 en Wayback Machine.. Morgan Kaufmann. ISBN 1-55860-497-9
  4. GNU cp: accept new option to control creation of sparse files
  5. rsync: handle sparse files efficiently

Enlaces externos editar