Frage

Ich mag programmatisch eine Momentaufnahme eines Live-Dateisystem unter Linux machen, vorzugsweise mit LVM. Ich möchte nicht, dass es abzuhängen, weil ich viele Dateien geöffnet haben (meine häufigste Szenario ist, dass ich ein Besetzt Desktop mit vielen Programmen haben).

Ich verstehe, dass, weil die Kernel-Puffer und allgemeiner Dateisystem-Aktivität, Daten auf der Festplatte in einigem mehr oder weniger sein könnten undefinierten Zustand.

Gibt es eine Möglichkeit, „atomar“ Aushängen eines FS, eine LVM-Schnappschuss machen und montieren Sie ihn zurück? Es wird in Ordnung sein, wenn das Betriebssystem wird alle Aktivitäten blockiert für wenige Sekunden, um diese Aufgabe zu tun. Oder vielleicht eine Art von Atom „sync + Snapshot“? Kernel Aufruf?

Ich weiß nicht, ob es überhaupt möglich ist ...

War es hilfreich?

Lösung

Sie sollten nicht für die meisten Linux-Dateisysteme nichts zu tun haben. Es sollte nur überhaupt auf Ihrer Seite ohne Anstrengung arbeiten. Der Snapshot-Befehl selbst jagt nach unten eingehängte Dateisystemen der Lautstärke durch, die Snapshot von ihr erstellt und ruft einen speziellen Haken, dass Checkpoints sie in einem konsistenten, montierbaren Zustand und macht den Snapshot atomar.

ältere Versionen von LVM kamen mit einem Satz von VFS Lock-Patches, die verschiedene Dateisysteme Patch würde, so dass sie für einen Schnappschuss mit Fixpunkten werden konnten. Aber mit neuen Kernel, die bereits in den meisten Linux-Dateisysteme gebaut werden sollte.

Das Intro auf Schnappschüsse Ansprüche so viel.

Und ein wenig mehr Forschung zeigt, dass für die Kerne in der 2.6-Serie der ext Reihe von Dateisystemen sollten alle unterstützen diese. ReiserFS wahrscheinlich auch. Und wenn ich die Btrfs Menschen wissen, dass man wohl tut auch.

Andere Tipps

ich weiß, dass ext3 und ext4 in RedHat Enterprise, Fedora und CentOS automatisch Checkpoint, wenn ein LVM-Snapshot erstellt wird. Das Mittel ist es nie irgendein Problem den Schnappschuss Montage, weil es immer sauber ist.

I glauben XFS die gleiche Unterstützung. Ich bin nicht sicher über andere Dateisysteme.

Es hängt von dem Dateisystem Sie verwenden. Mit XFS können Sie xfs_freeze -f für die Synchronisierung verwenden und die FS einfrieren und xfs_freeze -u es wieder zu aktivieren, so dass Sie Ihren Schnappschuss aus dem gefrorenen Volume erstellen können, die ein Sparzustand sein sollte.

Ich bin mir nicht sicher, ob dies der Trick für Sie tun, aber Sie können ein Dateisystem als read-only mounten. mount -o remount,ro /lvm (oder so ähnlich) wird es tun. Nachdem Sie Ihren Schnappschuss fertig sind, können Sie read-write mit mount -o remount,rw /lvm wieder montieren.

  

Gibt es eine Möglichkeit, „atomar“ Aushängen eines FS, eine LVM-Schnappschuss machen und montieren Sie ihn zurück?

Es ist möglich, ein bereitgestelltes Dateisystem Snapshot, auch wenn das Dateisystem nicht auf einem LVM-Volume ist. Wenn das Dateisystem auf LVM ist, oder es hat eine eingebaute in Snapshot-Einrichtungen (z Btrfs oder ZFS), dann die stattdessen verwendet werden.

