
Estou executando o Arch Linux com BTRFS. Este computador possui 3 HDDs físicos (e nenhum RAID, etc.). Eu tenho um disco montado em /
, um em /cow
e um em /nocow
. Aqui está o fstab:
# /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
UUID=a101 / btrfs rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@ 0 0
UUID=b202 /cow btrfs rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@cow 0 0
UUID=c303 /nocow btrfs rw,noatime,nodiratime,compress=lzo,space_cache,nodatacow,subvol=/@nocow 0 0
Eu entendo que nodatacow
é umsistema de arquivoopção de montagem e, portanto, seráaplica-se a todos os subvolumes montados desse sistema de arquivos, quando usado. Mas não tenho uma definição clara de sistema de arquivos. Às vezes, um sistema de arquivos pode abranger vários discos. É isso que está acontecendo com o fstab acima? Montar um disco faz com nodatacow
que essa opção se aplique atodos trêsdos meus discos físicos? Ou porque quando formatei cada disco separadamente e um sistema de arquivos BTRFS foi criado em cada disco, tenho três sistemas de arquivos separados?
Sobre um tópico relacionado, entendo que quando o nodatacow está habilitado, a compactação está desabilitada. Presumo que isso significa que devo remover compress=lzo
as opções de montagem do meu terceiro disco, assim:
UUID=c303 /nocow btrfs rw,noatime,nodiratime,space_cache,nodatacow,subvol=/@nocow 0 0
A questão mais importante é se a montagem deste terceiro disco com a nodatacow
opção afeta todo o sistema de arquivos (todos os 3 discos e todos os diretórios sob /
) ou apenas a (parte do) sistema de arquivos sob o ponto de montagem /nocow
.
Seria melhor usar chattr +C /nocow
? Não fiz isso porque não tenho certeza se esse atributo afeta um sistema de arquivos que é posteriormente montado nesse diretório (e montado sem a nodatacow
opção).
/nocow
contém alguns bancos de dados mysql.
Responder1
Entendo que nodatacow é uma opção de montagem do sistema de arquivos e, portanto, será aplicada a todos os subvolumes montados desse sistema de arquivos, quando usado. Mas não tenho uma definição clara de sistema de arquivos. Às vezes, um sistema de arquivos pode abranger vários discos. É isso que está acontecendo com o fstab acima?
Como você está montando três UUIDs diferentes, suspeito que você realmente tenha três sistemas de arquivos separados.
No entanto, você também está especificando subvolumes em suas montagens. Isso me mostra que você provavelmente tem o seguinte layout:
HDD1
└──── Filesystem 1 (a101)
└──── Subvolume /@ mounted at /
HDD2
└──── Filesystem 2 (b202)
└──── Subvolume /@cow mounted at /cow
HDD3
└──── Filesystem 3 (c303)
└──── Subvolume /@nocow mounted at /nocow
Você tem três sistemas de arquivos separados, cada um com um subvolume. Neste caso a nodatacow
opção mount pode ser aplicada a cada um dos três sistemas de arquivos separadamente.
No btrfs
entanto, você também pode ter apenas um sistema de arquivos (possivelmente abrangendo vários HDDs e possivelmente, mas não necessariamente, usando alguma forma de RAID) e montar subvolumes separados (semelhantes a pastas) desse sistema de arquivos em locais separados. Isso significaria que você teria algum layout como este:
HDD1 [...HDDn]
└──── Filesystem 1
├──── Subvolume /@ mounted at /
├──── Subvolume /@cow mounted at /cow
└──── Subvolume /@nocow mounted at /nocow
Nesse caso, uma nodatacow
opção de montagem seria aplicada a todos os subvolumes, uma vez que residem no mesmo sistema de arquivos.
Montar um disco com nodatacow faz com que essa opção se aplique a todos os meus três discos físicos?
Não.
Ou porque quando formatei cada disco separadamente e um sistema de arquivos BTRFS foi criado em cada disco, tenho três sistemas de arquivos separados?
Sim.
Sobre um tópico relacionado, entendo que quando o nodatacow está habilitado, a compactação está desabilitada.
Isso é verdade [1] e você pode remover essa opção de montagem na montagem /nocow. Mas como você tem três sistemas de arquivos separados, os outros dois (/ e /cow) ainda podem ser montados com compactação habilitada, se desejar.
Seria melhor usar
chattr +C /nocow
?
Usar atributos de arquivo estendidos como este para realizar a operação nocow é uma alternativa possívelmas:
- Você precisa
chattr +C
de pastas se elas ainda estiverem vazias! - Você deve criar novos arquivos apenas nas pastas que já existem
chattr +C
ou primeirotouch
copiá-los e depois copiar o conteúdo para eles (detalhes em [2]).
Assim, pode ser mais fácil usar a nodatacow
opção mount e um sistema de arquivos separado para arquivos VM ou DB semelhante ao que você já fez. (Você pode pensar em usar o Btrfs para esse sistema de arquivos, pois ele não traz muitos benefícios neste caso de uso.)
Geralmente, ao armazenar arquivos VM ou DB em btrfs, considere incluir também a autodefrag
opção de montagem, pois, caso contrário, grandes arquivos VM ou DB com muitas gravações aleatórias podem rapidamente fragmentar e deteriorar o desempenho [3].
[2]https://btrfs.wiki.kernel.org/index.php/FAQ#Can_copy-on-write_be_turned_off_for_data_blocks.3F
[3]https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation