J'ai un petit dilemme ici ...
J'avais besoin de déplacer environ 70 Go de fichiers d'un de mes serveurs à l'autre, j'ai donc décidé que les goudronner et envoyer l'archive serait le moyen le plus rapide.
Cependant, le serveur de réception ne dispose que de 5 Go d'espace après avoir reçu l'archive tar.
Existe-t-il un moyen d'extraire le goudron «en place»? Je n'ai pas besoin de conserver l'archive après son extraction, alors je me demandais s'il était possible de le faire.
Edit: Il convient de noter que l'archive a déjà été envoyée, et je voudrais éviter de renvoyer via une autre méthode.
Si l'autre machine a ssh, je vous recommanderais rsync comme une autre alternative qui n'utilise pas de fichier tar:
Et soyez prudent avec le leader
/
Modifier la mise à jour
Eh bien, je vois comment c'est maintenant un excellent cornichon si vous n'êtes pas en mesure de le supprimer et de recommencer avec rsync. Je voudrais probablement essayer un extrait sélectif et le supprimer du goudron.
extrait sélectif:
suppression sélective:
Cependant, il semble que vous passerez beaucoup de temps à coder un script pour cela ...
la source
Fondamentalement, ce dont vous avez besoin est la possibilité de canaliser le fichier dans tar et de "loper" le front au fur et à mesure.
Sur StackOverflow, quelqu'un a demandé comment tronquer un fichier à l'avant , mais il semble que ce ne soit pas possible. Vous pouvez toujours remplir le début du fichier avec des zéros d'une manière spéciale afin que le fichier devienne un fichier clairsemé , mais je ne sais pas comment faire. Nous pouvons cependant tronquer la fin du fichier. Mais tar doit lire l'archive en avant, pas en arrière.
Solution 1
Un niveau d'indirection résout chaque problème. Commencez par inverser le fichier sur place, puis lisez-le en arrière (ce qui entraînera la lecture du fichier d'origine vers l'avant) et tronquez la fin du fichier inversé au fur et à mesure.
Vous devrez écrire un programme (c, python, peu importe) pour échanger le début et la fin du fichier, morceau par morceau, puis diriger ces morceaux vers tar tout en tronquant le fichier un morceau à la fois. C'est la base de la solution 2 qui est peut-être plus simple à mettre en œuvre.
Solution 2
Une autre méthode consiste à diviser le fichier en petits morceaux sur place , puis à supprimer ces morceaux à mesure que nous les extrayons. Le code ci-dessous a une taille de bloc d'un mégaoctet, ajustez en fonction de vos besoins. Plus gros est plus rapide mais prendra plus d'espace intermédiaire lors du fractionnement et de l'extraction.
Fractionnez le fichier archive.tar:
Canalisez ces fichiers dans tar (notez que nous avons besoin de la variable chunkprefix dans le deuxième terminal):
Puisque nous utilisons un tube nommé (
mkfifo fifo
), vous n'avez pas besoin de diriger tous les morceaux à la fois. Cela peut être utile si vous manquez d'espace. Vous pouvez suivre les étapes suivantes:while [ -e … ]; do cat "$chunk…; done
boucle terminée (deuxième terminal):tar
commande, ne supprimez PAS le fifo (premier terminal), mais vous pouvez exécutersync
, au cas où,while [ -e … ]; do cat "$chunk…; done
nouveau les lignes.Bien sûr, tout cela est en haute voltige , vous voudrez d'abord vérifier que tout va bien sur une archive factice, car si vous faites une erreur, alors adieu les données .
Vous ne saurez jamais si le premier terminal (
tar
) a réellement fini de traiter le contenu du fifo, donc si vous préférez, vous pouvez l'exécuter à la place, mais vous n'aurez pas la possibilité d'échanger de manière transparente des morceaux avec un autre disque:Avertissement
Notez que pour que tout cela fonctionne, votre shell, votre queue et votre troncature doivent gérer correctement les entiers 64 bits (vous n'avez pas besoin d'un ordinateur 64 bits ni d'un système d'exploitation pour cela). Le mien le fait, mais si vous exécutez le script ci-dessus sur un système sans ces exigences, vous perdrez toutes les données dans archive.tar .
Et dans tous les cas, quelque chose d'autre ne va pas, vous perdrez toutes les données dans archive.tar de toute façon, alors assurez-vous d'avoir une sauvegarde de vos données.
la source
Si vous avez des fichiers objets à déplacer, essayez de les supprimer. Cela permettra d'économiser une quantité considérable d'espace.
la source