Funktionieren LVM-Snapshots so?

19

Ich versuche herauszufinden, wie LVM-Snapshots funktionieren, damit ich sie auf meinem Dateiserver implementieren kann, aber ich habe Schwierigkeiten, bei Google etwas zu finden, das erklärt, wie es funktioniert, anstatt es für ein Basissicherungssystem zu verwenden.

Nach dem, was ich gelesen habe, funktioniert es ungefähr so:

  • Sie haben eine LVM mit einer primären Partition und sehr viel nicht zugewiesenem freiem Speicherplatz, der sich nicht in der Partition befindet
  • Anschließend erstellen Sie einen Snapshot und hängen ihn auf einem neuen logischen Volume an. Snapshots sollten Änderungen aufweisen, sodass dieser erste Snapshot eine vollständige Kopie ist, richtig?
  • Am nächsten Tag erstellen Sie dann einen weiteren Snapshot (die Partitionsgröße muss nicht so groß sein) und hängen ihn ein.
  • Irgendwie verfolgt der LVM die Snapshots und speichert keine unveränderten Bits auf dem primären Volume.
  • Dann entscheiden Sie, dass Sie genug Schnappschüsse haben und den ersten loswerden. Ich habe keine Ahnung, wie das funktioniert oder wie sich das auf den nächsten Schnappschuss auswirken würde.

Kann mich jemand korrigieren wo ich falsch liege. Ich schätze, ich kann bei Google nichts finden.


vgdiplay

obu1: / home / jail / home / qps / backup / D # vgdisplay
  --- Volumengruppe ---
  VG Name fileserverLVM
  System ID
  Formatieren Sie lvm2
  Metadatenbereiche 1
  Metadatensequenz Nr. 3
  VG Access lesen / schreiben
  VG Status veränderbar
  MAX LV 0
  Cur LV 2
  Öffnen Sie LV 2
  Max PV 0
  Aktuelle PV 1
  Handlung PV 1
  VG-Größe 931,51 GB
  PE Größe 4,00 MB
  Gesamt PE 238467
  Alloc PE / Größe 238336 / 931.00 GB
  Freies PE / Größe 131 / 524,00 MB
  VG UUID qSGaG1-SQYO-D2bm-ohDf-d4eG-oGCY-4jOegU
Malfist
quelle

Antworten:

30

Möchten Sie den Abschnitt mit den Schnappschüssen des LVM-HOWTO nicht lesen ?

LVM-Snapshots sind Ihre grundlegende "Copy-on-Write" -Snapshot-Lösung. Der Schnappschuss ist eigentlich nichts anderes, als den LVM aufzufordern, Ihnen einen "Zeiger" auf den aktuellen Status des Dateisystems zu geben und die nach dem Schnappschuss vorgenommenen Änderungen in einen festgelegten Bereich zu schreiben.

LVM-Snapshots befinden sich "live" in der Volume-Gruppe, auf der sich das Volume befindet, für das der Snapshot gilt - nicht ein anderes Volume. Ihre Aussage "... sehr viel nicht zugeteilter freier Speicherplatz, nicht die Partition" lässt den Eindruck entstehen, dass die Snapshots außerhalb der Volume-Gruppe "leben", die Gegenstand eines Snapshots ist, und das ist nicht korrekt. Ihre Datenträgergruppe befindet sich auf einer Festplattenpartition, und der Datenträger, für den ein Snapshot erstellt wurde, sowie alle Shapshots, die Sie in dieser Datenträgergruppe erstellt haben, werden live übertragen.

Die normale Art und Weise, wie LVM-Snapshots verwendet werden, dient nicht der Langzeitspeicherung, sondern dient dazu, ein konsistentes "Bild" des Dateisystems zu erhalten, sodass ein Backup erstellt werden kann. Sobald die Sicherung abgeschlossen ist, wird der Snapshot verworfen.

Wenn Sie einen LVM-Snapshot erstellen, legen Sie einen Speicherplatz fest, in dem alle während des Snapshots vorgenommenen Änderungen gespeichert werden. Wenn mehr Änderungen vorgenommen werden, als Sie für den Schnappschuss festgelegt haben, wird der Speicherplatz unbrauchbar und muss verworfen werden. Sie möchten keine Snapshots herumliegen lassen, weil (a) sie sich füllen und unbrauchbar werden und (b) die Leistung des Systems beeinträchtigt wird, während ein Snapshot aktiv ist - die Dinge werden langsamer.