Die folgenden Anweisungen sind ziemlich Low-Level, aber sie können nützlich sein, wenn Sie die Möglichkeit haben mögen, ein Dateisystem Snapshot, die nicht auf einem LVM-Volume ist, und kann es nicht zu einem neuen LVM-Volume verschieben. Dennoch sind sie nicht für schwache Nerven: Wenn Sie einen Fehler machen, können Sie korrupte Dateisystem. Stellen Sie sicher, konsultieren der offiziellen Dokumentation und dmsetup Manpage triple-überprüfen Sie die Befehle, die Sie ausführen, und Haben Sie Backups

Die Linux-Kernel hat eine wunderbare Möglichkeit, den Device Mapper genannt, was so nette Dinge tun kann, als Block-Geräte erstellen, die „Ansichten“ von anderen Blockgeräten sind, und natürlich Schnappschüsse. Es ist auch das, was LVM Anwendungen unter der Motorhaube, das schwere Heben zu tun.

In der folgenden Beispiele, die ich nehme an, Sie Snapshot /home wollen, die ein ext4-Dateisystem auf /dev/sda2 gelegen ist.

Suchen Sie zunächst den Namen des Device-Mapper-Gerät, dass die Partition auf montiert ist:

# mount | grep home
/dev/mapper/home on /home type ext4 (rw,relatime,data=ordered)

Hier ist die Device-Mapper-Gerätenamen home. Wenn der Pfad zu dem Block-Gerät mit /dev/mapper/ nicht startet, dann müssen Sie ein Device-Mapper-Gerät erstellen, und das Dateisystem mounten, dass das Gerät zu verwenden, statt der HDD-Partition. Sie werden nur tun müssen, um dieses ein Mal.

# dmsetup create home --table "0 $(blockdev --getsz /dev/sda2) linear /dev/sda2 0"
# umount /home
# mount -t ext4 /dev/mapper/home /home

Als nächstes erhält das Device-Mapper-Tabelle des Blockgerätes:

# dmsetup table home
home: 0 3864024960 linear 9:2 0

Ihre Zahlen werden wahrscheinlich anders sein. Das Gerät sollte Ziel linear sein; wenn Sie nicht den Fall, müssen Sie spezielle Überlegungen nehmen. Wenn die letzte Nummer (Offset Start) nicht 0 ist, müssen Sie eine Zwischenblockgerät erstellen (mit dem gleichen Tisch wie die aktuellen) und verwendet, die als Basis statt /dev/sda2.

In dem obigen Beispiel ist home eine einströmige Tabelle mit dem linear Ziel verwenden. Sie müssen diese Tabelle mit einem neuen ersetzen, die das snapshot Ziel verwendet.

Device-Mapper bietet drei Ziele für die Snapshot-Erstellung:

  • Das snapshot Ziel, das Schreiben in die angegebene COW Gerät speichert. (Beachten Sie, dass, obwohl es sich um eine Momentaufnahme genannt wird, ist die Terminologie irreführend, da der Snapshot beschreibbar sein wird, aber das zugrunde liegende Gerät bleibt unverändert.)

  • Das snapshot-origin Ziel, das Schreiben in die darunter liegende Gerät sendet, sendet aber auch die alten Daten, dass die Schreiben an die angegebene KUH Gerät überschrieben.

Normalerweise würden Sie ein home Ziel machen snapshot-origin, dann einige snapshot Ziele auf es erstellen. Dies ist, was LVM tut. Allerdings wäre eine einfachere Methode, einfach ein snapshot Ziel direkt zu erstellen, das, was ich unten zeigen.

Unabhängig von der Methode Sie wählen, Sie muss nicht Schreib auf die zugrunde liegende Gerät (/dev/sda2) oder den Schnappschüssen wird eine beschädigte Ansicht des Dateisystems sehen. So, als Vorsichtsmaßnahme sollten Sie das zugrunde liegende Blockgerät als Nur-Lese-markieren:

# blockdev --setro /dev/sda2

Dies wird nicht device-mapper-Geräte unterstützt, indem sie es beeinflussen, so dass, wenn Sie bereits wieder montiert /home auf /dev/mapper/home, sollte es nicht einen spürbaren Effekt hat.

Als nächstes müssen Sie das KUH-Gerät herzustellen, die Änderungen gespeichert werden, da der Snapshot gemacht wurde. Dies hat ein Block-Gerät sein, kann aber durch eine spärliche Datei gesichert werden. Wenn Sie eine Datei mit geringer Dichte von beispielsweise verwenden 32GB:

