stringtranslate.com

archivo disperso

Un archivo disperso: no es necesario guardar los bytes vacíos y, en su lugar, se pueden representar mediante metadatos .

En informática , un archivo disperso es un tipo de archivo de computadora que intenta utilizar el espacio del sistema de archivos de manera más eficiente cuando el archivo en sí está parcialmente vacío. Esto se logra escribiendo información breve ( metadatos ) que representa los bloques vacíos en el medio de almacenamiento de datos en lugar del espacio "vacío" real que constituye el bloque, consumiendo así menos espacio de almacenamiento. El bloque completo se escribe en el medio como el tamaño real sólo cuando el bloque contiene datos "reales" (no vacíos).

Lo más común es que los archivos dispersos se creen cuando nunca se escriben bloques del archivo. Esto es típico de archivos de acceso aleatorio como bases de datos. Algunos sistemas operativos o utilidades van más allá al "dispersar" archivos al escribirlos o copiarlos: si un bloque contiene sólo bytes nulos, no se escribe en el almacenamiento sino que se marca como vacío.

Al leer archivos dispersos, el sistema de archivos convierte de forma transparente los metadatos que representan bloques vacíos en bloques "reales" llenos de bytes nulos en tiempo de ejecución. La aplicación desconoce esta conversión.

La mayoría de los sistemas de archivos modernos admiten archivos dispersos, incluidas la mayoría de las variantes de Unix y NTFS . [1] HFS+ de Apple no brinda soporte para archivos dispersos, pero en OS X, la capa del sistema de archivos virtual admite almacenarlos en cualquier sistema de archivos compatible, incluido HFS+. [ cita necesaria ] Apple File System (APFS) también los admite. [2] Los archivos dispersos se utilizan comúnmente para imágenes de disco , instantáneas de bases de datos , archivos de registro y en aplicaciones científicas.

Ventajas

La ventaja de los archivos dispersos es que el espacio de almacenamiento sólo se asigna cuando realmente se necesita: la capacidad de almacenamiento se conserva y ocasionalmente se pueden crear archivos grandes incluso si no hay suficiente espacio libre disponible en el medio de almacenamiento para el archivo original. Esto también reduce el tiempo de la primera escritura ya que el sistema no tiene que asignar bloques para el espacio "omitido". Si la asignación inicial requiere escribir todos los ceros en el espacio, también evita que el sistema tenga que escribir dos veces sobre el espacio "omitido".

Por ejemplo, una imagen de máquina virtual con un tamaño máximo de 100 GB que tiene 2 GB de archivos realmente escritos requeriría los 100 GB completos cuando esté respaldada por un almacenamiento preasignado, pero solo 2 GB en un archivo disperso. Si el sistema de archivos admite la perforación y el sistema operativo invitado emite comandos TRIM , eliminar archivos en el invitado reducirá en consecuencia el espacio necesario.

Desventajas

Las desventajas son que los archivos dispersos pueden fragmentarse ; los informes de espacio libre del sistema de archivos pueden ser engañosos; llenar sistemas de archivos que contienen archivos dispersos puede tener efectos inesperados (como errores de disco lleno o de cuota excedida cuando simplemente se sobrescribe una parte existente de un archivo que resultó ser disperso); y copiar un archivo disperso con un programa que no los admita explícitamente puede copiar el tamaño completo sin comprimir del archivo, incluidas las secciones cero que no están asignadas en el medio de almacenamiento, perdiendo los beneficios de la propiedad dispersa del archivo. Los archivos dispersos tampoco son totalmente compatibles con todos los programas o aplicaciones de respaldo. Sin embargo, la implementación de VFS evita [ cita necesaria ] las dos desventajas anteriores. La carga de ejecutables en Windows de 32 bits (exe o dll) que son escasos lleva mucho más tiempo ya que el archivo no se puede asignar en memoria en el espacio de direcciones limitado de 4 GB y no se almacena en caché ya que no existe una ruta de código para almacenar en caché ejecutables dispersos de 32 bits ( Windows en arquitecturas de 64 bits puede asignar ejecutables dispersos). [ cita necesaria ] En NTFS, los archivos dispersos (o más bien sus áreas distintas de cero) no se pueden comprimir. NTFS implementa la dispersión como un tipo especial de compresión, por lo que un archivo puede estar disperso o comprimido.

Archivos dispersos en Unix

