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 -S
para 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=always
na 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.