Como a opção de montagem btrfs nodatacow afeta os 3 discos neste cenário?

Como a opção de montagem btrfs nodatacow afeta os 3 discos neste cenário?

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 /cowe 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 nodatacowque 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=lzoas 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 nodatacowopçã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 nodatacowopção).

/nocowconté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 nodatacowopção mount pode ser aplicada a cada um dos três sistemas de arquivos separadamente.

No btrfsentanto, 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 nodatacowopçã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 +Cde pastas se elas ainda estiverem vazias!
  • Você deve criar novos arquivos apenas nas pastas que já existem chattr +Cou primeiro touchcopiá-los e depois copiar o conteúdo para eles (detalhes em [2]).

Assim, pode ser mais fácil usar a nodatacowopçã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 autodefragopçã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].

[1]https://btrfs.wiki.kernel.org/index.php/Compression#How_does_compression_interact_with_direct_IO_or_COW.3F

[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

informação relacionada