¿Por qué la copia de la misma cantidad de datos toma más tiempo si se distribuye en muchos archivos separados?


12

Noté que copiar 24Mb de datos de una carpeta a otra tomó alrededor de 30 segundos porque (supongo que esta es la razón) fue más de 1,000 archivos separados. Copiar 24Mb no debería llevar tanto tiempo. ¿Por qué la cantidad de archivos hace una diferencia?

Estoy ejecutando Windows 7 en una MacBook (4 GB de RAM, Intel (R) Core (TM) 2 Duo CPU P7450 @ 2.13 GHz, sistema operativo de 32 bits)

EDITAR: NTFS es el sistema de archivos utilizado en la unidad

Respuestas:


5

El HDD no tiene una velocidad de transferencia exacta, depende del mantenimiento adecuado, es decir, no está fragmentado, no tiene sectores defectuosos, etc.

Si HDD es SATA 2 y es la misma partición, es solo la velocidad de transferencia de datos.

Si hay dos particiones en el mismo HDD, no se requiere esta transferencia de datos entre el bus y la placa base, es decir, se carga en el búfer. (luego depende del tamaño del búfer del disco duro).

Pero por cada archivo copiado, el sistema debe mantener su índice en la MFT (tabla maestra de archivos) del HDD, lo que hace que el proceso de copia sea más lento si copia muchos archivos. Y si tiene algún antivirus, escaneará cada archivo copiado. Y si ha habilitado la indexación de archivos de Microsoft Search (o cualquier otro servicio de indexación de archivos), el resultado será peor.

Creo que debe haber muchas otras razones por las cuales la copia de muchos archivos es más lenta, pero estas deberían ser las principales.


La desactivación del programa antivirus hizo que el extracto fuera 10 veces más rápido. Después de eso escaneé los archivos en busca de virus.
fat_mike

30

¿Por qué la cantidad de archivos hace una diferencia?

Aparentemente, se está centrando únicamente en el aspecto "copiar los datos" de "copiar un archivo". Un archivo es más que solo los datos; Es una entidad en un sistema de archivos . Un archivo tiene un nombre y atributos y permisos. Toda esta información adicional sobre el archivo debe duplicarse junto con los datos cuando se "copia el archivo". Hay una cantidad significativa de E / S de disco para realizar esta sobrecarga del sistema de archivos.

El procedimiento para copiar un (1) archivo en un sistema de archivos genérico sería algo como:

  • Encuentra el archivo fuente en el sistema de archivos. (una)
  • Lea desde el disco la entrada del directorio para el archivo fuente.
  • Verifique los permisos de lectura.
  • Encuentre el archivo de destino en el sistema de archivos. (si)
  • Verifique los permisos de escritura en el directorio de destino.
  • Expanda el directorio si es necesario para acomodar el nuevo archivo. (C)
  • Actualice el directorio en el disco. (c1)
  • Encuentre bloques libres, asígnelos y actualice la tabla nuevamente. (re)
  • Lea los datos del archivo y cópielos en el archivo de destino (es decir, copie el "archivo").
  • Actualice la entrada del directorio para el nuevo archivo con (tamaño y hora). (mi)
  • Actualice el tiempo de acceso de la entrada del directorio de origen. (F)

(a) Como mínimo, esto significa buscar en el directorio actual. O la ruta puede comenzar en la raíz del sistema de archivos, y deben atravesarse varios niveles de directorios.

(b) Como mínimo, esto significa buscar en el directorio actual. O la ruta puede comenzar en la raíz del sistema de archivos, y deben atravesarse varios niveles de directorios. Si el archivo de destino ya existe, determine cómo debe proceder o abortar la copia. Si el archivo de destino no existe, entonces se debe crear una nueva entrada de directorio, y tal vez esto implique expandir el directorio (es decir, sobrecarga de asignación de bloque de archivo (también conocido como clúster) ).

(c) Si el directorio tiene que expandirse, asigne un nuevo bloque encontrando un bloque libre, modifique la tabla de asignación con la nueva asignación y luego escriba los bloques en el disco. Dado que la mayoría de los sistemas de archivos mantienen múltiples copias de la tabla de asignación, eso significa múltiples escrituras en el disco.
(c1) Una vez que se encuentra el directorio de destino, lea el bloque de directorio del disco, modifíquelo con la nueva entrada de directorio para el archivo copiado y luego escriba el bloque en el disco.

(d) Para copiar el archivo, asigne bloques buscando bloques libres, modifique la tabla de asignación con las nuevas asignaciones y luego escriba los bloques en el disco. Dado que la mayoría de los sistemas de archivos mantienen múltiples copias de la tabla de asignación, eso significa múltiples escrituras en el disco. Para mantener la integridad de los datos, el sistema de archivos no puede intentar fusionar (retrasar y fusionar) las operaciones de escritura en disco para directorios y tablas de asignación, sino más bien realizar las operaciones de escritura inmediatamente a medida que los nuevos archivos se crean y se asignan en bloque.

(e) Una vez que la copia de datos se haya completado, actualice la nueva entrada del directorio para el archivo copiado con la longitud de archivo y las marcas de tiempo adecuadas, y luego escriba el bloque de directorio en el disco.