Los archivos dispersos normalmente se manejan de forma transparente para el usuario. Pero las diferencias entre un archivo normal y un archivo disperso se hacen evidentes en algunas situaciones.

Creación

El comando Unix

dd de = archivo disperso bs = 5M búsqueda = 1 recuento = 0    

creará un archivo de cinco mebibytes de tamaño, pero sin datos almacenados en el medio (solo metadatos ). ( GNU dd tiene este comportamiento porque llama ftruncatepara establecer el tamaño del archivo; otras implementaciones pueden simplemente crear un archivo vacío).

De manera similar, se puede usar el comando truncar, si está disponible:

truncar  -s  5M <  nombre de archivo>

En Linux , un archivo existente se puede convertir a disperso mediante:

fallocate  -d  <nombre de archivo>

No existe una llamada al sistema portátil para perforar agujeros; Linux proporciona fallocate(FALLOC_FL_PUNCH_HOLE)y Solaris proporciona fcntl(F_FREESP).

Detección

La -sopción del lscomando muestra el espacio ocupado en bloques.

ls  -ls  archivo disperso

Alternativamente, el ducomando imprime el espacio ocupado, mientras lsimprime el tamaño aparente. En algunas versiones no estándar de du, la opción {{{1}}} imprime el espacio ocupado en bytes en lugar de bloques, para que pueda compararse con la lssalida:

du  --block-size = 1  archivo dispersols  -l  archivo disperso

Tenga en cuenta que el uso de du anterior tiene el formato de sintaxis de opción abreviada "du -B 1 sf", equivalente a la versión más corta "du -b sf" como se indica en el manual de du: [3] -b, --bytes es equivalente a --apparent-size --block-size=1.

Además, la herramienta filefragdel e2fsprogspaquete se puede utilizar para mostrar los detalles de asignación de bloques del archivo.

filefrag  -v  archivo disperso

Proceso de copiar

Normalmente, la versión GNU cpes buena para detectar si un archivo es disperso, por lo que

cp archivo disperso nuevo archivo

crea un nuevo archivo, que será escaso. Sin embargo, GNU cp tiene una --sparseopción. [4] Esto es especialmente útil si un archivo que contiene bloques cero largos se guarda de forma no dispersa (es decir, los bloques cero se han escrito en el medio de almacenamiento en su totalidad). El espacio de almacenamiento se puede conservar haciendo:

cp --sparse=siempre archivo1 archivo1_sparsed

Algunas implementaciones de cp, como cp de FreeBSD--sparse , no admiten la opción y siempre expandirán archivos dispersos. Una alternativa parcialmente viable en esos sistemas es usar rsync con su propia --sparseopción [5] en lugar de cp. Lamentablemente --sparseno se puede combinar con --inplace. [6] [7] Las versiones más recientes de rsync admiten --sparsela combinación con --inplace. [8]

A través de la entrada estándar , la copia dispersa de archivos se logra de la siguiente manera:

cp  --sparse = siempre  /dev/fd/0  nuevo-archivo-disperso  <  algún archivo

Ver también

Referencias

  1. ^ Giampaolo, Domingo (1999). Diseño práctico de sistemas de archivos con Be File System (PDF) . Editores Morgan Kaufmann . ISBN 9781558604971.
  2. ^ "Guía del sistema de archivos de Apple". Sitio para desarrolladores de Apple . Apple Inc. Consultado el 27 de abril de 2017 .
  3. ^ "Du(1) - Página del manual de Linux".
  4. ^ Meyering, Jim (21 de diciembre de 1995). "GNU coreutils/cp: acepte la nueva opción, --sparse={never,auto,always}, para controlar la creación de archivos dispersos" . Consultado el 17 de junio de 2016 .
  5. ^ Tridgell, Andrew (29 de junio de 1996). "rsync: enlaces físicos, mejor manejo disperso, FERROR y FINFO" . Consultado el 17 de junio de 2016 .
  6. ^ Tridgell, Andrew (30 de junio de 2016). "página de manual de rsync" . Consultado el 19 de enero de 2017 .
  7. ^ Davison, Wayne (30 de agosto de 2005). "rsync: Rechazar intentos de combinar --sparse con --inplace" . Consultado el 19 de enero de 2017 .
  8. ^ Davison, Wayne. "Soporte --sparse combinado con --preallocate o --inplace".

Enlaces externos