Revertendo o subvolume btrfs com subvolumes filhos

9

Existe uma maneira canônica de reverter para um instantâneo de subvolume que tenha subvolumes secundários. Por exemplo, este é o layout do volume do meu 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

Assim, você pode ver que home, opt e var são subvolumes-filhos de __active. Se eu instantâneo __ativo de tal forma que este é o meu novo 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
ID 416 gen 59784 top level 258 path __snapshot/__active

Se eu quiser voltar ao snapshot de __active, existe uma maneira de reconectar home, opt e var ao novo __active?

    
por Falmarri 16.09.2014 / 20:41

2 respostas

3

Se você quer dizer com a reconexão que seu btrfs subvolume list mostraria:

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

então não agora existe uma maneira de fazer isso com o btrfs-progs .

Os sub-volumes só podem ser excluídos se todos os subvolumes-filho (criados com btrfs subvolume create ... ) estiverem vazios, mas isso não é verdadeiro para os instantâneos (criados com btrfs subvolume snapshot ... . Os instantâneos sempre podem ser excluídos e, portanto, você poderia movê-los, haveria um problema com a remoção do instantâneo.

Embora subvolumes e instantâneos filhos apareçam na mesma estrutura de árvore e até compartilhem o comando btrfs subvolume delete .. , eles não agem da mesma forma.

    
por 01.10.2014 / 14:27
1

Antes de mais nada, ao criar __snapshot/__active , os subvolumes (home, opt, var) não serão encaixados. Em vez disso, diretórios vazios são criados. Assim, __snapshot/__active pode ser facilmente removido, enquanto __active não pode.

Mas o ponto principal era restaurar __active com __snapshot/__active . Tanto quanto sei, isso não pode ser feito atomicamente. Mas você pode alegremente mv instantâneos e outros subvolumes (contanto que sejam graváveis). Assim fazendo, por exemplo,

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

restaura __active do instantâneo, mas move os subvolumes para __snapshot/__active.old/{home,opt,var} . Para recolocá-los, agora você pode usar

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

e você receberá

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

No caso de seu instantâneo ser feito somente para leitura, você pode fazer, por exemplo

mv __active __snapshot/__active.old
btrfs subvolume snapshot __snapshot/__active __active
mv __snapshot/__active.old/{home,opt,var} __active/
    
por 21.10.2017 / 00:01