Em sistemas de arquivos BTRFS você pode desabilitar o CoW para um arquivo usando o C
atributo file, assim:
chattr +C filename
Eu esperava que isso funcionasse no ZFS também, já que também é um sistema de arquivos CoW, mas o atributo não pode ser definido (talvez o ZFS não possa funcionar sem o CoW).
Então, quais sistemas de arquivos suportam totalmente o C
atributo file? Outros como XFS ou BCacheFS também respeitam esse sinalizador ou o BTRFS é o único sistema de arquivos que o faz?
Contexto: Criei um programa que instala uma máquina virtual, quando detecta que o sistema de arquivos host é BTRFS ele desabilita o CoW para a pasta com as imagens de disco virtual (caso contrário introduz problemas de desempenho). Apliquei o mesmo código ao ZFS, XFS e BCacheFS, mas tive que remover o ZFS porque ele não conseguiu definir o atributo. E agora fiquei em dúvida se preciso excluir o XFS e o BCacheFS também.
chattr
OC
atributo de corresponde aoFS_NOCOW_FL
sinalizador na UAPI do kernel (definido emlinux/fs.h
). Portanto, os únicos sistemas de arquivos que suportam esse atributo são aqueles que lidam com esse sinalizador : atualmente, são BTRFS e F2FS.Observe também que o suporte ao sistema de arquivos pode ser diferente para recuperar e definir atributos. Não há uma maneira imediata de verificar isso para BTRFS, você precisará ler
fs/btrfs/ioctl.c
- ele oferece suporte à configuração e recuperação doC
atributo. Para F2FS é mais fácil de ver : oC
atributo não pode ser definido, ele é usado apenas para identificar arquivos fixados (arquivos que não podem ser coletados como lixo - F2FS é um sistema de arquivos estruturado em log).