24.11.2017 17:03, Mikhail Golub пишет:
Всем привет.

Как я понял по информации с просторов Интернет, то единственный способ дефрагментировать zfs пул - "zfs send | zfs recv".

Имеется FreeBSD 11.1
Есть пул с FRAG 62%.
В пуле файловые системы с сайтами (у каждого сайта своя ФС с квотами и т.п.). И через определенные интервалы времени делается снимок ФС для оперативного бэкапа и хранятся такие снимки некоторое время.
Т.е. имеем несколько ФС и у каждой ФС по несколько снапшотов.

Нашел пример, что можно сделать вот так.
zfs snapshot pool/ФС@temp
zfs send pool/ФС@temp | zfs recv pool/new-ФС
zfs destroy pool/ФС@temp
zfs destroy -r pool/ФС
zfs rename pool/new-ФС pool/ФС

Если команды выполнять ручками, то все работает нормально.
Но усложнив задачу и заменив "zfs send pool/ФС@temp" на "zfs send -R pool/ФС@temp", чтобы снапшоты (резервные копии) тоже передать, и запихнуть все в цикл, то случайным образом вываливается на команде "zfs destroy -r" с сообщением "zfs cannot destroy ... dataset is busy".
Если после этого вручную выполнить "zfs destroy -r pool/fs" - проблем нет.
Костыль, но может сработать:
(sleep 60 && zfs destroy -r pool/fs) &

Интернет пока не помог в поиске решения :(

Или может есть более правильный способ дефрагментации пула zfs? (но без удаления снапшотов с резервными копиями)

Спасибо.

_______________________________________________
freebsd mailing list
freebsd@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd

Ответить