Revertir subvolumen btrfs con subvolúmenes secundarios

9

¿Existe alguna forma canónica de retroceder a una instantánea de subvolumen que tenga subvolúmenes secundarios? Entonces, por ejemplo, este es mi diseño de volumen 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

Entonces puede ver que home, opt y var son subvolúmenes secundarios de __active. Si tomo una instantánea __activa de modo que este sea mi nuevo diseño:

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 quiero volver a la instantánea de __active, ¿hay alguna forma de volver a conectar a casa, optar y var al nuevo __active?

Falmarri
fuente

Respuestas:

3

Si quiere decir con volver a conectar que su btrfs subvolume list mostraría:

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

entonces no, ahora hay forma de hacerlo con el btrfs-progs.

Los subvolúmenes solo se pueden eliminar si todos los subvolúmenes secundarios (creados con btrfs subvolume create ...) están vacíos, sin embargo, esto no es cierto para las instantáneas (que se crean con btrfs subvolume snapshot .... Las instantáneas siempre se pueden eliminar y, por lo tanto, si pudiera moverlas, habría un problema con la eliminación de la instantánea.

Aunque tanto los subvolúmenes secundarios como las instantáneas aparecen en la misma estructura de árbol e incluso comparten el btrfs subvolume delete ..comando, no actúan igual.

Anthon
fuente
1

En primer lugar, al hacer __snapshot/__active, los subvolúmenes (home, opt, var) no se ajustan. En su lugar, se crean directorios vacíos. Por __snapshot/__activelo tanto, se puede quitar fácilmente, mientras que__active que no se puede.

Pero el punto principal fue restaurar __activecon __snapshot/__active. Hasta donde yo sé, esto no se puede hacer atómicamente. Pero felizmente puedes mvtomar instantáneas y otros subvolúmenes (siempre que sean editables). Así que, por ejemplo

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

restaura __activedesde la instantánea, pero moviendo los subvolúmenes a __snapshot/__active.old/{home,opt,var}. Para volver a colocarlos, ahora puede usar

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

y obtendrás

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

En caso de que su instantánea sea de solo lectura, puede hacer, por ejemplo

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