Conceituando o btrfs - entendendo os instantâneos e o espaço usado

2

Apenas começando a aprender sobre o btrfs e considerando a mudança.

Meu pensamento atual do btrfs é que opera de maneira semelhante ao git, com tudo rastreado e um commit acontecendo a cada 30 segundos após as alterações. Mas, meu instinto está me dizendo que eu devo ser mal-entendido, ou o espaço do disco rígido seria usado muito mais rápido - então eu estou querendo saber se é mais como git, com tudo rastreado, arquivos adicionados à área de teste a cada 30 segundos após as alterações e arquivos somente sendo confirmados em instantâneos.

  1. Se eu não fizer snapshots, você poderá reverter um único arquivo para várias alterações atrás? Ou isso é mantido apenas se você fizer instantâneos? Por exemplo, se você executar um loop for 10.000 vezes anexando a um arquivo com 31 segundos inativos, você verá uma árvore de ancestralidade para esse arquivo de 10.000 entradas e poderá voltar a cada uma delas?

  2. Os instantâneos do btrfs do root podem ser usados e considerados como instantâneos do VMware / VirtualBox? Onde você pode desligar em um, salvar seu estado, mover para outro, inicializar, fazer alterações para ter um ramo de snapshot divergente e mover-se para qualquer lugar ao longo da árvore desejada? Em caso afirmativo, existe um gerenciador de inicialização que permite escolher um nó da árvore de instantâneos? (Sem fazer entradas do menu grub.cfg para cada instantâneo.)

  3. Eu rotulo o snapshot A, faço alterações e o rotulo B. Se eu voltar ao snapshot A e fizer as alterações (mesmo que apenas inicializando a mudança do / var / log), estas são feitas em um "desanexado" ou instantâneo "sem rótulo", então essas mudanças seriam invisíveis se voltássemos para B? Em caso afirmativo, o que acontece se eu tiver alterações nesse instantâneo "não rotulado" e acidentalmente pedir para alterar para outro antes de rotulá-lo?

  4. Ao excluir um arquivo, há metadados "este arquivo é excluído" gravados, de modo que ainda haja espaço para todas as versões do arquivo? Ou, ele exclui todas as versões anteriores, supondo que não haja um instantâneo apontando para ele?

  5. Se eu criar o gcc a partir do código-fonte, por exemplo, acho que o diretório de compilação estará entre 5 e 8 GB. Se eu construí-lo periodicamente a partir da fonte, eu estou "mastigando" um monte de espaço no disco rígido, certo? (Mesmo supondo que a exclusão remova tudo para o arquivo que está sendo excluído, não sei quantos arquivos são excluídos no processo de compilação sem um make clean - se os arquivos de objetos existentes são tecnicamente excluídos ou apenas "reescritos dentro deles". )

por user1902689 12.06.2015 / 07:27

2 respostas

4

Acho que a maioria das suas perguntas pode ser respondida simplesmente lembrando que, no Btrfs, um instantâneo não é realmente especial, é apenas um subvolume do Btrfs. Acontece que, quando é criado, tem conteúdo inicial em vez de estar vazio, e o espaço de armazenamento para esses conteúdos iniciais é compartilhado com qualquer subvolume do qual o instantâneo veio.

Um instantâneo é como uma cópia (completa), exceto por ser mais econômico devido ao armazenamento compartilhado.

  1. If I don't do snapshots, can you roll back a single file to several changes ago?

Não. Assim como com qualquer sistema de arquivos regular, modificar arquivos é destrutivo. Você não pode magicamente voltar para uma versão anterior.

  1. Can btrfs snapshots of root be used and thought of just like VMware/VirtualBox snapshots?

As imagens de disco da VM são geralmente dispositivos de bloco, não sistemas de arquivos ou arquivos em sistemas de arquivos, então acho que é um pouco diferente.

Você poderia usar um arquivo Btrfs como repositório de armazenamento para um dispositivo de bloco virtual da VM, eu acho. Nesse caso, a resposta a essa pergunta é sim. Exceto se você usar a opção NOCOW (que é realmente recomendada para imagens de disco). Então provavelmente não, porque copy-on-write é a magia que faz os snapshots funcionarem.

  1. I label snapshot A, make changes and label it B. If I go back to snapshot A and make changes (even just by booting changing /var/log), are those changes made in a "detached" or "unlabeled" snapshot, so those changes would be invisible if going back to B?

Cada subvolume (incluindo snapshots) no Btrfs tem um nome, portanto você não pode ter um snapshot "sem rótulo".

Em geral, as alterações feitas em um subvolume do Btrfs (se ele foi criado como um instantâneo ou não) não são absolutamente visíveis em outro subvolume do Btrfs. Basta lembrar que um instantâneo é como uma cópia, mas mais econômico.

  1. When deleting a file, is there "this file is deleted" metadata written, so space is still taken by all the versions of the file?

Ao excluir um arquivo, sua entrada de diretório é removida. Isso é uma modificação no diretório e, como todas as modificações, ele será privado para o subvolume no qual ocorreu. Então, depois disso, se e somente se o espaço de armazenamento para o arquivo não for usado por qualquer outra parte do sistema de arquivos, ele será liberado.

Excluir um arquivo cujo armazenamento é compartilhado entre vários instantâneos é muito parecido com a exclusão de um arquivo em qualquer sistema de arquivos comum quando ele possui vários links (físicos). O armazenamento [inode] é liberado se não for mais referenciado.

  1. If I build gcc from source, as an example, I think the build directory winds up being 5-8GB. If I build it periodically from source, I'm "chewing up" a bunch of hard drive space, right?

Se você criar gcc várias vezes em vários diretórios diferentes, então sim, ele usará mais e mais espaço. Se você excluir cópias entre compilações ou sobrescrever o mesmo diretório de compilação a cada vez, então, não, não há nenhuma razão específica para continuar usando mais e mais espaço.

    
por 12.06.2015 / 07:55
1

My current thought of btrfs is that operates pretty much like git, …

Isso não acontece.

Os instantâneos funcionam mais como cp -a /path/to/source /path/to/snapshot , exceto pelo fato de compartilharem dados e fazer um instantâneo ser rápido. Mas esses dados são copy-on-write; se você gravar no arquivo, a parte que você escreveu não será mais compartilhada.

(Nota: cp tem --reflink opção que, em btrfs, faz cópias muito semelhantes a instantâneos.)

(1) Em geral, não. Somente se você fizer instantâneos.

(2) Eles estão mais próximos dos instantâneos do LVM. Você pode movê-los com btrfs send, no entanto. Mas não há ramos e tal - embora você possa fazer outro instantâneo.

(3) Eles fariam parte de A. B seria inalterado. A seria alterado.

(4) A exclusão de um arquivo libera espaço. Versões são mantidas apenas como parte de instantâneos.

(5) Ausência de bugs, não deve ser um problema, a menos que você decida criar snapshots. Então, é claro, isso irá ocupar espaço (liberado pela remoção do snapshot).

    
por 12.06.2015 / 07:54