size differenring after scp de uma máquina para outra

0

Eu tenho um tamanho de arquivo de 7.5Gb que eu transferi de uma máquina solaris para outra máquina solaris através do scp. depois do scp o arquivo está mostrando 13Gb no servidor de destino.Eu gostaria de saber o que é razão para isso?

    
por Naziya S 18.02.2015 / 11:43

1 resposta

1

Uma maneira de isso acontecer é arquivos com "buracos": arquivos esparsos . Suponha que um programa faça algo como:

fd = open("somefile", O_RDWR);
seek(fd, 1024, SEEK_SET);
write(fd, "blah blah", 9);

A chamada do sistema seek() ignora o que seria o primeiro bloco de disco do arquivo (acho que já faz um tempo desde que usei o Solaris) e grava 9 bytes no segundo bloco. A maioria dos sistemas de arquivos Unix e Linux não alocarão o primeiro bloco de disco nunca gravado. Se você copiar o arquivo, ou arquivá-lo ou algo assim, ele crescerá, pois qualquer read() feito nos primeiros 1024 bytes do arquivo retornará todos os bytes zero.

Dito isto, é muito raro encontrar tal situação. Eu procuraria mais por algum bug, como cópia dupla ou algo assim.

Você pode verificar se o arquivo de origem é esparso comparando seu tamanho e o uso do disco:

ls -l the_file
du -k the_file

Se a segunda figura (uso do disco) for menor que a primeira (tamanho real do arquivo), o arquivo é esparso.

Se o arquivo for escasso, você poderá usar rsync -a --sparse para transferi-lo em vez de scp . O Rsync pode copiar arquivos esparsos para arquivos esparsos se você informar.

    
por 18.02.2015 / 14:33

Tags