Bearbeiten:

Was Microsoft Volume Shadow Copy Services und LVM-Snapshots bewirken, ist nicht allzu unterschiedlich. Die Lösung von Microsoft ist ein bisschen umfassender (wie es normalerweise bei Microsoft der Fall ist - die Tools und Produkte von Microsoft versuchen häufig, größere Probleme zu lösen, anstatt sich auf eine Sache zu konzentrieren).

VSS ist eine umfassendere Lösung, die die Unterstützung für Hardwaregeräte, die Snapshots und softwarebasierte Snapshots unterstützen, in einer einzigen API vereint. Darüber hinaus verfügt VSS über APIs, mit denen Anwendungen über die Snapshot-APIs in den Ruhezustand versetzt werden können, während sich LVM-Snapshots nur mit Snapshots befassen.

Evan Anderson
quelle
1
Es ist also nicht wirklich nach dem Vorbild von Volume Shadow Copy (VSS) aufgebaut, denn so funktioniert VSS nicht?
Malfist
Das macht viel mehr Sinn.
Malfist
1
Ich denke, Sie verstehen LVM-Snapshots etwas falsch. LVM-Snapshots erstellen "virtuelle" Geräte, die wie eigenständige Volumes bereitgestellt werden, aber eigentlich keine "Partitionen" sind. LVM-Snapshots "leben" auf dem Volume, auf dem ein Snapshot erstellt wird, genau wie VSS-Snapshots.
Evan Anderson
1
Könnten Sie bitte klären, wohin die aktualisierten Daten gehen, während ein Schnappschuss aktiv ist? zum Haupt-LV und der Schnappschuss speichert eine Kopie des alten Blocks? oder zum Snapshot LV, während der Haupt-LV unberührt bleibt?
Benoît
1
@benoit der Link in der ersten Zeile der Antwort behandelt dies. Lesen Sie dort den Hinweis zum schreibgeschützten Snapshot-Verhalten von LVM1, und ich denke, Sie haben Ihre Antwort. (Es ist der erste Ansatz, den Sie beschreiben, nicht der zweite.)
Peter Hansen
28

LVM-Snapshots sind ein Beispiel für eine Copy-on-Write-Snapshot-Lösung, wie Evan sagte. Wie es funktioniert, ist ein bisschen anders als bei Evan, aber nicht viel anders.

Wenn Sie ein LVM-Volume ohne Snapshots haben, geschieht das Schreiben auf das Volume wie erwartet. Ein Block wird geändert und das wars.

Sobald Sie einen Snapshot erstellen, erstellt LVM einen Pool von Blöcken. Dieser Pool enthält auch eine vollständige Kopie der LVM-Metadaten des Volumes. Wenn Schreibvorgänge auf dem Hauptdatenträger stattfinden, z. B. das Aktualisieren eines Inodes, wird der zu überschreibende Block in diesen neuen Pool kopiert und der neue Block auf den Hauptdatenträger geschrieben. Dies ist das "Copy-on-Write". Je mehr Daten zwischen der Erstellung eines Snapshots und dem aktuellen Status des Hauptvolumes geändert werden, desto mehr Speicherplatz beansprucht der Snapshot-Pool.

Wenn Sie den Snapshot mounten, können die beim Erstellen des Snapshots geschriebenen Metadaten die Zuordnung von Snapshot-Poolblöcken zu geänderten Blöcken im Volume (oder Snapshot einer höheren Ebene) ermöglichen. Auf diese Weise weiß LVM, welcher Blockzugriff vorliegt, wenn ein Zugriff für einen bestimmten Block erfolgt. Für das Dateisystem auf diesem Volume gibt es keine Snapshots.

James wies auf einen der Fehler dieses Systems hin. Wenn Sie mehrere Snapshots auf demselben Volume haben, lösen Sie jedes Mal, wenn Sie in einen Block auf dem Haupt-Volume schreiben, möglicherweise Schreibvorgänge in jedem einzelnen Snapshot aus. Dies liegt daran, dass jeder Snapshot seinen eigenen Pool geänderter Blöcke verwaltet. Bei langen Snapshot-Bäumen kann der Zugriff auf einen Snapshot dazu führen, dass auf dem Server eine Reihe von Berechnungen durchgeführt werden, um herauszufinden, welcher Block für einen Zugriff bereitgestellt werden muss.

