Назад | Перейти на главную страницу

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

Ниже приведен мой список томов и снимков 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

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 часть является необязательной, но она даст вам индикатор выполнения, на который вы можете посмотреть, пока вы ждете.

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