Wie wirkt sich die Mount-Option „btrfs nodatacow“ auf die 3 Festplatten in diesem Szenario aus?

Wie wirkt sich die Mount-Option „btrfs nodatacow“ auf die 3 Festplatten in diesem Szenario aus?

Ich verwende Arch Linux mit BTRFS. Dieser Computer hat 3 physische Festplatten (und kein RAID usw.). Ich habe eine Festplatte unter gemountet /, eine unter /cowund eine unter /nocow. Hier ist die 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

Ich verstehe, das nodatacowist einDateisystemMount-Option und daher wird esgelten für alle gemounteten Subvolumes dieses Dateisystems, wenn verwendet. Aber ich habe keine klare Definition eines Dateisystems. Manchmal kann sich ein Dateisystem über mehrere Festplatten erstrecken. Ist das, was mit der obigen fstab passiert? Gilt nodatacowdiese Option, wenn eine Festplatte mit gemountet wird, füralle dreimeiner physischen Festplatten? Oder habe ich 3 separate Dateisysteme, weil ich jede Festplatte separat formatiert habe und auf jeder Festplatte ein BTRFS-Dateisystem erstellt wurde?

compress=lzoZu einem verwandten Thema: Ich verstehe, dass die Komprimierung deaktiviert ist, wenn nodatacow aktiviert ist. Ich gehe davon aus, dass das bedeutet, dass ich die Option zum Mounten meiner dritten Festplatte wie folgt entfernen sollte :

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

Die wichtigste Frage ist, ob das Mounten dieser dritten Festplatte mit der nodatacowOption das gesamte Dateisystem (alle drei Festplatten und alle Verzeichnisse darunter /) oder nur das (einen Teil davon) des Dateisystems unter dem Mount-Punkt beeinflusst /nocow.

Wäre es besser, zu verwenden chattr +C /nocow? Ich habe das nicht getan, da ich nicht sicher bin, ob sich dieses Attribut auf ein Dateisystem auswirkt, das später in diesem Verzeichnis gemountet wird (und ohne die nodatacowOption gemountet wird).

/nocowenthält einige MySQL-Datenbanken.

Antwort1

Ich verstehe, dass nodatacow eine Einbindungsoption für Dateisysteme ist und daher bei Verwendung auf alle eingebundenen Subvolumes dieses Dateisystems angewendet wird. Aber ich habe keine klare Definition eines Dateisystems. Manchmal kann sich ein Dateisystem über mehrere Festplatten erstrecken. Ist das, was mit der obigen fstab passiert?

Da Sie drei verschiedene UUIDs mounten, vermute ich, dass Sie tatsächlich drei separate Dateisysteme haben.

Sie geben jedoch auch Untervolumes in Ihren Mounts an. Dies zeigt mir, dass Sie wahrscheinlich das folgende Layout haben:

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

Sie haben drei separate Dateisysteme mit jeweils einem Subvolume. In diesem Fall nodatacowkann die Mount-Option auf jedes der drei Dateisysteme separat angewendet werden.

Sie könnten jedoch btrfsauch nur ein Dateisystem haben (das sich möglicherweise über mehrere Festplatten erstreckt und möglicherweise, aber nicht notwendigerweise, eine Art RAID verwendet) und separate Subvolumes (ähnlich wie Ordner) dieses einen Dateisystems an verschiedenen Orten mounten. Das würde bedeuten, dass Sie ein Layout wie dieses hätten:

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

In diesem Fall nodatacowwürde eine Mount-Option für alle Subvolumes gelten, da sie sich auf demselben Dateisystem befinden.

Wird diese Option auf alle drei meiner physischen Festplatten angewendet, wenn ich eine Festplatte mit nodatacow mounte?

NEIN.

Oder habe ich drei separate Dateisysteme, weil ich jede Festplatte separat formatiert habe und auf jeder Festplatte ein BTRFS-Dateisystem erstellt wurde?

Ja.

Zu einem verwandten Thema: Soweit ich weiß, ist die Komprimierung deaktiviert, wenn nodatacow aktiviert ist.

Das ist richtig [1] und Sie können diese Mount-Option beim /nocow-Mount entfernen. Da Sie aber drei separate Dateisysteme haben, können die anderen beiden (/ und /cow) bei Bedarf immer noch mit aktivierter Komprimierung gemountet werden.

Wäre es besser, zu verwenden chattr +C /nocow?

Die Verwendung erweiterter Dateiattribute wie dieser zum Erreichen eines NoCow-Betriebs ist eine mögliche AlternativeAber:

  • Du musst chattr +Cdie Ordner löschen, wenn sie noch leer sind!
  • Dabei müssen entweder neue Dateien erst in bestehenden Ordnern angelegt werden chattr +Coder touchdiese zunächst gelöscht und der Inhalt anschließend in die Ordner kopiert werden (Details unter [2]).

Daher ist es möglicherweise einfacher, die nodatacowMount-Option und ein separates Dateisystem für VM- oder DB-Dateien zu verwenden, ähnlich wie Sie es bereits getan haben. (Sie könnten darüber nachdenken, ob Sie für dieses Dateisystem überhaupt Btrfs verwenden, da es in diesem Anwendungsfall nicht viele Vorteile bietet.)

Wenn Sie VM- oder DB-Dateien auf btrfs speichern, sollten Sie grundsätzlich auch die autodefragMount-Option mit einbeziehen, da große VM- oder DB-Dateien mit vielen zufälligen Schreibvorgängen sonst schnell fragmentieren und die Leistung beeinträchtigen können [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

verwandte Informationen