ZFS удаляет снимки с взаимозависимостями и клонами

9

Ниже приведен мой список томов и снимков ZFS, а также их источник и клон.

Я хочу удалить все снимки, но сохранить все файловые системы. Как я могу это сделать?

Я попытался zfs promoteзатем попытаться удалить каждую файловую систему для многих различных комбинаций файловых систем. Это перемещается туда, где «живут» снимки; например, zfs promote tank/containers/sixперемещает снимок Fиз tank/containers/three@Fв tank/containers/six@F. Живые данные в файловой системе не изменяются (это то, что я хочу!), Но я все еще не могу удалить снимок (это не то, что я хочу).

Типичная zfs destroyпопытка подсказывает мне , что есть зависимые клоны, некоторые из которых (слепки) Я действительно хочу , чтобы уничтожить, но другие из которых (файловые системы) , я не хочу , чтобы уничтожить.

Например.

# 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

В приведенном выше примере я не хочу уничтожать tank/containers/fiveили tank/containers/two, но если мне zfs promoteпять и два, я все равно не могу уничтожить снимки. Есть ли решение?

# 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
allquixotic
источник

Ответы:

9

AFAIK, вам придется скопировать эти наборы данных в новые независимые наборы данных. Продвижение просто переключает, какой набор данных является «родительским» по сравнению с «дочерним», на самом деле он не нарушает никаких зависимостей, если вы хотите сохранить оба.

Например:

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

Не торопитесь и будьте уверены в том, что вы делаете. Особенно с фактическими удалениями.

Эта репликация является блок-к-блоку, поэтому, если там есть какие-либо важные данные, это займет некоторое время. Эта pvчасть является строго необязательной, но она покажет вам индикатор выполнения, пока вы ждете.

Также, возможно, рассмотрите возможность использования syncoid для автоматизации задач репликации сейчас и в будущем. (Обязательно: я являюсь первоначальным автором этого инструмента, лицензия GPLv3 и бесплатна для использования.)

Джим Солтер
источник
Джим, пожалуйста, расскажи о своей принадлежности к синкоиду. Из правил сайта: «Размещайте хорошие, релевантные ответы, и если некоторые (но не все) касаются вашего продукта или веб-сайта, это нормально. Однако вы должны раскрывать свою принадлежность в своих ответах».
Костин Гуцэ
Рад, Костин, - не осознавал, что это было грандиозно, так как я напрямую связывался с проектом GitHub Repo и не говорил ни слова о консалтинговых услугах.
Джим Солтер