Wiederherstellen / Zurücksetzen einzelner Dateien oder Ordner auf btrfs

Dec 08 2020

Ich plane, btrfs für ein NAS-System zu verwenden.

Jetzt frage ich mich, ob es möglich ist, Dinge auf Datei- / Ordnerebene auf Snapshots zurückzusetzen. Ich frage dies, weil man normalerweise nur einzelne Elemente zurücksetzen möchte, während der Status des restlichen Laufwerks beibehalten wird.

Gibt es eine native Möglichkeit, dies zu tun, oder wenn nicht, wie dies am besten erreicht werden kann? Ich habe Wiederherstellen einzelner Dateien aus einem btrfs-Snapshot gelesen, ohne eine vollständige Kopie zu erstellen, was ein Weg zu sein scheint, aber nicht so praktisch. Könnte aber der beste Weg sein, dies zu tun.

Antworten

1 clel Jan 02 2021 at 01:13

Wenn Sie einen Snapshot erstellen, wird im Wesentlichen ein Subvolume erstellt, auf das in der Verzeichnisstruktur des Basisvolumes zugegriffen werden kann. Von dort aus kann man, sofern man über die entsprechenden Rechte verfügt, diese durchsuchen und Dateien oder Ordner kopieren. Die --reflinkOption zum Kopieren scheint dafür nicht erforderlich zu sein, obwohl dies besser ist, sodass die Dinge beim Kopieren nicht dupliziert werden.

mit btrfs tools

Optionales Erstellen eines Subvolumes für die Snapshots:

btrfs subvolume create .my_snapshots

Erstellen des Schnappschusses:

btrfs subvolume snapshot -r /mnt_point /mnt_point/.my_snapshots/snapshot1

Wenn Sie das -rFlag verwenden, ist der Schnappschuss schreibgeschützt (https://wiki.archlinux.org/index.php/btrfs#Snapshots).

Ohne zuerst ein Subvolume zu erstellen und es nicht schreibgeschützt zu machen, könnte es einfach so aussehen:

btrfs subvolume snapshot /mnt_point /mnt_point/snapshot1

Die Wiederherstellung kann dann durch Kopieren der Datei (en) oder des Ordners (der Ordner) aus dem Snapshot erreicht werden:

cp /mnt_point/.my_snapshots/snapshot1/sub/dir/file /sub/dir/file

(Abgeleitet von https://lore.kernel.org/linux-btrfs/[email protected]/t/#m16db5d9f29d26f41a8adb4499ffe3e220a85d9b8)

externe Tools (Snapper als Beispiel)

Die Verwendung externer Tools wie Snapper bietet einige Vorteile, da sie die Handhabung von Snapshots etwas komfortabler machen und nützliche Funktionen bieten.

Zuerst muss eine Konfigurationsdatei für das (Unter-) Volume erstellt werden, für das Snapshots erstellt werden sollen:

snapper -c config-name create-config /mnt_point

Dadurch wird eine Konfigurationsdatei mit dem Namen erstellt config-name. Beachten Sie, dass dies normalerweise auch die Erstellung automatischer zeitbasierter Snapshots sowie von Regeln zum Bereinigen dieser nach einiger Logik ermöglicht. Beachten Sie, dass manuell erstellte Snapshots durch solche Regeln nicht entfernt werden.

Ein Schnappschuss kann dann manuell erstellt werden mit:

snapper -c config-name create --description description-content

Wo config-nameist der Name der zuvor erstellten Konfiguration und description-contentkann mit einer Beschreibung für den Snapshot gefüllt werden.

(Abgeleitet von https://wiki.archlinux.org/index.php/Snapper)

Das Wiederherstellen funktioniert dann ähnlich wie oben für den Abschnitt btrfs tools mit Zugriff auf den bereitgestellten Snapshot und Kopieren.

Zusätzlich bietet snapper einen Befehl für das, was auch verwendet werden kann, um Änderungen für das aktuelle Volume gemäß der openSUSE-Dokumentation rückgängig zu machen . Beachten Sie jedoch, dass dies zu Dateninkonsistenzen führen kann. In der Red Hat-Dokumentation wird außerdem angegeben, dass dieser Befehl nicht mit dem Root-Dateisystem verwendet werden soll.

Theoretisch können Dateien wiederhergestellt werden mit:

 snapper -c config-name -v undochange SNAPSHOT_ID..0 FILENAME

Wo SNAPSHOT_IDist die ID des Snapshots, von dem wiederhergestellt werden soll (und ..0gibt an, dass die Dateien auf dem Hauptvolume wiederhergestellt werden) und FILENAMEder Pfad zu der wiederherzustellenden Datei. Man kann auch mehr als eine Datei angeben.

(Abgeleitet von https://doc.opensuse.org/documentation/leap/archive/15.0/reference/html/book.opensuse.reference/cha.snapper.html#proc.snapper.restore.cmdl)

EmmanuelRosa Dec 09 2020 at 17:25

BTRFS-Snapshots funktionieren auf Subvolumebene. Dies bedeutet, dass Sie Subvolumes "zurücksetzen" können, jedoch keine einzelnen Dateien.

Da Subvolumes als Verzeichnisse im Dateisystem angezeigt werden, kann man sagen, dass Verzeichnisse zurückgesetzt werden können.

Zum Zurücksetzen einzelner Dateien verwende ich eine Reflink-Kopie, wie in dem von Ihnen angegebenen Link gezeigt. Ich habe jedoch die relevanten Subvolumes automatisch über gemountet, /etc/fstabso dass es keine Unannehmlichkeiten gibt.