Reduzir o uso do disco de imagem xen

2

Dois casos:

1.Se estiver fazendo o hdd usando o dd e copie-o pelo nfs para outro servidor:

mount -o ro,remount /
dd if=/dev/sda bs=64K | gzip -c > /share/test.img.gz

depois do gunzip eu recebo 20Gb (por ex.) arquivo, preenchido com zeros no final:

du -h /md/share/test.img
21G /md/share/test.img

2. Se eu criar uma imagem vazia usando o dd:

dd if=/dev/zero of=/md/share/test2.img bs=1024k seek=20480 count=0

Eu tenho:

du -h /md/share/test2.img
0 /md/share/test2.img
ls -lah /md/share/test2.img
-rw-r--r-- 1 root root 20G Aug 2 14:46 /md/share/test2.img

Após montar isso para guest, posso usar todos os 20G da maneira que eu quiser, e o tamanho IMG é sempre igual ao conteúdo real, sem "zeros" comendo meu espaço de array.

Pergunta: como posso reduzir o tamanho da imagem do disco para o caso 1?

Resposta: se dd suportar o atributo conv=sparse , ele deve ser usado além de tar --sparse . Caso contrário, atualize coreutils e tente novamente. Ou então, instale o pacote libguestfs-tools e execute virt-sparcify /md/share/test.img /md/share/test_sparse.img

    
por Dmitry 02.08.2015 / 17:14

2 respostas

0

Como disse @sam_pan_mariusz, a imagem de tamanho reduzido está criando sua imagem "vazia" como um arquivo "esparso". Para criar um arquivo esparso de um dispositivo de bloco existente, adicione a opção conv=sparse ao comando dd if=/dev/sda [...] que você usou para criar a imagem inicial. Você precisará colocar o arquivo de imagem em tar --sparse , porque apenas a compactação da imagem do arquivo fará com que os fragmentos esparsos sejam gravados, tornando-os não esparsos.

    
por 03.08.2015 / 07:20
1

Esse recurso é chamado arquivos esparsos . O GNU tar --sparse lida bem com eles, exceto o gzip sozinho.

Também não faz mal usar zerofree na imagem resultante.

    
por 02.08.2015 / 18:51