Eu tenho dois servidores: nosso servidor web de produção (freebsd) e um servidor de backup (centos). O servidor de produção faz o mysql database dumps a cada 3 horas e comprime o arquivo de despejo usando o bzip2. Portanto, temos uma pasta em / backups / dumps / e os arquivos são como database_dump-20120119_152100.bz2.
Em nosso servidor de backup, temos um / BackupRaid / webserver / folder. Neste servidor, um script rsync é executado a cada 3 horas, sincronizando a pasta / backups / dumps no servidor de produção para a pasta / BackupRaid / webserver no servidor de backup. Um desses arquivos de backup é de cerca de 500MB. Se você descompactar, são 3,2 GB.
Este processo funcionou bem durante anos. Mas recentemente verifiquei o servidor de backup e vi que na última semana, há um arquivo de 500MB bz2 para cada período de 3 horas, como esperado, mas há também uma versão descompactada de 3.2GB de cada um desses arquivos. Portanto, agora há o dobro dos arquivos, um não compactado e um compactado para cada período de tempo.
Eu descubro quando a próxima sincronização vai ser e eu sento e monitora. No servidor de backup, vejo um arquivo ".database_dump-201201119_182100.tlv1d4", o que significa que o rsync está em andamento. Eu assisto o arquivo e ele cresce e cresce passando os 500MB que deveria ser. Ele prossegue para baixar um arquivo de despejo de descompressão de 3,2 GB. Eu faço o login no servidor web e verifico a pasta que está sendo sincronizada e existem apenas 500MB de arquivos bz2 na pasta. Uma vez terminado o arquivo de 3,2 GB, ele faz o download do arquivo de 500MB bz2.
Então, de onde vem esse arquivo de despejo não compactado de 3.2GB? Ele está agindo como se o servidor remoto estivesse descompactando o arquivo antes de transferir, transferindo o arquivo de despejo de 3.2GB para o servidor de backup e, em seguida, o servidor de backup o comprimiria novamente para o tamanho de 500MB.
Eu usei lsof, grepped para o nome do arquivo, encontrei o PID do processo de rsync. Verifiquei o PID de ps aux
e com certeza ele estava vindo do meu script. Meu script é um comando muito simples:
#Rsync files, timeout set to 5 seconds
until rsync -avv --progress --partial --timeout=5 "${SOURCE_USER}"@"${SOURCE_SERVER}":"${SOURCE_PATH}" "${TARGET_PATH}";
do echo "Didn't quite get the whole file before an error/timeout occurred. Restarting where it left off..." >&2;
sleep 1;
done
O que está acontecendo ??