Como apagar um arquivo em todos os instantâneos em um sistema btrfs?

3

Configurei um esquema de backup sofisticado com backups mensais, diários, semanais e mensais que são aproveitados (graças à glória do sistema de arquivos cow-btrfs) quase sem espaço extra no dispositivo.

Mas infelizmente fiquei sem espaço à moda antiga (copiando para muita coisa).

Agora, excluir algo é inútil, pois persiste em todos os instantâneos. Para liberar o espaço em disco, eu teria que excluir todos os instantâneos desde que o arquivo foi copiado pela primeira vez para o dispositivo. Eu não quero fazer isso porque

  • é difícil descobrir quando exatamente isso foi (especialmente se os arquivos foram alterados desde então)
  • Eu não quero perder o histórico de todos os outros arquivos nesses instantâneos
  • acessar os instantâneos só pode ser feito montando-os, com um pouco mais complicado para um root-fs, em seguida, apenas fazendo rm -f

Então, como eu digo ao btrfs para excluir um único arquivo em todos os instantâneos? Efetivamente, isso significa definir um contador de referência interno como zero, para que o espaço possa ser liberado.

Se isso não for possível com as próprias ferramentas btrfs (o que seria um pouco míope), também estou feliz com qualquer ferramenta de terceiros que possa facilitar a tarefa de pesquisar, montar e excluir um arquivo em todos os instantâneos.

    
por Chaos_99 12.01.2015 / 08:53

1 resposta

7

Uma solução alternativa é definir temporariamente os instantâneos graváveis e excluir os arquivos em todos os instantâneos nos quais eles aparecem.

Para definir um instantâneo gravável (de Como criar um instantâneo de btrfs gravável? ):

btrfs property set -ts <snapshot> ro false

Exclua os arquivos para liberar espaço e configure-o de volta para somente leitura com

btrfs property set -ts <snapshot> ro true

Assim que todas as referências aos arquivos terminarem, o btrfs detectará que há mais espaço livre.

Infelizmente, esse método não ajuda muito se você perdeu a noção do que os arquivos costumavam nomear. Mas você ainda pode usar o Baobab ou o K4DirStat ou du -h | sort -h para descobrir onde estão os arquivos grandes nos instantâneos.

Além disso, você não precisa montar cada instantâneo individualmente, se puder simplesmente montar o diretório que os contém.

    
por 19.02.2015 / 04:37