Praktische Begrenzung der Anzahl von BTRFS-Snapshots?

23

Ich erwäge, btrfs auf meinem Datenlaufwerk zu verwenden, damit ich Snapper oder so etwas wie Snapper verwenden kann, um zeitbasierte Snapshots zu erstellen. Ich glaube, dass ich damit alte Versionen meiner Daten durchsuchen kann. Dies käme zu meiner aktuellen Offsite-Sicherung hinzu, da bei einem Laufwerksfehler die Daten und die Snapshots gelöscht würden.

Nach meinem Verständnis belegen BTRFS-Snapshots nicht viel Platz (Metadaten und die Blöcke, die sich geändert haben, plus möglicherweise etwas Overhead), sodass der Platz keine Einschränkung zu sein scheint.

Wenn ich über eine Million Schnappschüsse (z. B. zwei Jahre lang jede Minute einen Schnappschuss) verfüge, würde dies zu Chaos führen, vorausgesetzt, ich habe genügend Speicherplatz für die Daten, die geänderten Daten und die Metadaten?

Wenn die Anzahl der Schnappschüsse praktisch begrenzt ist, hängt dies von der Anzahl der Dateien und / oder der Größe der Dateien ab?

StrongBad
quelle

Antworten:

16

Als jemand, der seit fast Jahren ein btrfsDateisystem verwendet, kann ich mit Sicherheit sagen, dass die Anzahl der Schnappschüsse, die leicht zu erreichen sind, praktisch nicht begrenzt zu sein scheint. Es gibt jedoch einige Einschränkungen. Dateisystem kann zur Fragmentierung führen. Es wird daher empfohlen, die integrierte Online-Defragmentierungsfunktion zu verwenden . Darüber hinaus kann man die Komprimierungsfunktion gut nutzen . Mit diesen Maßnahmen sollten die meisten Leistungsprobleme behoben werden, die bei der Erstellung vieler Schnappschüsse auf einem vernünftigen Computer auftreten können.Arch Linux2btrfsbtrfsbtrfs

Wie Sie vielleicht wissen, werden btrfsSubvolumes als Dateisysteme behandelt, und daher ist die Anzahl der Snapshots in der Tat begrenzt: nämlich durch die Größe der Dateien. Laut btrfsWiki ist die maximal erreichbare Dateigröße 2^64 byte == 16 EiB[1] .

Abgesehen von diesen Einschränkungen kann es möglicherweise immer zu Problemen kommen, wenn der Speicherplatz knapp wird, ohne dass Sie dies sofort bemerken, da das Überprüfen auf freien Speicherplatz in btrfsDateisystemen manchmal schwierig sein kann, dh ohne zwischen verschiedenen Methoden zum Messen des freien Speicherplatzes in einem btrfsDateisystem unterscheiden zu können Verwenden Sie ganz einfach die Übersicht darüber, wie viel Speicherplatz noch vorhanden ist. Ein möglicher Weg, um dieses Szenario zu verhindern, ist die Verwendung von Quoten. Dies stellt sicher, dass Benutzer (oder der Benutzer, wenn es nur einer ist) nur eine bestimmte Menge an Speicherplatz verwenden können. Dieses Konzept wird hier und auch hier sehr gut diskutiert .

Last but not least eine Warnung: Ich bin kein Experte für btrfsDateisysteme und habe über diese Dinge erst gelesen, als ich vor einiger Zeit die gleiche Frage hatte. Darüber hinaus gibt es immer das Problem, dass btrfses sich um ein "sich schnell bewegendes Ziel" handelt (nette Formulierung, die Arch Linuxmeiner Meinung nach von einer Wiki-Seite gestohlen wird ), sodass sich die Dinge ändern könnten.

lord.garbage
quelle
1
Ich bin auch einer dieser früheren Adoptierer, und das ist verrückt.
MikeServ
Yep ziemlich viel los :)
Mark K Cowan
1
Sie sollten versuchen, weniger als 100 Snapshots auf einem BTRFS-Volume zu speichern. Andernfalls können Leistungsprobleme auftreten, insbesondere beim Löschen von Snapshots. Das Erstellen von Schnappschüssen ist kostengünstig, das Löschen jedoch nicht. Beachten Sie außerdem, dass die Empfehlung zur Defragmentierung zusammen mit der Verwendung von Snapshots die Speichereffizienz von Snapshots verringert. Durch das Defragmentieren werden die Reflinks unterbrochen und der belegte Speicherplatz vervielfacht.
MountainX für Monica Cellio
@MountainX kannst du das in einer Antwort erläutern. 100 Schnappschüsse auf einem Volume sind zwei Jahre lang nicht einmal eine pro Woche.
StrongBad
@StrongBad - Ich habe diese Informationen von der BTRFS-Mailingliste als Antwort auf ein Problem erhalten. Alle waren sich einig, dass es eine schlechte Idee ist, Hunderte oder Tausende von Schnappschüssen zu haben. Für eine technischere Antwort müssten Sie auf der BTRFS-Mailingliste nachfragen.
MountainX für Monica Cellio
5

Obwohl es technisch keine Begrenzung für die Anzahl der Schnappschüsse gibt, habe ich in der BTRFS-Mailingliste gefragt :

Die (praktische) Antwort hängt in gewissem Maße davon ab, wie Sie btrfs verwenden.

