Hallo,
ich überlege mir gerade eine neue Struktur für einen meiner Rechner. Es soll eine für mich einfache Struktur sein, die v.a. mittels Snapshots auch das Root(/)-Verzeichnis wiederherstellen läßt. Ich möchte keine "externen" Tools verwenden.
Im alten Setup waren meine "Fehler":
a) / im Toplevel (5)
b) verschachtelte(nested) Subvolumes, also alle innerhalb von /(Toplevel)
Aktuell habe ich es so:
toplevel 5 (nicht gemountet)
+-- ROOT (Subvolume für System, gemountet als /)
+-- weiter Subvolumes für home,data,snaphots (gemountet über fstab(subvol=)
"Einfach" heißt jetzt für mich:
a) Ich erstelle einen Snapshot vom Subvolume ROOT
b) Verändere das laufende System und merke: Ich will zum alten Snaphot zurück.
Für's Root-FS(/) geht das ja nicht im laufenden Betrieb (Aus-/Wiedereinhängen). Also entweder per externem Botmedium oder in der Initramfs-Emergency-Konsole, ich bevorzuge letzteres.
c) Im Initramfs mounte ich den Btrfs-Pool(subvol-id 5) nach /mnt, benenne /mnt/ROOT nach /mnt/ROOT.tmp um und bewege (mv) oder restore (per Snaphot) den gewünschten Snaphot wieder nach /mnt/ROOT.
Den Btrfs-Pool wieder aushängen und ich kann das System wieder mit dem Zustand des Snapshots booten. Das funktioniert auch so (einfach), wie ich es mir denke.
Jetzt zu meinem eigentlichen "Problem" bzw. Anliegen:
Ich kann das alte ROOT.tmp subvolume nicht einfach löschen (per btrfs sub del /mnt/ROOT.tmp z.B.), da diese noch weitere, eigene Subvolumes enthalten bzw. wenn noch andere Subvolumes enthalten sind. Das ist ja eine bekannte Situation.
Selbst wenn ich verschachtelte Subvolumes in ROOT vermeiden kann, systemd legt automatisch z.B. zwei Subvolumes für /var/lib/portables und /var/lib/machines im ROOT-Subvolume an. (Dieses Anlegen bzw. der Sinn/Umgang sei nicht das Problem...)
Sagen wir es sieht (sub list verkürzt) so aus, Pool nach /mnt eingehängt:
# btrfs sub list /mnt
ID 292 gen 991 top level 5 path ROOT
ID 295 gen 889 top level 292 path ROOT/var/lib/machines
ID 296 gen 890 top level 292 path ROOT/var/lib/portables
Ich mache wie oben meinen Snapshot und kehre zu diesem zurück, dann dieses Bild:
# btrfs sub list /mnt
ID 292 gen 991 top level 5 path ROOT.tmp
ID 295 gen 889 top level 292 path ROOT.tmp/var/lib/machines
ID 296 gen 890 top level 292 path ROOT.tmp/var/lib/portables
ID 299 gen 895 top level 5 path ROOT
Ich kann jetzt das Subvolume ID 292 nicht einfach entfernen, da es noch andere enthält. Diese müßte ich also vorher entfernen. Auch müßte ich mich um entsprechende Snaphots für diese Subvolumes kümmern, um diese auch wieder ins neue, aktuelle ROOT (ID 299) zu kriegen.
Jetzt(tata!) meine Frage:
Gibt es eine Möglichkeit, die bestehenden Subvolumes (ID 295 und 296) in der B-Tree-Struktur aus dem alten Toplevel 292 "rauszulösen" und einem neuen Toplevel (z.B. hier 299) zuzuweisen?
Sowas wie: btrfs sub move subvol-id newtoplevel-id
Ich habe in keiner von mir genutzten Btrfs-Doku noch per Suchmaschine diesmal was gefunden...
Es geht mir wirklich eher ums Prinzip, nicht um diese beiden Beispiel-Subvolumes.