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