Wenn Sie einen Snapshot löschen, löscht LVM nur den Snapshot-Pool und aktualisiert den Snapshot-Baum nach Bedarf. Wenn der abgelegte Snapshot Teil eines Snapshot-Baums ist, werden einige Blöcke in einen Snapshot einer niedrigeren Ebene kopiert. Wenn es sich um den niedrigsten (oder den einzigen) Snapshot handelt, wird der Pool einfach gelöscht und die Operation ist sehr schnell.


Einige Dateisysteme bieten Snapshots im Dateisystem an, ZFS und BTRFS sind nur zwei der bekannteren. Sie funktionieren ähnlich, obwohl das Dateisystem selbst das geänderte / unveränderte Mapping verwaltet. Dies ist wahrscheinlich eine bessere Methode, da Sie eine ganze Snapshot-Familie auf Konsistenz prüfen können, was mit Straight-up-LVM nicht möglich ist.

sysadmin1138
quelle
Dankbar für diese ausführliche Erklärung. Es tut mir leid, dass ich verwirrt bin über "Was das Dateisystem auf diesem Volume betrifft, gibt es keine Schnappschüsse." Könntest du mehr darüber erklären, was das bedeutet? Sehr dankbar für jede Antwort ~
Carr
2
@Carr Dies bedeutet, dass Snapshots vollständig außerhalb des Dateisystems verarbeitet werden. Andere Dateisysteme wie BTRFS und XFS, die über eine integrierte Snapshot-Funktion verfügen, haben ein Konzept für Snapshots, und Sie sollten mit diesen Systemen keine LVM-Snapshots verwenden.
sysadmin1138
@ sysadmin1138 Ich bin gespannt auf die von Ihnen erwähnten eingebauten Snapshots mit XFS zum Zwecke der Konsistenzprüfung / Reparatur von FS. Ich habe einen Multi-TB-XFS-FS, der auf schmutzige Weise heruntergekommen ist, und ich möchte ihn überprüfen / reparieren, ohne ihn offline zu schalten (Hunderte von Benutzern können stundenlang nicht offline gehen). Ich denke daran, einen XFS-Schnappschuss zu erstellen und dann fsck darauf auszuführen, um Fehler zu finden / zu beheben, während das Live-Dateisystem online bleibt, und wenn dies behoben ist, mit dem Live-Dateisystem auszutauschen. Wäre ein XFS-Snapshot für diesen Zweck besser als ein LVM-Snapshot?
Ján Lalinský
2

Sie geben nicht an, ob Sie Linux oder HP-UX verwenden. In HP-UX erstellen Sie ein logisches Volume und hängen es als Momentaufnahme eines anderen logischen Volumes an. Unter Linux erstellen Sie ein logisches Volume als Snapshot-Volume.

Das Entfernen eines Schnappschusses in HP-UX erfolgt durch Umhängen des Volumes. In Linux wird das logische Volume mit lvremove entfernt.

In jedem Fall sind die Änderungen das einzige, was in Ihrem Schnappschuss gespeichert wird. Je länger der Schnappschuss verfügbar ist, desto mehr Änderungen werden gespeichert - und es besteht die Möglichkeit, dass er aufgefüllt wird, wenn er nicht die richtige Größe hat oder nicht freigegeben wird.

Der Datenträgerzugriff auf ein Snapshot-Volume ist langsamer als auf ein normales Volume. Sie müssen das berücksichtigen.

Mei
quelle
1

LVM-Snapshots sind ineffizient. Je mehr Snapshots vorhanden sind, desto langsamer wird das System.

Ich unterstütze nur xfs als das, was wir verwenden, und xfs_freeze kann verwendet werden, um den neuen Zugriff auf das Dateisystem zu stoppen und ein stabiles Image auf der Festplatte zu erstellen.

Beim Schreiben kopieren wird verwendet, um den Speicherplatz effizient zu nutzen.

Sie haben ein Dateisystem auf einem logischen Datenträger erstellt, auf dem Platz für die Snapshots ist.

Dies ist ein Beispiel aus der FAQ

James
quelle