# dd if=/dev/zero bs=1M count=0 seek=32768 of=/home_cow
# losetup --find --show /home_cow
/dev/loop0

Offensichtlich Sie Snapshot-Erstellung die Datei mit geringer Dichte nicht auf das Dateisystem sein sollte:)

Jetzt können Sie das Gerät die Tabelle neu zu laden und es in einen Schnappschuss Gerät einschalten:

# dmsetup suspend home && \
  dmsetup reload home --table \
    "0 $(blockdev --getsz /dev/sda2) snapshot /dev/sda2 /dev/loop0 PO 8" && \
  dmsetup resume home

Wenn das gelingt, neue Schreibvorgänge in /home sollten nun in der /home_cow Datei aufgezeichnet werden, anstatt auf /dev/sda2 geschrieben werden. Achten Sie auf die Größe der COW-Datei zu überwachen, sowie den freien Speicherplatz auf dem Dateisystem ist es auf, um zu verhindern von COW Raum knapp.

Wenn Sie nicht mehr den Schnappschuss benötigen, können Sie es verschmelzen (dauerhaft die Änderungen in der COW-Datei auf das zugrunde liegende Gerät zu begehen), oder sie verwerfen.

  • Um es zu fusionieren:

    1. ersetzen Sie die Tabelle mit einem snapshot-merge Ziel statt einem snapshot Ziel:

      # dmsetup suspend home && \
        dmsetup reload home --table \
          "0 $(blockdev --getsz /dev/sda2) snapshot-merge /dev/sda2 /dev/loop0 P 8" && \
        dmsetup resume home
      
    2. Als nächstes überwacht den Status der Zusammenführung, bis alle nicht-Metadatenblöcke zusammengefasst:

      # watch dmsetup status home
      ...
      0 3864024960 snapshot-merge 281688/2097152 1104
      

      3 Man beachte die Zahlen am Ende (X / Y-Z). Die Zusammenführung ist abgeschlossen, wenn X = Z.

    3. Als nächstes ersetzen Sie die Tabelle mit einem linearen Ziel wieder:

      # dmsetup suspend home && \
        dmsetup reload home --table \
          "0 $(blockdev --getsz /dev/sda2) linear /dev/sda2 0" && \
        dmsetup resume home
      
    4. Jetzt können Sie das Loop-Gerät demontieren:

      # losetup -d /dev/loop0
      
    5. Schließlich können Sie die KUH-Datei löschen.

      # rm /home_cow
      
  • den Schnappschuss zu verwerfen, Aushängen /home Schritte folgen 3-5 oben und remount /home. Obwohl Device Mapper Sie dies ohne Aushänge /home erlauben zu tun, macht es keinen Sinn, (da state die laufenden Programme im Speicher nicht auf das Dateisystem Zustand nicht mehr entsprechen wird), und es wird Ihr Dateisystem wahrscheinlich beschädigt.

FS Korruption ist „höchst unwahrscheinlich“, solange Sie nie Arbeit in jeder Art von professionellem Umfeld. sonst werden Sie treffen Realität, und Sie könnten versuchen, „Bit rot“ oder „Hardware“ oder was auch immer, aber es kommt alles unverantwortlich gewesen zu beschuldigen. Frost / Tau- (wie ein paar Mal erwähnt, und nur wenn sie richtig genannt) reicht aus, um außerhalb von Datenbankumgebungen. für Datenbanken, werden Sie noch keine transaktions vollständige Sicherung haben und wenn Sie ein Backup denken, dass Rollen einige Transaktion zurück in Ordnung ist, wenn wieder hergestellt: siehe Satz beginnen. je nach Aktivität können Sie nur hinzugefügt eine andere 5-10 Minuten von Ausfallzeiten, wenn überhaupt müssen Sie diese Sicherung. Die von uns kann, dass es sich leisten, aber es kann nicht allgemeine Beratung sein. Seien Sie ehrlich über Nachteile, Jungs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top