Btrfs hat Skalierungsprobleme, weil zu viele Snapshots vorhanden sind (oder weil die Reflink-Snapshots dieselben Skalierungsprobleme hervorrufen können), und einzelne bis niedrige zweistellige Werte für Snapshots pro aufgenommenem Subvolume sind aus diesem Grund nach wie vor die beste Empfehlung.

Die Skalierungsprobleme betreffen jedoch in erster Linie die btrfs-Wartungsbefehle selbst, balance, check, subvolume delete. Während Millionen von Schnappschüssen das Gleichgewicht zum Beispiel praktisch unbrauchbar machen (es wird eine Art Arbeit sein, aber es könnte Monate dauern), sind normale Dateisystemoperationen wie das Lesen und Speichern von Dateien in der Regel nicht betroffen, außer in dem Maße, in dem die Fragmentierung zum Problem wird ( Die Kuh-Dateisysteme wie btrfs sind für die Fragmentierung bekannt, es sei denn, es werden Schritte wie Defragmentierung unternommen, um sie zu reduzieren.

Es scheint, dass die Verwendung von Snapshots als Archivsicherung ähnlich wie bei Time Machine / Snapper keine gute Idee ist.

StrongBad
quelle
Time Machine ist keine Archivsicherung, sondern eine Sicherung. Ich teile deine Schlussfolgerung nicht. Die Verwendung von btrfs-Snapshots kann für Time Machine-ähnliche Sicherungen eine sehr gute Idee sein (da der Linux-Kernel kein Verzeichnis verknüpfen kann und daher für jeden Snap die vollständige Verzeichnisstruktur neu erstellt wird, was zu einer erheblichen Speicherplatzbelegung führen kann). Für ein Backup auf einem einzelnen Backup-Gerät, ohne zusätzliche Geräte hinzufügen zu wollen, ist es nicht einmal zweckmäßig, einen Balance-Befehl auszuführen. Die Antwort auf die btrfs-Liste versucht dies ebenfalls zu erklären.
Pro Backup
@ProBackup Die Antwort auf die BTRFS-Liste besagt, dass die Anzahl der Snapshots auf einzelne bis niedrige Zweifelszahlen beschränkt bleiben soll, was der Standard für den Arch für Snapper nicht wirklich tut. Während btrfs-balance für ein einfaches Setup nicht benötigt wird, mögen viele Benutzer die Idee von btrfs-check, auch wenn sie es nie brauchen, und das Löschen von Subvolumes scheint entscheidend, wenn Sie Subvolumes wie Snapper drehen möchten.
StrongBad
@ProBackup archival backup ist wahrscheinlich nicht der richtige Begriff für Time Machine. Es scheint, dass Time Machine mehr als nur ein inkrementelles Backup ist, aber ich war nicht sicher, es als Snapshot-basiertes Backup wie Snapper oder rsnapshot zu bezeichnen, aber vielleicht wäre das besser. Wir freuen uns, dass Sie den Begriff bearbeiten können, da Sie anscheinend viel über das Gebiet wissen.
StrongBad
Nach dem, was ich auf der Homepage von Snapper gelesen habe, ist Snapper kein Backup-Tool. Obwohl der Schnapper in der Zeit zurückgehen kann, heißt das nicht, dass er wie Time Machine ist. Der wesentliche Unterschied besteht darin, dass Time Machine Kopien aller Daten auf einem separaten Medium speichert , auf dem Snapper möglicherweise nicht einmal eine Kopie erstellt.
Pro Backup
@ProBackup, bitte schreibe eine Antwort und erkläre, warum meine Schlussfolgerungen bezüglich der Antwort auf der Mailingliste falsch sind. Auf diese Weise können wir sehen, wie sich die Community fühlt.
StrongBad
3

Sie können insgesamt 2 64 Snapshots und Subvolumes erstellen.

Die btrfsDesign-Wiki-Seite sagt (empahsis mine):

Subvolumes sind im Grunde ein benannter Btree, der Dateien und Verzeichnisse enthält. Sie haben Inodes innerhalb des Baumes der Baumwurzeln und können Nicht-Stammbesitzer und -gruppen haben. Subvolumes können mit einem Kontingent von Blöcken versehen werden. Sobald dieses Kontingent erreicht ist, sind keine neuen Schreibvorgänge mehr zulässig. Alle Blöcke und Dateierweiterungen in Subvolumes werden mit einem Referenzzähler versehen, um eine Momentaufnahme zu ermöglichen. Auf dem FS können bis zu 2 64 Subvolumes erstellt werden.

Snapshots sind mit Subvolumes identisch , aber ihr Root-Block wird anfänglich mit einem anderen Subvolume geteilt. Wenn der Snapshot erstellt wird, wird die Referenzanzahl im Stammblock erhöht, und das Transaktionssystem für das Kopieren beim Schreiben stellt sicher, dass Änderungen, die entweder im Snapshot oder im Quell-Subvolume vorgenommen wurden, für diesen Stamm privat sind. Schnappschüsse sind beschreibbar und können beliebig oft wiederholt werden. Wenn schreibgeschützte Snapshots gewünscht werden, wird das Blockkontingent zum Zeitpunkt der Erstellung auf eins festgelegt.

Tom Hale
quelle