ZFS: Removendo arquivos de instantâneos?


10

Digamos que eu tenha um conjunto de dados com 100 instantâneos e queira rm -rftodas as pastas denominadas "cache" em todos os instantâneos.

Quero realmente liberar o espaço, não apenas escondê-lo em camadas de instantâneos, então criar um clone e removê-lo e depois tirar um novo instantâneo não parece fazer o que eu quero.

Alguma maneira semi-automática de fazer isso? Alguns que envolvem o zfs listam -t snapshot, zfs clone, zfs promotion, zfs snapshot?

(postagem cruzada em /superuser/313197, pois vejo que isso tem mais coisas sobre o ZFS)


3
Não faça cruzamento, mas aguarde a migração da sua pergunta.
Sven

Além disso, não tenho certeza de que isso seja possível: os instantâneos são somente leitura e, se você usar o par clone / promoção, você reverterá a dependência entre o instantâneo clonado e o conjunto de dados "HEAD", o que provavelmente não é o que você deseja. quer. Consulte o documento aqui: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven

Eu esperaria pela migração, mas também parecia ser uma quantidade razoável de perguntas sobre o ZFS no SU, por isso duvidei que ele fosse movido automaticamente ... ele se encaixa nos dois lugares, então segui um meta-guia sobre como ser legal sobre cross -posting.
Tino Didriksen

@TinoDidriksen você poderia fornecer uma referência a essa meta post, por favor? Eu gostaria de ver. Obrigado.
Nhinkle

2
A postagem que você mencionou não é uma política oficial. Há uma FAQ no MSO explicando como lidar com perguntas que o usuário pensa que estão no tópico para vários sites. Para resumir, a postagem cruzada não é permitida. Se você decidir, depois de publicar, que seria melhor em outro lugar e não obteve boas respostas, poderá sinalizá-lo para migrar ou excluí-lo e pedir novamente, mas deve adaptar o post ao site em que estiver perguntando. Você reenviou exatamente a mesma pergunta, palavra por palavra, sem esperar, o que falha nas diretrizes das duas postagens meta sobre postagem cruzada.
Nhinkle

Respostas:


9

Os instantâneos são somente leitura. Se você precisar dessas pastas, precisará excluir o instantâneo inteiro.

Você pode fazer um backup (com algo parecido com tar), excluindo as pastas ofensivas e excluindo o instantâneo. Obviamente, o backup agora está no formato tar, ou o que for; mas pelo menos você ainda tem uma cópia de backup.


2
A verdadeira chatice com esta solução é que agora você precisa armazenar todos os dados n vezes reais, enquanto um instantâneo armazenaria apenas blocos modificados. Dessa forma, você provavelmente terá muito mais espaço necessário do que economizou ao excluir os caches dos arquivos tar.
Sven

Dedupe ajudaria com isso, mas você está correto. Tenho quase certeza de que não há como modificar esses instantâneos da maneira que ele deseja.
22711 Chris S

Eu tenho compactação e desduplicação gzip-1 ativadas, portanto, copiar dados idênticos apenas ocupa espaço na contabilidade. Mas é claro que gostaria de alguma maneira de evitar a cópia.
Tino Didriksen

Duvido que, no caso de vários arquivos tar com quase a mesma desduplicação de dados, isso ajudaria muito, pois adicionar ou subtrair apenas um byte no início do arquivo significaria que nenhum bloco seria idêntico a outro, tornando a desduplicação inútil.
Sven

@SvenW Depois de reler a pergunta, vejo que ele está fazendo isso para tentar economizar espaço; com a qual minha resposta realmente não está ajudando, a menos que ele remova os arquivos tar do computador, com o qual ele poderia exportar os instantâneos de qualquer maneira. Parece que ele está preso por toda parte.
22611 Chris S

14

Você pode tentar o seguinte:

  1. Clone o instantâneo mais antigo em um novo sistema de arquivos (chame-o fsnew).
  2. Promova o clone ( fsnew) para permitir que você destrua o instantâneo no qual o sistema de arquivos se baseia.
  3. Remova os arquivos incorretos.
  4. Crie uma captura instantânea de fsnew.

Agora, foreach snapshot after, rsynccom o --inplacesinalizador do snapshot para fsnew pulando os arquivos que você não deseja. O --inplacesinalizador reduz o número de gravações e permite capturas instantâneas menores.

  1. Crie uma captura instantânea de fsnew.
  2. Destrua o instantâneo original.

Quando isso for feito, você deverá ter um instantâneo fsnewque corresponda aos instantâneos do sistema de arquivos original com os arquivos incorretos removidos.

Se você tiver espaço na unidade, pode pular o comando "destroy" até ter seu script funcionando corretamente.


Você também precisará passar a --deleteopção para rsync, caso contrário, perderá exclusões ocorridas entre os instantâneos. Caso contrário, é uma ótima idéia.
Tobia

1
  1. Destrua o instantâneo original.

Você não pode destruir o instantâneo original após promover a ação. Somente se isso destruir o conjunto de dados pai.

exemplo (depois de promover o clone).

O zfs destrói media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

não é possível destruir 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': o instantâneo tem clones dependentes

use '-R' para destruir os seguintes conjuntos de dados:

media1/media/backup@auto-20190531.1622-2y

media1 / media / backup

zfs destroy media1/media/backup@auto-20190531.1622-2y

O zfs destrói media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y

não é possível destruir 'media1/cheers/backup-auto-20190530.2105-2y-clone@auto-20190530.2105-2y': o instantâneo tem clones dependentes

use '-R' para destruir os seguintes conjuntos de dados:

media1 / media / backup

Após essa operação "engraçada", devo fazer as próximas

snapshot do zfs media1 / media / backup @ 1

zfs envia media1 / media / backup @ 1 | pv Os zfs recebem media1 / media / backupnew

O zfs destrói media1 / media / backup @ 1

zfs destroy -R media1 / media / backup

zfs renomeia mídia1 / mídia / backupnova mídia1 / mídia / backup

OU invertido promover um. O zfs promove media1 / media / backup e depois exclui o clone anuway, porque você terá um grande instantâneo no local src))

Somente o rsync / backup pode ajudar aqui.


-3

Os instantâneos do ZFS para um sistema de arquivos ZFS específico podem ser encontrados no .zfs/snapshotsdiretório na raiz do sistema de arquivos. Você deve conseguir escrever um script que atravesse esta pasta e rmos arquivos necessários, que devem ser excluídos dos próprios instantâneos.


3
Os instantâneos do ZFS são somente leitura. Você não pode excluir deles.
Sven

Meu mal, não sei onde eu tive a impressão de que você poderia :(
growse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.