La manière la plus rapide de combiner plusieurs fichiers en un (tar czf est trop lent)

23

Actuellement, je cours tar czfpour combiner des fichiers de sauvegarde. Les fichiers se trouvent dans un répertoire spécifique.

Mais le nombre de fichiers augmente. L'utilisation tzr czfprend trop de temps (plus de 20 minutes et compter).

J'ai besoin de combiner les fichiers plus rapidement et de manière évolutive.

J'ai trouvé genisoimage, readomet mkisofs. Mais je ne sais pas lequel est le plus rapide et quelles sont les limitations pour chacun d'eux.

Najib-botak Chin
la source
Je doute que cela tarentraîne une surcharge importante, la lecture des fichiers est l'opération coûteuse ici. Vous devez soit modifier la façon dont vos fichiers sont stockés, soit utiliser une approche radicalement différente (copier le système de fichiers dans son ensemble). Nous ne pouvons pas vous aider beaucoup sans savoir comment vos fichiers sont organisés.
Gilles 'SO- arrête d'être méchant'
5
Montez votre FS avec l'option "noatime", accélérez peut-être les opérations d'E / S.
Rufo El Magufo
2
+1 pour l'heure du soir, cela fait vraiment une différence significative. Surtout pour les disques durs ordinaires, et aussi juste pour réduire les écritures superflues.
JM Becker

Réponses:

25

Vous devez vérifier si la plupart de votre temps est consacré au processeur ou aux E / S. Quoi qu'il en soit, il existe des moyens de l'améliorer:

A: ne pas compresser

Vous n'avez pas mentionné la « compression » dans votre liste d'exigences , alors essayez laisser tomber le « z » de votre liste d'arguments: tar cf. Cela pourrait accélérer un peu les choses.

Il existe d'autres techniques pour accélérer le processus, comme utiliser "-N" pour ignorer les fichiers que vous avez déjà sauvegardés auparavant.

B: sauvegarder toute la partition avec dd

Sinon, si vous sauvegardez une partition entière, prenez plutôt une copie de l'image disque entière. Cela permettrait d'économiser du traitement et de beaucoup de temps de recherche de tête de disque. taret tout autre programme travaillant à un niveau supérieur a pour surcharge de devoir lire et traiter les entrées de répertoire et les inodes pour trouver où se trouve le contenu du fichier et pour effectuer plus de recherches sur le disque principal , en lisant chaque fichier à un endroit différent du disque.

Pour sauvegarder les données sous-jacentes beaucoup plus rapidement, utilisez:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Cela suppose que vous n'utilisez pas RAID, ce qui peut changer un peu les choses)

Yves Junqueira
la source
2
ne pas compresser : ou utiliser pigzs'il existe dans le système plus d'un processeur.
Rufo El Magufo
Les algorithmes de compression LZ4 / zstd et similaires rapides peuvent toujours être utiles pour vérifier s'ils peuvent accélérer un processus en écrivant simplement moins de données (si les données sont compressibles) tout en étant d'un ordre de grandeur plus rapide en compression mais moins efficace en fonction de la niveau et algorithme, aussi man gzip dit "Le niveau de compression par défaut est -6", donc il y a place à amélioration.
LiveWireBT
8

Pour répéter ce que les autres ont dit: nous devons en savoir plus sur les fichiers en cours de sauvegarde. Je vais aller avec quelques hypothèses ici.

Ajouter au fichier tar

Si des fichiers sont uniquement ajoutés aux répertoires (c'est-à-dire qu'aucun fichier n'est supprimé), assurez-vous de les ajouter au fichier tar existant plutôt que de le recréer à chaque fois. Vous pouvez le faire en spécifiant le nom de fichier d'archive existant dans votre tarcommande au lieu d'un nouveau (ou en supprimant l'ancien).

Écrire sur un autre disque

La lecture à partir du même disque sur lequel vous écrivez peut réduire les performances. Essayez d'écrire sur un autre disque pour répartir la charge d'E / S. Si le fichier d'archive doit se trouver sur le même disque que les fichiers d'origine, déplacez-le ensuite.

Ne pas compresser

Je répète juste ce que @Yves a dit. Si vos fichiers de sauvegarde sont déjà compressés, il n'est pas nécessaire de compresser à nouveau. Vous perdrez simplement des cycles CPU.

Barry Brown
la source
4

Utiliser tar avec la crompression lz4 comme dans

tar cvf - myFolder | lz4 > myFolder.tar.lz4

vous offre le meilleur des deux mondes (plutôt bonne compression ET vitesse). Attendez-vous à un taux de compression d'environ 3 même si vos données contiennent des fichiers binaires.

Lectures complémentaires: comparaison des algorithmes de compression Comment tarer avec lz4

StefanQ
la source
1
Ce que StefanQ reste, c'est que vous devez choisir votre compresseur en fonction de l'emplacement de votre goulot d'étranglement. N'oubliez pas que vous pouvez enregistrer la sortie sur un autre périphérique de stockage physique ou même sur une machine distante!
Lester Cheung
2

Je suis surpris que personne ne mentionne le vidage et la restauration. Ce sera beaucoup plus rapide que dd si vous avez de l'espace libre dans le système de fichiers.

Notez que selon le système de fichiers en question, vous pouvez avoir besoin de différents outils:

  • ext2 / 3/4 - vidage et restauration ( vidage de paquet dans RH / Debian)
  • XFS - xfsdump et xfsrestore (paquet xfsdump dans RH / Debian)
  • ZFS - envoi zfs et recv zfs
  • BTRFS - envoi btrfs et réception btrfs

Notez que certains programmes n'ont pas de compression intégrée (tous sauf dump) - dirigez-vous vers stdout et utilisez pigz au besoin. ;-)

Lester Cheung
la source