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[1] cuando los bloques (el espacio) asignados a los archivos están en su mayor parte vacíos.[2]
![](http://up.wiki.x.io/wikipedia/commons/thumb/9/9f/Sparse_file_%28en%29.svg/250px-Sparse_file_%28en%29.svg.png)
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
editarLa 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
editarAlgunos 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
editarLos 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
editarEl 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
editarLos 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
editarNormalmente, 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
editarcat algúarchivo | cp --sparse=always /proc/self/fd/0 nuevo-archivo-disperso
Véase también
editarReferencias
editar- ↑ Microsoft. «Descripción del tamaño de los archivos dispersos en instantáneas de bases de datos». Consultado el 11 de septiembre de 2011.
- ↑ 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.
- ↑ 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
- ↑ GNU cp: accept new option to control creation of sparse files
- ↑ rsync: handle sparse files efficiently
Enlaces externos
editar- Archivos dispersos sobre NTFS para programadores
- Crear archivos dispersos en Windows XP Professional usando fsutil
- Crear archivos dispersos en Solaris usando mkfile
- Understanding Sparse File Sizes in Database Snapshots
- Detección de agujeros en archivos dispersos
- VirtSync es una solución comercial al problema de rsync's
--sparse
and--inplace