Restauration du sous-volume btrfs avec des sous-volumes enfants

9

Existe-t-il un moyen canonique de revenir à un instantané de sous-volume contenant des sous-volumes enfants. Ainsi, par exemple, voici ma disposition de volume btrfs:

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

Vous pouvez donc voir que home, opt et var sont des sous-volumes enfants de __active. Si j'instantané __active tel que ceci est ma nouvelle mise en page:

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

Si je veux revenir à l'instantané de __active, existe-t-il un moyen de rattacher home, opt et var au nouveau __active?

Falmarri
la source

Réponses:

3

Si vous voulez dire avec réattachement que votre btrfs subvolume listaffiche:

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

alors non il y a maintenant moyen de le faire avec le btrfs-progs.

Les sous-volumes ne peuvent être supprimés que si tous les sous-volumes enfants (créés avec btrfs subvolume create ...) sont vides, mais ce n'est pas le cas pour les instantanés (qui sont créés avec btrfs subvolume snapshot .... Les instantanés peuvent toujours être supprimés et donc si vous pouviez les déplacer, il y aurait un problème avec la suppression de l'instantané.

Bien que les sous-volumes enfants et les instantanés apparaissent dans la même arborescence et partagent même la btrfs subvolume delete ..commande, ils n'agissent pas de la même manière.

Anthon
la source
1

Tout d'abord, lors de la fabrication __snapshot/__active, les sous-volumes (home, opt, var) ne sont pas accrochés. À la place, des répertoires vides sont créés. Ainsi __snapshot/__activepeut être facilement retiré, alors __activequ'il ne peut pas.

Mais l'essentiel était de restaurer __activeavec __snapshot/__active. Pour autant que je sache, cela ne peut pas être fait de manière atomique. Mais vous pouvez heureusement prendre des mvinstantanés et d'autres sous-volumes (tant qu'ils sont accessibles en écriture). Ainsi, par exemple

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

restaure à __activepartir de l'instantané, mais en déplaçant les sous-volumes vers __snapshot/__active.old/{home,opt,var}. Pour les rattacher, vous pouvez maintenant utiliser

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

et vous obtiendrez

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

Dans le cas où votre instantané est rendu en lecture seule, vous pouvez le faire par exemple

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