reprendre la copie de fichiers linux


9

Comment reprendre une copie d'un gros fichier sous linux? J'ai un énorme fichier (plusieurs gigaoctets) partiellement copié sur un lecteur réseau, et cela a pris beaucoup de temps, et cela a été principalement fait avant que l'opération de copie ne s'arrête en raison d'un problème de réseau qui est maintenant résolu. Comment reprendre la copie du fichier. Je ne veux pas d'un script inefficace, et ecp n'a pas fonctionné (il ne semble pas fonctionner pour les gros fichiers).

Réponses:


4

J'essaierais rsync -a /from/file /dest/file.


1
et pendant que nous parlons de rsync, notez que vous pouvez copier directement sur n'importe quelle machine distante [prenant en charge SSH] en utilisant rsync -az -e ssh / from / file user@dest.ation: / full / dest / path
Mikeage

2
sensationnel. exécuter rsync comme ça sans aucune option supprimera / dest / file et retransmettra le tout. Comment cela a-t-il été voté?
Justin

1
Comment la conservation des attributs de fichier (-a) aide-t-elle? Cela devrait-il être ajouté?
Malvineous

3

Si vous savez que vous avez simplement besoin d'ajouter au fichier local et que vous ne souhaitez pas utiliser rsync (ce qui pourrait prendre du temps à calculer les sommes de contrôle), vous pouvez utiliser curl. Par exemple, si vous avez un gros fichier sur une clé USB amovible lente montée sur /media/CORSAIR/somefile.datet que la moitié seulement se trouve dans le répertoire en cours, pour reprendre:

curl -C - -O "file:///media/CORSAIR/somefile.dat"


Merci pour l'astuce, j'ai dû utiliser cette astuce car je copiais depuis un serveur Windows SMB (donc pas de rsync) lorsque la connexion lente a été perdue, et je ne voulais pas télécharger les 500 Mo depuis le début.
MiKy

2

Oui, rsync est la voie à suivre. Pour moi, nous avons transféré 100 + Go de données sur rsync + ssh. Si vous recherchez une véritable copie de sauvegarde, assurez-vous d'utiliser l' -aoption (archive) pour conserver les attributs de fichier (heures, propriétaires, perms, etc.)

host1> rsync -aP file user@host2:/path/to/new/dir/

Il est également utile pour copier des fichiers volumineux qui peuvent changer au cours d'une migration. Vous pouvez pré-charger les données vers la destination et une fois prêt pour la copie finale, recommencez mais seulement pour une fraction du temps. Vous pouvez économiser sur les temps d'arrêt réels en utilisant rsync à son plein potentiel.

PS L'utilisation v(verbeuse) peut ralentir le transfert de nombreux fichiers.


2

La commande que vous voulez sera quelque chose comme

rsync -v --append /path/to/afile /mnt/server/dest/afile

sauf si vous pouvez accéder au serveur via ssh et exécuter rsync de cette façon, dans ce cas, la commande que FlyingFish a donnée est la meilleure.


0

rsync n'est valable que si vous avez rsync sur le serveur de destination. Dans ce cas, c'est en effet la meilleure solution.

Mais pas autrement. Puisque le but de rsync est de ne copier que les pièces modifiées dans de gros fichiers, il suppose que ces pièces modifiées peuvent se trouver n'importe où dans le fichier. Cela signifie qu'il vérifiera tous les blocs qui ont déjà été copiés. Si vous n'avez pas rsync à l'extrémité distante, votre rsync local commencera donc par relire tout ce qui a déjà été transféré.

Si votre machine source a un serveur web ou ftp, vous pouvez utiliser wget depuis le serveur de destination avec l'option "--continue". (ou boucle avec l'option "--continue-at [- | size]").

Si votre machine de destination possède un serveur FTP, vous pouvez utiliser curl sur la machine source avec l'option --append.

En dernier recours, vous pouvez utiliser dd avec les arguments "bs =" (taille de bloc), "skip =" et "seek =". Par exemple:

Supposons que vous puissiez utiliser des blocs de 2048 octets. Si votre fichier de destination est actuellement de 2'048'000'000 octets (2 Go), soit 1'000'000 blocs de 2048 octets. Pour ajouter le reste de votre fichier source à la destination, vous pouvez

dd if = fichier_source de = fichier_destination bs = 2048 ignorer = 1000000 rechercher = 1000000

Vous pourrez peut-être utiliser une taille de bloc plus grande pour améliorer la vitesse de transfert. N'oubliez pas de spécifier la taille du bloc avec bs = et que la valeur donnée pour ignorer et rechercher est en blocs, pas en octets.


Ce que vous avez dit sur rsync est faux. man rsync, lisez ce que fait l'option --append.
Justin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.