
Eu tenho uma imagem qemu bruta esparsa que desejo transferir para outro servidor. qemu-img info
me dá:
image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
Eu transfiro com:
rsync -azhP --sparse origin:/path/to/img/sparse.img .
Agora, no servidor de destino eu tenho:
image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G
No entanto, depois de executar virt-sparsify
novamente na imagem copiada, recebo o seguinte:
image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
Ambos os servidores estão executando o CentOS 7.2 em um sistema de arquivos XFS. Então o que aconteceu?
Atualizar:
Depois de mais pesquisas, encontrei vários posts indicando que o rsync não lida bem com arquivos esparsos e que é melhor usar uma ferramenta diferente,feito uma estrela, para transferir arquivos esparsos.
Você pode acompanhar a tar
transferência com rsync --inplace
, para garantir que o arquivo foi transferido sem erros, conforme explicadoaqui.
OutrosoluçãoO que foi proposto foi criar um arquivo esparso vazio do mesmo tamanho no destino e depois usá-lo rsync --inplace
para transferir os dados reais.
Não escrevi isso como uma solução, porque realmente não explica por que rsync --sparse
está se comportando dessa maneira.
Responder1
Aposto que isso se deve às disparidades de FS entre a origem e o destino.
Deixe-me elaborar com um exemplo. Arquivos esparsos são arquivos cujos blocos vazios (ou seja, cheios de 0) não são alocados no disco. Quanto menor o tamanho do bloco no FS, maior a probabilidade de tal bloco ser encontrado. Portanto, seu problema pode ser devido ao tamanho do bloco ser maior no destino do que na origem.
Pode haver outros parâmetros XFS que eu não conheço.
Veja tambémesta pergunta no ServerFault
Responder2
A solução que descobri que funciona melhor para mim é primeiro executar
virt-sparsify imagename
Leva algum tempo. Isso produz uma imagem de tamanho menor que relata o mesmo tamanho em ls -h
e . Mas quando você monta a imagem ela informa o tamanho correto (e cresce conforme o esperado).du -h
du -h --apparent-size
Em seguida, sincronize novamente essa imagem.