Question Pourquoi mon fichier tar.gz est-il corrompu après avoir utilisé bash ftp pour déplacer le fichier vers un serveur distant?


Je sauvegarde le fichier tar.gz sur le serveur local, puis le transfère sur un serveur distant. Si je le tire sur mon bureau via le client FTP du serveur local, le fichier fonctionne correctement. Si je le tire sur mon bureau via le client ftp depuis le serveur distant, il est de quelques octets plus petit et corrompu. J'ai essayé d'utiliser le client pour forcer les modes ascii et binaire, et aucun d'entre eux n'a corrompu le fichier, donc je ne vois pas pourquoi cela provoquerait la corruption du script. Des idées? Le fichier transfère bien, il ne veut tout simplement pas ouvrir. Merci d'avance.

cd $FSBACKDIR
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'
ftp -nv <<EOF
open $FTPHOST
user $FTPUSER $FTPPASS
cd $FTPDIR
$ATTACH
quit
EOF

4
2017-07-12 02:30


origine




Réponses:


Pour moi, cela semble toujours être un problème de mode ASCII vs binaire, malgré le test que vous avez fait avec votre client de bureau. Votre client de bureau peut être plus intelligent que le client FTP en ligne de commande sur le serveur d'envoi (votre serveur local sur lequel vous exécutez votre script).

Par exemple, si le serveur local est Windows (qui utilise les CRLF comme terminaisons de ligne) et que le serveur distant est Unix (qui utilise uniquement les LF comme fins de ligne) et que vous ne spécifiez pas de mode binaire et que votre logiciel FTP ne le détecter et faire la bonne chose, alors vous utiliseriez le mode ASCII pour le transfert, ce qui devrait enlever les CR de toutes les paires CRLF. Si votre archive tar gzip se trouve avoir le motif d'octets 0x0d0a apparaissant n'importe où, elle perdrait le 0x0d.

Si le client FTP en ligne de commande sur votre système d’envoi (je suppose que c’est votre serveur local) ressemble à celui de mon système, tout ce que vous devez faire pour tester cette théorie est d’ajouter le binary commande avant ou après le cd ligne:

cd $FSBACKDIR  
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'  
ftp -nv <<EOF  
open $FTPHOST  
user $FTPUSER $FTPPASS  
binary  
cd $FTPDIR  
$ATTACH  
quit  
EOF  

Une dernière pensée: si ce n’est pas le mode ASCII vs binaire, je chercherais peut-être à savoir si l’alg FTP dans une passerelle NAT entre votre serveur local et distant (ou entre le serveur distant et votre bureau) altère en quelque sorte le fichier. en transit. Je suppose que cela pourrait également être un autre type de proxy entre les hôtes, et non spécifiquement FTP ALG d'une passerelle NAT.


11
2017-07-12 06:00



Je vous remercie. @Spiff. Je devais mettre «binaire» au mauvais endroit quand je l'ai essayé plus tôt. Je suppose que je devais dormir dessus et que quelqu'un me dise de continuer à me concentrer là où je regardais déjà. Très appréciée. - Josh