Je dois régulièrement copier le contenu d'un dossier sur un système de fichiers réseau sur mon ordinateur local. Il existe de nombreux fichiers (1 000) sur le dossier distant qui sont tous relativement petits, mais en raison de la surcharge du réseau, une copie régulière cp remote_folder/* ~/local_folder/
prend beaucoup de temps (10 minutes).
Je pense que c'est parce que les fichiers sont copiés séquentiellement - chaque fichier attend que le précédent soit terminé avant de commencer la copie.
Quelle est la manière la plus simple d'augmenter la vitesse de cette copie? (Je suppose que c'est pour effectuer la copie en parallèle.)
Le fait de compresser les fichiers avant de les copier n'accélérera pas nécessairement les choses car ils peuvent tous être enregistrés sur des disques différents sur des serveurs différents.
Réponses:
Tant que vous limitez les commandes de copie que vous exécutez, vous pouvez probablement utiliser un script comme celui publié par Scrutinizer
la source
&
la fin de lacp
commande permet à lawhile
boucle de continuer et de démarrer la prochaine commande cp sans attendre. Laxargs
commande transmet les noms de fichiers par groupes de 4 (MAX_PARALLEL) à lawhile
boucle.cp
. Vous pouvez évidemment accélérer le calcul grâce au multithreading. Mais je ne pense pas qu'il en soit de même pour l'adaptation des données du disque dur.Si vous avez GNU Parallel http://www.gnu.org/software/parallel/ installé, vous pouvez le faire:
Vous pouvez installer GNU Parallel simplement en:
Regardez les vidéos d'introduction pour GNU Parallel pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
la source
Une façon serait d'utiliser rsync qui ne copiera que les modifications - les nouveaux fichiers et les parties modifiées des autres fichiers.
http://linux.die.net/man/1/rsync
L'exécution de toute forme d'opération de copie parallèle inondera probablement votre réseau et l'opération de copie s'arrêtera ou souffrira de goulots d'étranglement sur le disque source ou de destination.
la source
Honnêtement, le meilleur outil est le gsutil de Google. Il gère les copies parallèles avec récursion de répertoire. La plupart des autres méthodes que j'ai vues ne peuvent pas gérer la récursivité des répertoires. Ils ne mentionnent pas spécifiquement le système de fichiers local aux copies du système de fichiers local dans leurs documents, mais cela fonctionne comme un charme.
C'est un autre binaire à installer, mais probablement un que vous pourriez déjà exécuter compte tenu de l'ensemble de l'adoption du service cloud de nos jours.
la source
Rsync parallèle utilisant find:
sur un réseau local d'entreprise, rsync unique fait environ 800 Mbps; avec 6-8 emplois, je peux obtenir plus de 2,5 Gbps (au détriment d'une charge élevée). Limité par les disques.
la source
Il y a beaucoup de choses à considérer selon la topologie dont vous disposez. Mais avant de commencer à penser à des solutions complexes, vous pouvez simplement essayer de diviser la tâche en deux tâches et vérifier si le temps nécessaire sera considérablement réduit:
La prochaine fois, essayez:
(vous voudrez peut-être remplacer [al] * par quelque chose d'autre qui correspond à environ la moitié des fichiers - peut-être [0-4] * - selon le contenu du dossier)
Si le temps ne s'améliore pas de façon spectaculaire, il peut être plus important de vérifier s'il est nécessaire de copier tous les fichiers (quel est le rapport des fichiers modifiés sur tous les fichiers?)
la source