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.