Comment copier rapidement 900 000 fichiers?

9

J'ai besoin de copier des données qui incluent 900 000 petits fichiers totalisant environ 30 gigaoctets sur un ordinateur Windows. Cependant, il doit pouvoir être copié et configuré en moins d'une heure et demie, et cela peut prendre plus de 5 heures pour copier un disque dur USB, principalement en raison de la quantité folle de fichiers. Existe-t-il un moyen meilleur / plus rapide de gérer cela, comme faire une sorte de copie de bloc? Merci

Joe Lyga
la source
8
Cela va être une cible très agressive pour toute copie basée sur un fichier d'un seul disque non SSD. Énumérer tous les fichiers et traiter les entrées du système de fichiers et les métadonnées pour autant de fichiers prend beaucoup de temps.
afrazier
5
Pouvez-vous simplement retirer le disque dur et le placer dans la destination? ce serait la vitesse la plus rapide, transférée sur le fond de panier de la carte mère.
iTom
1
xkcd.com/949
user541686
Vous voulez voir cette question bloguée? Aidez en répondant ou en votant à Meta .
Tamara Wijsman

Réponses:

7

Avec un grand nombre de fichiers, il est préférable de créer une archive tar afin d'avoir moins de fichiers à traiter. Si vous utilisez un disque dur externe USB 2.0, vous devriez envisager d'utiliser USB 3.0, eSATA ou utiliser un réseau local rapide.

Quel est votre système d'exploitation source? Si vos deux systèmes d'exploitation étaient Linux, vous pouvez diriger les fichiers via tar, gzip et ssh vers la machine cible. Vous pouvez également installer cygwin sur Windows pour obtenir ce type de fonctionnalité pour Windows.

Mise à jour:
" Utiliser Tar et SSH pour améliorer les vitesses SCP " décrit les commandes nécessaires pour envoyer le contenu de tar via ssh.

dabest1
la source
tar lira toujours tous les fichiers un par un.
Tomas Andrle
Oui, mais vous ne le feriez qu'une seule fois et d'autres commandes comme scp ne seraient pas retardées en traitant des fichiers individuels. Si les fichiers peuvent être conservés dans l'archive tar sur la machine cible, vous gagnez également du temps sur l'écriture d'un fichier au lieu de plusieurs.
dabest1
Je suppose que la connexion USB est le goulot d'étranglement. Donc, prendre une image brute du lecteur comme le suggère @arcyqwerty semble être la meilleure solution pour moi. Je serais curieux de voir des résultats réels, peut-être que je me trompe complètement!
Tomas Andrle
1
@TomA - D'après mon expérience en traitant de nombreux petits fichiers, le disque dur est le goulot d'étranglement. Chaque fichier lu nécessite une recherche de tête vers le bitmap d'allocation, puis une autre recherche de tête vers le contenu du fichier réel. En conséquence, le disque dur passe la majeure partie de son temps à chercher et très peu de temps à lire les fichiers.
Fake Name
2
Par exemple, avec des fichiers 1K, j'obtiens ~ 1-5 Mbps sur mon lan gigabit. Avec des fichiers volumineux (gigaoctets chacun), j'obtiens ~ 80-90 Mbps. Tout tourne autour des lectures séquentielles.
Fake Name
8

Si le disque dur peut être retiré de l'interface USB et sur SATA / ATA, je l'installerais sur l'ordinateur de destination. Vous obtiendrez des vitesses de transfert beaucoup plus rapides, comme d'autres l'ont noté. Pour copier, en supposant que vous êtes sous Windows, je ferais une ROBOCOPIE simple. C'est à peu près aussi vite que vous pouvez vraiment l'espérer, bien qu'il existe d'autres alternatives.

ROBOCOPY /E /B /MT 'source' 'destination'

J'essaierais cependant d'éviter de compresser tous ces fichiers, il y a de fortes chances que le temps de compression et de déplacement dépasse simplement le déplacement des fichiers.

* Ajout de l'option / MT pour robocopy. Il peut considérablement accélérer les transferts lorsque vous êtes dans un environnement multi-thread.

Lee Harrison
la source
Aidera-t-il /MTsur les transferts locaux d'un seul disque ou provoquera-t-il une destruction massive des disques? Il est courant de copier des partages importants entre les serveurs, mais ils ont souvent à la fois une latence supplémentaire en raison du passage sur le réseau et des IOPS améliorés à partir des baies RAID.
afrazier
Je ne peux pas vraiment trop commenter cet aspect. J'utilise robocopy pour sauvegarder tous mes projets VS tous les soirs, même si cela ne vaut que 10 Go environ. Cela ne prend que quelques instants car les fichiers qui existent déjà ne sont pas copiés. J'ai trouvé ces repères Robocopy il y a quelques mois: demartek.com/Reports_Free/…
Lee Harrison
d'après mon expérience, si l'adaptateur USB vers SATA de votre boîtier de disque prend en charge la mise en file d'attente de commandes native, j'obtiens une amélioration significative des performances du commutateur / MT.
longneck
6

