ZFS: повторно сжать существующие файлы после изменения алгоритма сжатия
У меня есть пул, который был создан в 2011 году с использованием сжатия lzjb, и только пару лет спустя обновление позволило мне установить сжатие lz4. По моим оценкам, по крайней мере 20% содержимого (по пространству) в массиве было создано до 2013 года, что означает, что он все еще сжимается с помощью lzjb.
Я могу придумать пару вариантов, чтобы исправить это и восстановить (некоторое) пространство:
Резервное копирование и восстановление в новый пул. Не очень практично, так как у меня недостаточно избыточного хранилища для хранения временной копии. Восстановление также потребует, чтобы пул находился в автономном режиме в течение нескольких часов.
Напишите сценарий для повторного копирования любого файла с отметкой времени старше 2013 года. Потенциально рискованно, особенно если он задыхается от пробелов или других специальных символов и в результате искажает оригинальное имя.
Итак... есть ли способ заставить ZFS повторно сжимать любые устаревшие блоки, используя текущий алгоритм сжатия? Вроде как скраб, но лечит компрессию.
Смежный вопрос: есть ли способ увидеть использование каждого типа алгоритма сжатия? zdb просто показывает общую статистику сжатия, а не разбивает ее на отдельные алгоритмы.
Благодарю.
2 ответа
Вы должны заново скопировать данные (полностью или частично), или zfs отправит / получит данные в новый пул или файловую систему ZFS.
Других вариантов нет.
Из-за особенностей конструкции ZFS единственным выходом является перезапись данных, обычно путем копирования во временный файл и переименования его поверх оригинала.
Есть gary17/zfs-recompress (я не связан с ним), сценарий оболочки, который выполняет именно эту работу.
Я нашел этот сценарий очень удовлетворительным с точки зрения результатов, но однопоточная обработка показалась мне медленной, поэтому я переписал его на Python для повышения производительности и (возможно) большей безопасности в отношении имен файлов. Мой скрипт Python находится по адресу iBug/zfs-recompress.py, и вы, возможно, захотите его попробовать.
Обязательно сделайте резервную копию своих данных (или сделайтеzfs snapshot
), прежде чем пробовать эти инструменты.