stringtranslate.com

Archivo disperso

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

En informática , un archivo disperso es un tipo de archivo informático que intenta utilizar el espacio del sistema de archivos de forma más eficiente cuando el propio archivo está parcialmente vacío. Esto se consigue 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 compone el bloque, consumiendo así menos espacio de almacenamiento. El bloque completo se escribe en el medio con el tamaño real solo 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 los archivos de acceso aleatorio, como las bases de datos. Algunos sistemas operativos o utilidades van más allá y "dispersan" los archivos al escribirlos o copiarlos: si un bloque contiene solo 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 no es consciente de 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 proporciona 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 requerida ] 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 solo se asigna cuando realmente se necesita: se conserva la capacidad de almacenamiento y, ocasionalmente, se pueden crear archivos grandes incluso si no hay suficiente espacio libre disponible para el archivo original en el medio de almacenamiento. 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 sobre el espacio "omitido" dos veces.

Por ejemplo, una imagen de máquina virtual con un tamaño máximo de 100 GB que tiene 2 GB de archivos escritos realmente requeriría los 100 GB completos cuando está respaldada por almacenamiento preasignado, pero solo 2 GB en un archivo disperso. Si el sistema de archivos admite la perforación de orificios y el sistema operativo invitado emite comandos TRIM , la eliminación de 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 los 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 en el archivo. Los archivos dispersos tampoco son totalmente compatibles con todo el software o las aplicaciones de copia de seguridad. Sin embargo, la implementación de VFS evita [ cita requerida ] las dos desventajas anteriores. La carga de ejecutables en Windows de 32 bits (exe o dll) que son dispersos lleva mucho más tiempo ya que el archivo no se puede mapear en memoria en el espacio de dirección limitado de 4 GB y no se almacenan en caché ya que no hay una ruta de código para almacenar en caché ejecutables dispersos de 32 bits (Windows en arquitecturas de 64 bits puede mapear ejecutables dispersos). [ cita requerida ] En NTFS, los archivos dispersos (o más bien sus áreas distintas de cero) no se pueden comprimir. NTFS implementa la escasez como un tipo especial de compresión, por lo que un archivo puede ser disperso o estar comprimido.

Archivos dispersos en Unix

Los archivos dispersos suelen manejarse 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 conteo = 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 utilizar el comando truncar, si está disponible:

truncar  -s  5M  <nombre de archivo>

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

fallocate  -d  <nombre de archivo>

No existe ninguna llamada al sistema portable para hacer 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

Como alternativa, el ducomando imprime el espacio ocupado, mientras que lsimprime el tamaño aparente. En algunas versiones no estándar de du, la opción --block-size=1imprime el espacio ocupado en bytes en lugar de bloques, de modo que se pueda comparar 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 abreviado "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 detalles de asignación de bloques del archivo.

filefrag  -v  archivo disperso

Proceso de copiar

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

cp sparse-file 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 de ceros largos se guarda de forma no espaciada (es decir, los bloques de ceros se han escrito en el medio de almacenamiento en su totalidad). Se puede conservar espacio de almacenamiento haciendo lo siguiente:

cp --sparse=siempre archivo1 archivo1_sparsed

Algunas implementaciones de cp, como cp de FreeBSD , no admiten la --sparseopción y siempre expandirán los 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 nuevas de rsync sí admiten --sparsela combinación con --inplace. [8]

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

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

Véase también

Referencias

  1. ^ Giampaolo, Dominic (1999). Diseño práctico de sistemas de archivos con el sistema de archivos Be (PDF) . Morgan Kaufmann Publishers . 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: Aceptar 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 duros, mejor manejo de datos dispersos, FERROR y FINFO» . Consultado el 17 de junio de 2016 .
  6. ^ Tridgell, Andrew (30 de junio de 2016). «rsync manpage» . 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. "Compatibilidad con --sparse combinado con --preallocate o --inplace".

Enlaces externos