¿Cómo afecta la opción de montaje btrfs nodatacow a los 3 discos en este escenario?

¿Cómo afecta la opción de montaje btrfs nodatacow a los 3 discos en este escenario?

Estoy ejecutando Arch Linux con BTRFS. Esta computadora tiene 3 HDD físicos (y ningún RAID, etc.). Tengo un disco montado en /, uno en /cowy otro en /nocow. Aquí está el 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

Entiendo que nodatacowes unsistema de archivosopción de montaje y, por lo tanto,aplicar a todos los subvolúmenes montados de ese sistema de archivos, cuando se usa. Pero no tengo una definición clara de sistema de archivos. A veces, un sistema de archivos puede abarcar varios discos. ¿Es eso lo que está pasando con el fstab anterior? ¿Montar un disco con nodatacowesa opción se aplica alos tresde mis discos físicos? O, porque cuando formateé cada disco por separado y se creó un sistema de archivos BTRFS en cada disco, ¿tengo 3 sistemas de archivos separados?

En un tema relacionado, entiendo que cuando nodatacow está habilitado, la compresión está deshabilitada. Supongo que eso significa que debo eliminar compress=lzolas opciones para montar mi tercer disco, así:

UUID=c303 /nocow btrfs rw,noatime,nodiratime,space_cache,nodatacow,subvol=/@nocow 0 0

La pregunta más importante es si montar este tercer disco con la nodatacowopción afecta a todo el sistema de archivos (los 3 discos y todos los directorios bajo /) o solo a (parte de) el sistema de archivos bajo el punto de montaje /nocow.

¿Sería mejor usarlo chattr +C /nocow? No hice eso porque no estoy seguro de si ese atributo afecta un sistema de archivos que luego se monta en ese directorio (y se monta sin la nodatacowopción).

/nocowcontiene algunas bases de datos mysql.

Respuesta1

Entiendo que nodatacow es una opción de montaje del sistema de archivos y, por lo tanto, se aplicará a todos los subvolúmenes montados de ese sistema de archivos, cuando se use. Pero no tengo una definición clara de sistema de archivos. A veces, un sistema de archivos puede abarcar varios discos. ¿Es eso lo que está pasando con el fstab anterior?

Dado que está montando tres UUID diferentes, sospecho que efectivamente tiene tres sistemas de archivos separados.

Sin embargo, también está especificando subvolúmenes en sus montajes. Esto me muestra que probablemente tengas el siguiente diseño:

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

Tiene tres sistemas de archivos separados, cada uno con un subvolumen. En este caso, la nodatacowopción de montaje se puede aplicar a cada uno de los tres sistemas de archivos por separado.

Sin btrfsembargo, también podría tener un solo sistema de archivos (posiblemente abarcando varios discos duros y posiblemente, pero no necesariamente, usando algún tipo de RAID) y montar subvolúmenes separados (similares a carpetas) de ese sistema de archivos en lugares separados. Esto significaría que tendrías un diseño como este:

HDD1 [...HDDn]
└──── Filesystem 1
      ├──── Subvolume /@ mounted at /
      ├──── Subvolume /@cow mounted at /cow
      └──── Subvolume /@nocow mounted at /nocow

En ese caso, nodatacowse aplicaría una opción de montaje a todos los subvolúmenes ya que residen en el mismo sistema de archivos.

¿Montar un disco con nodatacow hace que esa opción se aplique a mis tres discos físicos?

No.

O, porque cuando formateé cada disco por separado y se creó un sistema de archivos BTRFS en cada disco, ¿tengo 3 sistemas de archivos separados?

Sí.

En un tema relacionado, entiendo que cuando nodatacow está habilitado, la compresión está deshabilitada.

Eso es cierto [1] y puede eliminar esa opción de montaje en el montaje /nocow. Pero como tiene tres sistemas de archivos separados, los otros dos (/ y /cow) aún se pueden montar con la compresión habilitada si lo desea.

¿Sería mejor usarlo chattr +C /nocow?

Usar atributos de archivo extendidos como este para lograr la operación ahora es una posible alternativapero:

  • ¡Tienes que chattr +Ccarpetas si todavía están vacías!
  • Tienes que crear nuevos archivos sólo en carpetas que ya están chattr +Co primero touchy luego copiar el contenido en ellas (detalles en [2]).

Por lo tanto, podría ser más fácil usar la nodatacowopción de montaje y un sistema de archivos separado para archivos VM o DB similar al que ya hizo. (Podría pensar en utilizar Btrfs para ese sistema de archivos, ya que no tiene muchos beneficios en este caso de uso).

Generalmente, cuando almacene archivos VM o DB en btrfs, considere incluir también la autodefragopción de montaje, ya que, de lo contrario, los archivos VM o DB grandes con muchas escrituras aleatorias pueden fragmentarse rápidamente y deteriorar el rendimiento [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

información relacionada