
Ich verwende Arch Linux mit BTRFS. Dieser Computer hat 3 physische Festplatten (und kein RAID usw.). Ich habe eine Festplatte unter gemountet /
, eine unter /cow
und 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 nodatacow
ist 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 nodatacow
diese 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=lzo
Zu 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 nodatacow
Option 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 nodatacow
Option gemountet wird).
/nocow
enthä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 nodatacow
kann die Mount-Option auf jedes der drei Dateisysteme separat angewendet werden.
Sie könnten jedoch btrfs
auch 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 nodatacow
wü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 +C
die Ordner löschen, wenn sie noch leer sind! - Dabei müssen entweder neue Dateien erst in bestehenden Ordnern angelegt werden
chattr +C
odertouch
diese zunächst gelöscht und der Inhalt anschließend in die Ordner kopiert werden (Details unter [2]).
Daher ist es möglicherweise einfacher, die nodatacow
Mount-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 autodefrag
Mount-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].
[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