Archivo disperso

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Un archivo disperso: Los bytes en blanco no necesitan guardarse, sino que pueden ser representados por metadatos. De esta forma, sólo se guarda la información en sí y la situación en la que se encuentran los espacios.

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]

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 sólo 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 sólo 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 (sólo 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]

Enlaces externos[editar]