Rollback von btrfs-Subvolumes mit untergeordneten Subvolumes

9

Gibt es eine kanonische Möglichkeit, zu einem Subvolume-Snapshot mit untergeordneten Subvolumes zurückzukehren? Dies ist zum Beispiel mein btrfs-Volume-Layout:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var

Sie können also sehen, dass home, opt und var untergeordnete Subvolumes von __active sind. Wenn ich einen Schnappschuss __aktiv mache, so dass dies mein neues Layout ist:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 257 path home
ID 260 gen 36538 top level 257 path opt
ID 261 gen 59802 top level 257 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

Wenn ich zum Snapshot von __active zurückkehren möchte, gibt es eine Möglichkeit, home, opt und var wieder mit dem neuen __active zu verbinden?

Falmarri
quelle

Antworten:

3

Wenn Sie mit dem erneuten Anbringen meinen, dass Sie btrfs subvolume listzeigen würden:

ID 257 gen 59802 top level 5 path __active
ID 258 gen 59784 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 258 path __snapshot/__active

dann nein gibt es jetzt möglichkeit das mit dem zu machen btrfs-progs.

Sub-Volumes können nur gelöscht werden, wenn alle untergeordneten Subvolumes (erstellt mit btrfs subvolume create ...) leer sind. Dies gilt jedoch nicht für Snapshots (die mit erstellt wurden btrfs subvolume snapshot .... Snapshots können immer gelöscht werden. Wenn Sie sie also verschieben könnten, gibt es ein Problem beim Entfernen des Schnappschusses.

Obwohl sowohl untergeordnete Subvolumes als auch Snapshots in derselben Baumstruktur angezeigt werden und sogar den btrfs subvolume delete ..Befehl gemeinsam nutzen, verhalten sie sich nicht gleich.

Anthon
quelle
1

Erstens werden beim __snapshot/__activeErstellen die Subvolumes (home, opt, var) nicht gefangen. Stattdessen werden leere Verzeichnisse erstellt. Somit __snapshot/__activekann leicht entfernt werden, wohingegen __activenicht.

Aber der Hauptpunkt war die Wiederherstellung __activemit __snapshot/__active. Soweit ich weiß, kann dies nicht atomar erfolgen. Sie können jedoch gerne mvSchnappschüsse und andere Subvolumes erstellen (sofern diese beschreibbar sind). Also zB machen

mv __active __snapshot/__active.old
mv __snapshot/__active __active

stellt __activeden Snapshot aus, aber die Subvolumes zu bewegen __snapshot/__active.old/{home,opt,var}. Um sie wieder anzubringen, können Sie sie jetzt verwenden

mv __snapshot/__active.old/{home,opt,var} __active/

und du wirst bekommen

ID 257 gen 59804 top level 258 path __snapshot/__active.old
ID 258 gen 59786 top level 5 path __snapshot
ID 259 gen 59802 top level 416 path home
ID 260 gen 36538 top level 416 path opt
ID 261 gen 59802 top level 416 path var
ID 416 gen 59784 top level 5 path __active

Wenn Ihr Schnappschuss schreibgeschützt ist, können Sie dies beispielsweise tun

mv __active __snapshot/__active.old
btrfs subvolume snapshot __snapshot/__active __active
mv __snapshot/__active.old/{home,opt,var} __active/
David
quelle