Como migrar um sistema de arquivos ZFS para usar compactação?

2

Pergunta na parte inferior.

Eu tenho vários sistemas de arquivos ZFS Eu gostaria de usar a compactação ZFS, mas como ativar a compactação só afetará novos dados gravados no sistema de arquivos, eu gostaria de escrever um script que possa migrar sistemas de arquivos, portanto todos os dados são compactado.

Esta é a minha tentativa de teste

du -h /tmp/dump.txt

zfs create -p tank3/xtest1/fs
cp /tmp/dump.txt /tank3/xtest1/fs
zfs list | grep xtest

zfs create tank3/xtest2
zfs set compression=lzjb tank3/xtest2
zfs inherit compression tank3/xtest2

zfs snapshot tank3/xtest1/fs@snap
zfs send tank3/xtest1/fs@snap | zfs receive tank3/xtest2/fs
zfs get compression tank3/xtest2/fs
zfs list | grep xtest

zfs destroy -r tank3/xtest1
zfs destroy -r tank3/xtest2


echo "test 2"

zfs create tank3/xtest2
zfs set compression=lzjb tank3/xtest2
zfs list | grep xtest

cp /tmp/dump.txt /tank3/xtest2
zfs list | grep xtest
zfs get compressratio tank3/xtest2

zfs destroy -r tank3/xtest2

que dá

344M    /tmp/dump.txt
tank3/xtest1                          575K  6.38T   288K  /tank3/xtest1
tank3/xtest1/fs                       288K  6.38T   288K  /tank3/xtest1/fs
NAME             PROPERTY     VALUE     SOURCE
tank3/xtest2/fs  compression  off       default
tank3/xtest1                          344M  6.38T   304K  /tank3/xtest1
tank3/xtest1/fs                       344M  6.38T   344M  /tank3/xtest1/fs
tank3/xtest2                          344M  6.38T   288K  /tank3/xtest2
tank3/xtest2/fs                       344M  6.38T   344M  /tank3/xtest2/fs
test 2
tank3/xtest2                          288K  6.38T   288K  /tank3/xtest2
tank3/xtest2                          288K  6.38T   288K  /tank3/xtest2
NAME          PROPERTY       VALUE  SOURCE
tank3/xtest2  compressratio  1.00x  -

No primeiro teste, eu esperava que a replicação comprimiria os dados ao criar tank3/xtest2/fs , mas os sistemas de arquivos recém-criados não herdam a compactação ao usar enviar / receber emendas.

No teste 2, não consigo ver que o arquivo de 344MB ocupe espaço.

Pelo que posso dizer, a compactação não funciona.

Pergunta

Por que vejo esses resultados estranhos?

E como devo migrar um sistema de arquivos não compactado para ser compactado?

Atualizar

Adicionada a propriedade compressratio , que mostra que nenhuma compactação foi feita. dump.txt pode ser compactado para 190 MB.

    
por Jasmine Lognnes 27.12.2014 / 01:34

2 respostas

0

Mesmo que dump.txt seja altamente compressível, o zfs não o comprimirá por algum motivo.

Refazendo minhas experiências novamente com outros dados, verifica-se que enviar / receber comprimirá os dados. Aqui eu configurei a compactação no zpool, então todos os sistemas de arquivos herdariam isso. Eu também usei Linux aqui, mas isso não importa.

# dd if=/dev/zero of=/mnt/dat0/zpool1 bs=1M count=1000
# dd if=/dev/zero of=/mnt/dat0/zpool2 bs=1M count=1000
# service zfs-fuse restart
# zpool create zpool1 /mnt/dat0/zpool1 
# zpool create zpool2 /mnt/dat0/zpool2
# zfs set compression=on zpool1
# zfs create zpool1/fs1
# zfs create zpool2/fs2
# cp -r /etc/ /var/log /zpool2/fs2/
# zfs snapshot zpool2/fs2@snap
# zfs send zpool2/fs2@snap | zfs receive zpool1/fs2
# zfs get compressratio zpool1/fs2
NAME        PROPERTY       VALUE  SOURCE
zpool1/fs2  compressratio  4.75x  -
    
por 31.12.2014 / 02:54
5

Copie os dados.

Isso é tudo.

Há um monte de saída ausente em seus exemplos, mas isso não importa. A única coisa que você precisa fazer para mover dados para um sistema de arquivos compactado é reescrevê-los copiando-os, movendo-os ou preenchendo um novo sistema de arquivos.

Evite o problema em situações futuras ativando a compactação no nível do pool para que ele seja herdado pelos novos sistemas de arquivos. Além disso, use o sinalizador de compactação lz4 . Geralmente é melhor .

    
por 27.12.2014 / 02:03