(f) Actualice la entrada del directorio de origen con una nueva marca de tiempo de "acceso" y luego escriba el bloqueo del directorio en el disco.

Entonces, en lugar de solo un archivo, su pregunta es si hacer todo esto por mil archivos podría agregarse al tiempo que lleva copiar solo la porción de datos de los archivos. Si copia solo un archivo de 24 MB, tendrá algo para comparar con su tiempo de copia de mil archivos.

Cuando se realiza una copia de seguridad de un sistema de archivos, rara vez se emplea la copia de archivos individuales a otro sistema de archivos en un disco o partición porque, como ha descubierto, es un proceso bastante lento. Un método más rápido es crear y escribir un único archivo que contenga las entradas del directorio de origen y el contenido del archivo en un formato de archivo especial; los programas de respaldo y el comando * nix 'tar' pueden generar un archivo de este tipo. (Tenga en cuenta que 'tar' solo maneja archivos de almacenamiento y no usa compresión como archivo + utilidades de compresión.) El método más rápido de copia de seguridad es escribir en un dispositivo de bloque (en lugar de un sistema de archivos en un dispositivo), para que el sistema de archivos de origen sea ignorado (tratado como más datos) y se puede realizar una copia de imagen bloque por bloque del dispositivo fuente.


-1

Aquí hay una analogía conceptual:

(Recuerda, querido Internet, que las analogías son defectuosas. No dudes en señalar cómo en los comentarios).

Suposiciones

  • El agente de información transfiere a == un niño, llamémoslo Sam, está moviendo huevos de una canasta a otra canasta.
  • El medio de transferencia de información del == aire, supongo. No es realmente importante aquí.
  • Los huevos provienen de varias especies, como ... dinosaurios ... y míticos animales marinos y dragones bajo el agua. (los huevos pueden ser muy grandes)
  • Tamaño de archivo de volumen de == huevo. Piensa en el huevo de Robin contra el huevo de Dragón.

Analogía:

Entonces Sam tiene que mover los huevos de una canasta a la otra porque trabaja en una granja y quien le da tareas es malo. Hay varios animales que ponen huevos en esta granja, incluidos dragones y bestias marinas míticas; Sam piensa que esto es increíble por varias razones. (no es realmente importante, pero esta es mi analogía)
Sam está relajado junto al río con sus 2 canastas, una de las canastas es la que tiene huevos dentro. Los huevos en la canasta varían en tamaño desde

  • el huevo de un petirrojo ocupando como 100 bytesespacio en la canasta

a

  • Huevos de Kraken, de tamaño aproximado 2.7Gb.

Sam tiene que comenzar a mover los huevos, así que simplemente comienza a agarrar los huevos y a moverlos. Digamos que decide mover primero un huevo de dragón. Ahora el huevo es extremadamente masivo y denso, por lo que le toma un tiempo llevar la cosa a la otra canasta.
Sam mete el huevo del dragón en la otra canasta y está enojado. Eso fue difícil porque la cosa ocupaba mucho espacio; el movimiento de la misma tomó mucho tiempo para un solo huevo.

Sam es un tonto.

Sam vuelve a su primera canasta para agarrar otro huevo. Se da cuenta de que realmente solo tenía 1 grande. Sin embargo, quedan 100,000,000,000 de huevos de robbin.

Como puede ver, la tarde de Sam está arruinada. Su inclinación natural sería que el huevo de dinosaurio debería ser mucho peor para que él tenga que moverse. Eso tiene sentido cuando hablamos de huevos y cestas, pero las computadoras manejan números como 100,000,000,000.

En breve:

La respuesta sobre por qué lleva tanto tiempo mover varios archivos pequeños en comparación con algunos grandes, tiene que ver con el costo asociado con la acción de moverlos. Cuantos más archivos pequeños tenga, más veces será necesario realizar esa acción. Otra forma de ver esto sería hablar sobre la densidad de información.


-2

Lea FAT, vuelva a colocar los cabezales, abra el archivo al cambiar el archivo: todo requiere tiempo


Es una unidad NTFS
Trindaz

En NTFS, todos los datos del archivo (nombre del archivo, fecha de creación, permisos de acceso y contenido) se almacenan como metadatos en la Tabla maestra de archivos. La tabla maestra de archivos (MFT) contiene metadatos sobre cada archivo, directorio y metarchivo en un volumen NTFS. Incluye nombres de archivo, ubicaciones, tamaño y permisos. Una entrada de directorio consta de un nombre de archivo y una "ID de archivo", que es el número de registro que representa el archivo en la tabla maestra de archivos. El ID del archivo también contiene un recuento de reutilización para detectar referencias obsoletas.
Lazy Badger

Entonces, ¿su respuesta a la pregunta se basa en el hecho de que tiene que hacer mucho trabajo adicional creando registros para el nombre del archivo, la ubicación, el tamaño, los permisos, etc.? De ahí viene todo el trabajo extra.
Trindaz

Crear nuevo y leer existente
Lazy Badger
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.