Questão Por que meu arquivo tar.gz é corrompido depois de usar o bash ftp para mover o arquivo para um servidor remoto?


Eu apóio o arquivo tar.gz no servidor local, depois o transfiro para um servidor remoto. Se eu puxá-lo para o meu desktop via cliente FTP do servidor local, o arquivo funciona bem. Se eu puxá-lo para o meu desktop via cliente FTP do servidor remoto, é alguns bytes menores e corrompidos. Eu tentei usar o cliente para forçar ascii e modo binário, e nem corromper o arquivo, então eu não vejo porque isso estaria causando a corrupção no script. Alguma ideia? O arquivo transfere bem, só não vai abrir. Agradeço antecipadamente.

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


origem




Respostas:


Para mim, ainda parece provável que seja um problema de modo ASCII vs. modo binário, apesar do teste que você fez com seu cliente de desktop. Seu cliente de desktop pode ser mais inteligente que o cliente FTP de linha de comando no servidor de envio (seu servidor local no qual você está executando o script).

Por exemplo, se o servidor local for Windows (que usa CRLFs como finais de linha) e o servidor remoto for Unix (que usa apenas LFs como terminações de linha), você não estará especificando o modo binário e seu software FTP não detectá-lo e fazer a coisa certa, então você estaria usando o modo ASCII para a transferência, que deve tirar os CRs de quaisquer pares CRLF. Se o seu tarball gzipped tiver o padrão de byte 0x0d0a aparecendo nele em qualquer lugar, ele perderá o 0x0d.

Se o cliente de FTP de linha de comando em seu sistema de envio (eu acho que é o seu servidor local) é algo como o do meu sistema, tudo que você teria que fazer para testar essa teoria é adicionar o binary comando antes ou depois da cd linha:

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  

Um último pensamento: se não for ASCII vs modo binário afinal, eu olharia para ver se talvez o ALG FTP em um gateway NAT entre seu servidor local e remoto (ou entre o servidor remoto e sua área de trabalho) está de alguma forma corrompendo o arquivo em trânsito. Eu suponho que também poderia ser algum outro tipo de proxy entre hosts, não especificamente um ALG FTP do gateway NAT.


11



Obrigado. @Spiff. Eu devo ter colocado 'binário' no lugar errado quando tentei mais cedo. Acho que precisava dormir e ter alguém me dizendo para continuar focando onde eu já estava olhando. Muito apreciado. - Josh