Vous pouvez essayer de prendre une image de l'ensemble du dossier / lecteur

Sur les systèmes Linux, vous pouvez utiliser ddpour obtenir une copie brute du système de fichiers et la copier en un seul gros fichier.

Pour extraire l'image sur Windows, vous devrez peut-être installer cygwin ou un programme capable de traiter les ddimages.

arcyqwerty
la source
Voilà le ticket.
Tomas Andrle
3

Installez le disque où résident les fichiers source sur l'ordinateur que vous configurez et transférez le disque sur le disque. Oubliez l'USB. Même le transfert sur le fil (mettre en réseau les machines ensemble) serait plus rapide que l'USB (en supposant USB 2.0 et NIC 1 Gbps). S'il s'agit d'un événement récurrent, recherchez plutôt la réplication.

Paul Ackerman
la source
3

Utiliser rsyncavec zoption.

-z,         --compress              compress file data during the transfer
            --compress-level=NUM    explicitly set compression level
            --skip-compress=LIST    skip compressing files with suffix in LIST

Cela augmentera la vitesse de transfert sur le réseau. Donc très probablement pas utile dans votre cas.

Après quelques lectures supplémentaires, je me suis rendu compte que nous ne devrions pas utiliser l'indicateur «-z» lors de la copie de données d'un disque dur local vers un autre, cela augmente les frais généraux. Merci au commentaire de @FakeName.

Sachin Divekar
la source
1
rsync ne compresse pas pour les transferts locaux (ou sur un LAN, je crois). De plus, cela n'aurait aucun avantage, car le vrai problème est le temps pris pour lire les fichiers, pas pour les envoyer par le biais du fil (car chaque fichier lu nécessitera au moins deux opérations de recherche).
Fake Name
@FakeName +1 vous avez raison, après quelques lectures, j'ai compris. J'ai mis à jour ma réponse.
Sachin Divekar
1

Vous approchez rapidement des limites de votre disque dur. En fait, avec les lecteurs de produits actuels, il est impossible de mesurer votre temps de transfert avec une opération de copie par fichier.

En supposant que chaque fichier nécessite 1 recherche HD et que le temps de recherche soit de 7 ms (ce qui est un peu idéal, de manière réaliste, chaque fichier nécessitera deux recherches, à moins que le bitmap de volume ne soit mis en cache dans la mémoire RAM), au mieux, vous gérerez ~ 142 fichiers / sec ( \ $ \ frac {1000} {7} = 142,8 ... \ $).

Avec les spécifications OP (30 Go, 900 000 fichiers), c'est ~ 33 Ko par fichier (\ $ \ frac {30 000 000 k} {900 000} = ~ 33,3 ... \ $. 33 Ko * 142 = 4,68 Mo / s).

Le temps minimum pour transférer 30 Go à 5 Mbps est d'environ 1 heure et 40 minutes (\ $ \ frac {30 000} {5} = = 6 000 \ $ secondes. \ $ \ Frac {6 000} {60} = 100 \ $ minutes ou 1:40 heures)

Par conséquent, il est impossible d'atteindre une vitesse meilleure que ~ 5 MBPS, et c'est avec un lecteur idéal (et moins d'opérations de recherche. C'est pour une recherche par fichier. En réalité, ce serait deux). Vous êtes entièrement limité par les performances du disque.


La seule façon d'améliorer les performances est de copier le système de fichiers et la partition de manière séquentielle. ddpeut le faire sur linux.

Qu'essayez-vous de faire?

Faux nom
la source
TeX fonctionne-t-il pour quelqu'un d'autre? Il semble que ça ne me rende pas.
Fake Name
0

Essayez 7zip pour archiver les fichiers dans un seul fichier. Si possible, utilisez le WLAN avec une connexion ad hoc à un ordinateur portable.

ott--
la source
1
ou mieux encore, une connexion Ethernet directe, de préférence gig-e
Journeyman Geek
0

En rapport avec la réponse de @arcyqwery, vous pourrez peut-être le compresser et le transformer simultanément en un seul gros fichier. Cela accélérera un peu le processus.

Il peut également être utile d'utiliser un programme comme TeraCopy , car il est généralement plus rapide que les performances de copie par défaut de Windows. Vous devriez cependant tester avec des circonstances similaires dans votre cas.

soandos
la source
0

J'avais un cas similaire. J'ai désactivé l'antivirus, la vitesse de copie est passée de 3 Mo / s à 12 Mo / s.

entrez la description de l'image ici

Rm558
la source