tirar instantâneos de um volume BTRFS montado com nodatacow?

4

Eu pretendo criar dois subvolumes em um disco giratório formatado em BTRFS. Eu pretendo montar um desses subvolumes com nodatacow para que eu possa armazenar com eficiência imagens de máquinas virtuais e arquivos de banco de dados.

Existe algum problema ao usar o snapper para permitir instantâneos do subvolume montado com nodatacow?

O que devo saber ao tirar instantâneos de volumes que não usam COW?

Tudo o que encontrei até agora é uma frase na FAQ do BTRFS:

Can copy-on-write be turned off for data blocks?

Yes, there are several ways how to do that.

Disable it by mounting with nodatacow. This implies nodatasum as well. COW may still happen if a snapshot is taken.

    
por MountainX 26.05.2016 / 22:02

1 resposta

10

Com relação à opção nodatacow , o artigo de Ohad Rodeh intitulado BTRFS: O sistema de arquivos B-tree do Linux afirma:

It cancels copy-on-write for data blocks, unless there is a snapshot.

Não há problema em criar um instantâneo de um subvolume montado com nodatacow . Mas como cow é necessário para criar um snapshot, quando você cria um em um subvolume com nodatacow ele essencialmente irá ignorar nodatacow ; agindo como normalmente faria.

Isso, no entanto, traz uma questão interessante: o nodatacow é ignorado permanentemente? Criar um instantâneo de um subvolume com COW desativado, reativar COW até que seja manualmente desativado novamente?

Felizmente não. Da lista de discussão do btrfs

On a NOCOW file the first write to a fileblock (4096 bytes) after a snapshot must still be COW, because the snapshot locks the old version in place, and now the fileblock has changed, so it MUST be written elsewhere despite the NOCOW in ordered to keep the snapshot as it was. However, the file does retain the NOCOW attribute and additional writes to the same fileblock will be in-place... until the next snapshot of course.

    
por 28.05.2016 / 06:42