Compressão para espaço em branco
Vamos voltar ao básico do seu instantâneo. Em primeiro lugar, vou pedir-lhe para ver porque está a acumular um ficheiro. Pare e pense sobre o que o alcatrão faz um pouco e por que você está fazendo isso.
$ dd if=/dev/zero of=zero bs=$((1024*1024)) count=2048
2048+0 records in
2048+0 records out
2147483648 bytes transferred in 46.748718 secs (45936739 bytes/sec)
$ time gzip zero
real 1m0.333s
user 0m37.838s
sys 0m1.778s
$ ls -l zero.gz
-rw-r--r-- 1 user group 2084110 Mar 11 16:18 zero.gz
Dado que, podemos ver que a compressão nos dá uma vantagem de 1000: 1 em um espaço vazio. A compactação funciona independentemente do suporte do sistema para arquivos esparsos. Existem outros algoritmos que irão aumentar ainda mais, mas para o desempenho global bruto, gzip ganha.
Utilitários Unix e arquivos esparsos
Dado um sistema com suporte para arquivos esparsos, dd às vezes tem uma opção para salvar o espaço. Curiosamente, meu mac inclui uma versão de dd que tem um conv=sparse flag, mas o sistema de arquivos HFS + não suporta isso. Oponentemente, uma nova instalação do Debian que eu usei para testes tem suporte para arquivos esparsos no ext4, mas essa instalação do dd não tem o sinalizador. Vá a figura.
Assim, outro exercício:
Eu copiei / dev / zero para um arquivo igual ao anterior. Foram necessários 2G de espaço no sistema de arquivos, como confirmado por du , df e ls . Então eu usei cp nele e me encontrei com 2 arquivos usando 4GB de espaço. Então, é hora de tentar outro sinalizador:
'cp --sparse=always sparse sparse2'
Usar isso força o cp a pegar um arquivo regular e usar alocação esparsa sempre que ele vir uma longa seqüência de zeros. Agora, tenho dois arquivos que relatam ter 4 GB de acordo com ls , mas apenas 2 GB de acordo com du e df .
Agora que eu tenho um arquivo esparso, o cp vai se comportar? Sim. cp sparse2 sparse faz com que ls mostre 2 GB de espaço consumido para cada arquivo, mas du mostra como ocupando zero blocos no sistema de arquivos. Conclusão: alguns utilitários respeitarão um arquivo já esparso, mas a maioria irá escrever tudo de volta. Mesmo cp não sabe transformar um arquivo escrito de volta em escasso, a menos que você force sua mão a tentar.
Em seguida, criei um arquivo de 1 MB e fiz uma entrada esparsa e, em seguida, tentei editá-lo em vim . Apesar de apenas inserir alguns caracteres, estamos de volta a usar a coisa toda. Uma pesquisa rápida encontrou uma demonstração semelhante: link
Conclusões esparsas
Então meus pensamentos deram tudo isso:
- Instantâneo com LVM
- Execute o zerofree no snapshot
- Use
rsync -Spara copiar com arquivos esparsos resultantes - Se você não puder usar o rsync, gzip seu instantâneo se estiver transportando pela rede e, em seguida, executar
cp --sparse=alwaysna imagem não expandida para criar uma cópia esparsa.
Backups diferenciais
A desvantagem do problema com um backup diferencial em dispositivos de bloco é que as coisas podem se mover um pouco e gerar grandes diffs incontroláveis. Há alguma discussão sobre o StackOverflow: link que concluiu que o melhor uso foi o xdelta. Se você for fazer isso, tente novamente zerar seu espaço vazio primeiro.