Процесс резервного копирования создаёт tar-архив, а затем сжимает его с помощью gzip. В tar-архиве содержится два типа данных: уже сжатый дамп SQL и содержимое папки uploads (если это было запрошено). В моём случае каждый файл в uploads уже сжат: gz, gzip, gif, jpeg, png, zip. Поэтому финальное сжатие gzip даёт прирост лишь в 1% по размеру.
Я считаю, что было бы лучше снизить требования к свободному месту.
В одной из тем 2016 года упоминается отключение сжатия резервных копий, но тогда дамп SQL ещё не был сжат, что меняло баланс компромиссов.
Я стремлюсь сэкономить время процессора. На самом деле я думал использовать 0 как флаг, который изменит путь выполнения кода, чтобы оно не сжимало с помощью gzip (к сожалению, ноль, насколько мне известно, не является допустимым уровнем сжатия, поддерживаемым во всех версиях gzip).
Хм, это мне совсем не поможет! (Точно так же и для других, у кого возникла та же проблема с нехваткой места на диске.)
Если бы использовался tar, его можно было бы применять с опциями z или j. Если бы использовалась подсистема, вывод tar можно было бы передать через конвейер в gzip. Но я думаю, что на самом деле могут использоваться некоторые функции более высокого уровня Ruby.
Возможно, это не должно быть слишком сложно… Я понимаю, что внесение изменений в функции резервного копирования и восстановления требует большой осторожности, но я считаю, что просто встроенная компрессия сэкономила бы много места без каких-либо вопросов совместимости.
Из tar --help
-a, --auto-compress использовать суффикс архива для определения компрессии
-z, --gzip, --gunzip, --ungzip фильтровать архив через gzip
Возможно, более подходящий подход, который мог бы упростить задачу, — это возможность работать с существующими резервными копиями, которые могут иметь расширение *.gz или *.zst, используя автоматическое определение tar:
tar --auto-compress -c -f ../file.tar.gz .
tar --auto-compress -c -f ../file.tar.zst .
Более важно, конечно, при распаковке, когда мы можем не знать, с чем именно столкнёмся.
В настоящее время код на Ruby выполняет множество операций, которые может выполнить сам tar. Надеемся, это позволит упростить процесс, а не усложнить его.