Pourquoi la copie de la même quantité de données prend-elle plus de temps si elle est répartie sur plusieurs fichiers distincts?
12
J'ai remarqué que la copie de 24 Mo de données d'un dossier à un autre prenait environ 30 secondes car (je suppose que c'est la raison), il s'agissait de plus de 1 000 fichiers distincts. La copie de 24 Mo ne devrait pas prendre autant de temps. Pourquoi le nombre de fichiers change-t-il?
J'utilise Windows 7 sur un MacBook (4 Go de RAM, processeur Intel (R) Core (TM) 2 Duo P7450 à 2,13 GHz, système d'exploitation 32 bits)
EDIT: NTFS est le système de fichiers utilisé sur le lecteur
Le disque dur n'a pas un taux de transfert exact, cela dépend d'une bonne maintenance, c'est-à-dire qu'il n'est pas fragmenté, n'a pas de mauvais secteurs, etc ...
Si le disque dur est SATA 2 et qu'il s'agit de la même partition, ce n'est que la vitesse de transfert des données.
S'il y a deux partitions sur le même disque dur, ce transfert de données entre le bus et la carte mère n'est pas requis, c'est-à-dire qu'il se charge dans le tampon. (dépend alors de la taille du tampon hdd.)
Mais pour chaque fichier copié, le système doit conserver son index dans le MFT (Master File Table) du disque dur, ce qui ralentit le processus de copie si vous copiez de nombreux fichiers. Et si vous avez un antivirus, il analysera chaque fichier copié. Et si vous avez activé l'indexation des fichiers de recherche Microsoft (ou tout autre service d'indexation de fichiers), le résultat sera pire.
Je pense qu'il doit y avoir de nombreuses autres raisons pour lesquelles la copie de nombreux fichiers est plus lente, mais celles-ci devraient être la principale.
La désactivation du programme antivirus a rendu l'extrait 10 fois plus rapide. Après cela, les fichiers ont été analysés pour détecter les virus.
fat_mike
30
Pourquoi le nombre de fichiers change-t-il?
Apparemment, vous vous concentrez uniquement sur l'aspect "copier les données" de "copier un fichier". Un fichier, c'est plus que des données; c'est une entité dans un système de fichiers . Un fichier a un nom, des attributs et des autorisations. Toutes ces informations supplémentaires sur le fichier doivent être dupliquées avec les données lorsque le "fichier est copié". Il existe une quantité importante d'E / S disque pour effectuer cette surcharge du système de fichiers.
La procédure pour copier un (1) fichier dans un système de fichiers générique serait quelque chose comme:
Recherchez le fichier source dans le système de fichiers. (une)
Lisez à partir du disque l'entrée de répertoire du fichier source.
Vérifiez les autorisations de lecture.
Recherchez le fichier de destination dans le système de fichiers. b)
Vérifiez les autorisations d'écriture dans le répertoire de destination.
Développez le répertoire si nécessaire pour accueillir le nouveau fichier. (c)
Mettez à jour le répertoire sur le disque. (c1)
Trouvez des blocs libres, allouez-les et mettez à jour la table à nouveau. (ré)
Lire les données du fichier et les copier dans le fichier de destination (c'est-à-dire copier le "fichier").
Mettez à jour l'entrée de répertoire du nouveau fichier avec (taille et heure). e)
Mettez à jour le temps d'accès de l'entrée du répertoire source. (F)
(a) À tout le moins, cela signifie rechercher dans le répertoire courant. Ou le chemin peut commencer à la racine du système de fichiers, et plusieurs niveaux de répertoires doivent être parcourus.
(b) Cela signifie au minimum une recherche dans le répertoire courant. Ou le chemin peut commencer à la racine du système de fichiers, et plusieurs niveaux de répertoires doivent être parcourus. Si le fichier de destination existe déjà, déterminez comment procéder ou abandonner la copie. Si le fichier de destination n'existe pas, une nouvelle entrée de répertoire doit être créée, et peut-être cela implique-t-il d'étendre le répertoire (c'est-à-dire la surcharge d'allocation de bloc de fichiers (aka cluster) ).
(c) Si le répertoire doit être développé, allouez un nouveau bloc en trouvant un bloc libre, modifiez la table d'allocation avec la nouvelle allocation, puis écrivez le ou les blocs sur le disque. Comme la plupart des systèmes de fichiers conservent plusieurs copies de la table d'allocation, cela signifie plusieurs écritures sur le disque. (c1) Une fois le répertoire de destination localisé, lisez le bloc de répertoire à partir du disque, modifiez- le avec la nouvelle entrée de répertoire pour le fichier copié, puis écrivez le bloc sur le disque.
(d) Afin de copier le fichier, allouez des blocs en trouvant des blocs libres, modifiez la table d'allocation avec les nouvelles allocations, puis écrivez le ou les blocs sur le disque. Comme la plupart des systèmes de fichiers conservent plusieurs copies de la table d'allocation, cela signifie plusieurs écritures sur le disque. Afin de maintenir l'intégrité des données, le système de fichiers peut ne pas essayer de fusionner (retarder et fusionner) les opérations d' écriture sur disque pour les répertoires et les tables d'allocation, mais plutôt effectuer les opérations d'écriture immédiatement à mesure que les nouveaux fichiers sont créés et alloués par blocs.
(e) Une fois la copie des données terminée, mettez à jour la nouvelle entrée de répertoire pour le fichier copié avec la longueur de fichier et les horodatages appropriés, puis écrivez le bloc de répertoire sur le disque.
(f) Mettez à jour l'entrée du répertoire source avec un nouvel horodatage "d'accès", puis écrivez le bloc de répertoire sur le disque.
Donc, au lieu d'un seul fichier, votre question est de savoir si le fait de faire tout cela pour mille fichiers pourrait allonger le temps nécessaire pour copier simplement la partie des données des fichiers? Si vous copiez un seul fichier de 24 Mo, vous aurez quelque chose à comparer avec votre temps de copie de mille fichiers.
Lors de la sauvegarde d' un système de fichiers, la copie des fichiers individuels vers un autre système de fichiers sur un disque ou une partition est rarement utilisée car c'est un processus assez lent comme vous l'avez découvert. Une méthode plus rapide consiste à créer et à écrire un fichier d' archive unique qui contient les entrées du répertoire source et le contenu du fichier dans un format de fichier spécial; les programmes de sauvegarde et la commande * nix 'tar' peuvent sortir un tel fichier d'archive. (Notez que 'tar' ne gère que les fichiers d'archive et n'utilise pas la compression comme les utilitaires d'archivage + compression.) La méthode de sauvegarde la plus rapide consiste à écrire sur un périphérique de bloc (plutôt qu'un système de fichiers sur un périphérique), de sorte que le système de fichiers source soit ignoré (traité comme plus de données) et une copie d'image bloc par bloc du périphérique source peut être effectuée.
(rappelez-vous, cher Internet, que les analogies sont erronées. N'hésitez pas à indiquer comment dans les commentaires.)
Hypothèses:
L'agent d'information transfère ==un gamin, appelons-le Sam, déplace des œufs d'un panier dans un autre.
Le moyen de transfert d'informations, ==je suppose. Pas vraiment important ici.
Les œufs proviennent de diverses espèces, comme des ... dinosaures ... et des animaux marins et dragons sous-marins mythiques. (les œufs peuvent être vraiment gros)
Volume d'oeuf de la taille d'un fichier ==. Pensez à l'œuf de robbin par rapport à l'œuf de draggon.
Analogie:
Sam doit donc déplacer les œufs d'un panier à l'autre car il travaille dans une ferme et quiconque lui confie des tâches est méchant. Il y a divers animaux pondeurs sur cette ferme, y compris des dragons et des bêtes de mer mythiques; Sam pense que c'est génial pour plusieurs raisons. (pas vraiment important mais c'est mon analogie)
Sam est au bord de la rivière avec ses 2 paniers, l'un des paniers est celui avec des œufs à l'intérieur. Les œufs dans le panier varient en taille de
un œuf de poubelle prenant comme un 100 bytesespace dans le panier
à
Oeufs de Kraken, de taille environ 2.7Gb.
Sam doit commencer à déplacer des œufs, alors il commence juste à saisir des œufs et à les déplacer. Disons qu'il décide de déplacer d'abord un œuf de dragon. Maintenant, l'œuf est extrêmement massif et dense, il lui faut donc un certain temps pour tirer la chose dans l'autre panier.
Sam met l'œuf du dragon dans l'autre panier et il est énervé. C'était difficile parce que la chose prenait tellement de place; son déplacement a pris trop de temps pour un seul œuf.
Sam est un imbécile.
Sam retourne à son 1er panier pour attraper un autre œuf. Il se rend compte qu'il n'en avait vraiment qu'un seul. Il reste cependant 100 000 000 000 d'œufs de poubelle.
Comme vous pouvez le voir, l'après-midi de Sam est ruiné. Son inclination naturelle serait que l'œuf de dinosaure soit bien pire pour lui d'avoir à bouger. Cela a du sens lorsque nous parlons d'œufs et de paniers, mais les ordinateurs se chiffrent à 100 000 000 000.
En bref:
La réponse à la raison pour laquelle il faut tellement plus de temps pour déplacer plusieurs petits fichiers par rapport à quelques gros fichiers, a à voir avec le coût associé à l'action de les déplacer. Plus vous avez de petits fichiers, plus cette action devra être préformée. Une autre façon de voir les choses serait de parler de la densité de l'information.
Dans NTFS, toutes les données de fichier (nom de fichier, date de création, autorisations d'accès et contenu) sont stockées en tant que métadonnées dans la table de fichiers principale. La table de fichiers maîtres (MFT) contient des métadonnées sur chaque fichier, répertoire et métafichier sur un volume NTFS. Il inclut les noms de fichiers, les emplacements, la taille et les autorisations. Une entrée de répertoire se compose d'un nom de fichier et d'un "ID de fichier" qui est le numéro d'enregistrement représentant le fichier dans la table de fichiers maîtres. L'ID de fichier contient également un nombre de réutilisation pour détecter les références périmées.
Lazy Badger
Votre réponse à la question est-elle donc basée sur le fait qu'il doit faire beaucoup de travail supplémentaire en créant des enregistrements pour le nom de fichier, l'emplacement, la taille, les autorisations, etc.? C'est de là que vient tout le travail supplémentaire.
Apparemment, vous vous concentrez uniquement sur l'aspect "copier les données" de "copier un fichier". Un fichier, c'est plus que des données; c'est une entité dans un système de fichiers . Un fichier a un nom, des attributs et des autorisations. Toutes ces informations supplémentaires sur le fichier doivent être dupliquées avec les données lorsque le "fichier est copié". Il existe une quantité importante d'E / S disque pour effectuer cette surcharge du système de fichiers.
La procédure pour copier un (1) fichier dans un système de fichiers générique serait quelque chose comme:
(a) À tout le moins, cela signifie rechercher dans le répertoire courant. Ou le chemin peut commencer à la racine du système de fichiers, et plusieurs niveaux de répertoires doivent être parcourus.
(b) Cela signifie au minimum une recherche dans le répertoire courant. Ou le chemin peut commencer à la racine du système de fichiers, et plusieurs niveaux de répertoires doivent être parcourus. Si le fichier de destination existe déjà, déterminez comment procéder ou abandonner la copie. Si le fichier de destination n'existe pas, une nouvelle entrée de répertoire doit être créée, et peut-être cela implique-t-il d'étendre le répertoire (c'est-à-dire la surcharge d'allocation de bloc de fichiers (aka cluster) ).
(c) Si le répertoire doit être développé, allouez un nouveau bloc en trouvant un bloc libre, modifiez la table d'allocation avec la nouvelle allocation, puis écrivez le ou les blocs sur le disque. Comme la plupart des systèmes de fichiers conservent plusieurs copies de la table d'allocation, cela signifie plusieurs écritures sur le disque.
(c1) Une fois le répertoire de destination localisé, lisez le bloc de répertoire à partir du disque, modifiez- le avec la nouvelle entrée de répertoire pour le fichier copié, puis écrivez le bloc sur le disque.
(d) Afin de copier le fichier, allouez des blocs en trouvant des blocs libres, modifiez la table d'allocation avec les nouvelles allocations, puis écrivez le ou les blocs sur le disque. Comme la plupart des systèmes de fichiers conservent plusieurs copies de la table d'allocation, cela signifie plusieurs écritures sur le disque. Afin de maintenir l'intégrité des données, le système de fichiers peut ne pas essayer de fusionner (retarder et fusionner) les opérations d' écriture sur disque pour les répertoires et les tables d'allocation, mais plutôt effectuer les opérations d'écriture immédiatement à mesure que les nouveaux fichiers sont créés et alloués par blocs.
(e) Une fois la copie des données terminée, mettez à jour la nouvelle entrée de répertoire pour le fichier copié avec la longueur de fichier et les horodatages appropriés, puis écrivez le bloc de répertoire sur le disque.
(f) Mettez à jour l'entrée du répertoire source avec un nouvel horodatage "d'accès", puis écrivez le bloc de répertoire sur le disque.
Donc, au lieu d'un seul fichier, votre question est de savoir si le fait de faire tout cela pour mille fichiers pourrait allonger le temps nécessaire pour copier simplement la partie des données des fichiers? Si vous copiez un seul fichier de 24 Mo, vous aurez quelque chose à comparer avec votre temps de copie de mille fichiers.
Lors de la sauvegarde d' un système de fichiers, la copie des fichiers individuels vers un autre système de fichiers sur un disque ou une partition est rarement utilisée car c'est un processus assez lent comme vous l'avez découvert. Une méthode plus rapide consiste à créer et à écrire un fichier d' archive unique qui contient les entrées du répertoire source et le contenu du fichier dans un format de fichier spécial; les programmes de sauvegarde et la commande * nix 'tar' peuvent sortir un tel fichier d'archive. (Notez que 'tar' ne gère que les fichiers d'archive et n'utilise pas la compression comme les utilitaires d'archivage + compression.) La méthode de sauvegarde la plus rapide consiste à écrire sur un périphérique de bloc (plutôt qu'un système de fichiers sur un périphérique), de sorte que le système de fichiers source soit ignoré (traité comme plus de données) et une copie d'image bloc par bloc du périphérique source peut être effectuée.
la source
Voici une analogie conceptuelle:
(rappelez-vous, cher Internet, que les analogies sont erronées. N'hésitez pas à indiquer comment dans les commentaires.)
Hypothèses:
==
un gamin, appelons-le Sam, déplace des œufs d'un panier dans un autre.==
je suppose. Pas vraiment important ici.==
. Pensez à l'œuf de robbin par rapport à l'œuf de draggon.Analogie:
Sam doit donc déplacer les œufs d'un panier à l'autre car il travaille dans une ferme et quiconque lui confie des tâches est méchant. Il y a divers animaux pondeurs sur cette ferme, y compris des dragons et des bêtes de mer mythiques; Sam pense que c'est génial pour plusieurs raisons. (pas vraiment important mais c'est mon analogie)
Sam est au bord de la rivière avec ses 2 paniers, l'un des paniers est celui avec des œufs à l'intérieur. Les œufs dans le panier varient en taille de
100 bytes
espace dans le panierà
2.7Gb
.Sam doit commencer à déplacer des œufs, alors il commence juste à saisir des œufs et à les déplacer. Disons qu'il décide de déplacer d'abord un œuf de dragon. Maintenant, l'œuf est extrêmement massif et dense, il lui faut donc un certain temps pour tirer la chose dans l'autre panier.
Sam met l'œuf du dragon dans l'autre panier et il est énervé. C'était difficile parce que la chose prenait tellement de place; son déplacement a pris trop de temps pour un seul œuf.
Sam est un imbécile.
Sam retourne à son 1er panier pour attraper un autre œuf. Il se rend compte qu'il n'en avait vraiment qu'un seul. Il reste cependant 100 000 000 000 d'œufs de poubelle.
Comme vous pouvez le voir, l'après-midi de Sam est ruiné. Son inclination naturelle serait que l'œuf de dinosaure soit bien pire pour lui d'avoir à bouger. Cela a du sens lorsque nous parlons d'œufs et de paniers, mais les ordinateurs se chiffrent à 100 000 000 000.
En bref:
La réponse à la raison pour laquelle il faut tellement plus de temps pour déplacer plusieurs petits fichiers par rapport à quelques gros fichiers, a à voir avec le coût associé à l'action de les déplacer. Plus vous avez de petits fichiers, plus cette action devra être préformée. Une autre façon de voir les choses serait de parler de la densité de l'information.
la source
Lire FAT, repositionner les têtes, ouvrir un fichier sur un fichier en changement - tout cela demande du temps
la source