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

4

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. Obrigado 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
    
por Josh 12.07.2012 / 04:30

1 resposta

11

Para mim, ainda parece ser um problema de modo ASCII vs. 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), e você não estiver especificando o modo binário e seu software FTP não Para detectá-lo automaticamente e fazer a coisa certa, você estará usando o modo ASCII para a transferência, o que deve tirar os CRs de qualquer par 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) é parecido com o do meu sistema, tudo que você precisa fazer para testar essa teoria é adicionar o comando binary antes ou depois da linha cd :

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 seu desktop) é 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.

    
por 12.07.2012 / 08:00

Tags