ZFS exclui capturas instantâneas com interdependências e clones

8

Abaixo está minha lista de volumes e snapshots do ZFS, bem como a origem e o clone de cada um.

Eu quero excluir todos os instantâneos, mas manter todos os sistemas de arquivos. Como posso fazer isso?

Eu tentei zfs promote seguido por tentar excluir cada sistema de arquivos para muitas combinações diferentes dos sistemas de arquivos. Isso muda em torno de onde os instantâneos "vivem"; por exemplo, zfs promote tank/containers/six move instantâneo F de tank/containers/three@F para tank/containers/six@F . Os dados ativos no sistema de arquivos não são modificados (que é o que eu quero!), Mas eu ainda não consigo excluir o instantâneo (que não é o que eu quero).

Uma tentativa típica de zfs destroy diz-me que tem clones dependentes, alguns dos quais (os instantâneos) que faço querem destruir, mas outros dos quais (os sistemas de ficheiros) não quer destruir.

Por exemplo.

# zfs destroy tank/containers/six@A
cannot destroy 'tank/containers/six@A': snapshot has dependent clones
use '-R' to destroy the following datasets:
tank/containers/five
tank/containers/two@B
tank/containers/two

No exemplo acima, não quero destruir tank/containers/five ou tank/containers/two , mas se eu zfs promote cinco e dois, ainda não consigo destruir nenhum instantâneo. Existe uma solução?

# zfs list -t all -o name,origin,clones
NAME                         ORIGIN                       CLONES
tank                         -                            -
tank/containers              -                            -
tank/containers/five         tank/containers/two@B        -
tank/containers/four         tank/containers/six@C        -
tank/containers/one          -                            -
tank/containers/one@E        -                            tank/containers/three
tank/containers/two          tank/containers/six@A        -
tank/containers/two@B        -                            tank/containers/five
tank/containers/six          tank/containers/three@F      -
tank/containers/six@A        -                            tank/containers/two
tank/containers/six@C        -                            tank/containers/four
tank/containers/three        tank/containers/one@E        -
tank/containers/three@F      -                            tank/containers/six
    
por Horn OK Please 14.05.2017 / 00:43

1 resposta

6

AFAIK, você precisará copiar esses conjuntos de dados para novos conjuntos de dados independentes. A promoção apenas muda em torno da qual o conjunto de dados é "pai" versus "filho", mas, na verdade, não quebra nenhuma dependência se você quiser manter os dois.

Por exemplo:

root@box~# zfs snapshot tank/containers/six@1 
root@box~# zfs send tank/containers/six@1 | pv | zfs receive tank/containers/newsix  
root@box~# zfs destroy -R tank/containers/six  
root@box~# zfs destroy tank/containers/three@F 
root@box~# zfs rename tank/containers/newsix tank/containers/six

Tome seu tempo e tenha certeza do que está fazendo. Especialmente com as eliminações reais.

Esta replicação é bloco a bloco, portanto, se houver dados significativos, isso levará algum tempo. A parte pv é estritamente opcional, mas lhe dará uma barra de progresso para observar enquanto espera.

Além disso, talvez considere o syncoid para automatizar as tarefas de replicação, agora e no futuro.

    
por 14.05.2017 / 13:24

Tags