Я беру резервные копии сервера с помощью rsync, но эти резервные копии довольно большие, и я хотел бы их сжать. Есть ли способ иметь какую-то оболочку вокруг rsync, чтобы распаковать файл в резервной копии, выполнить синхронизацию изменений из живого файла, а затем повторно сжать файл, как только он будет скопирован?
Т.е. если исходные файлы в прямом эфире фу, бар и баз, в резервной копии есть foo.gz, bar.gz и baz.gz.
Повторюсь: мне нужны сжатые файлы на одном конце и несжатые файлы на другом. Я не хочу сжимать перед rsync, потому что даже с --rsyncable это делает rsync менее эффективным. Я знаю о параметре -z для rsync. У меня нет места на резервной машине для хранения всех файлов без сжатия.
Я не уверен, что понимаю, что вы пытаетесь сделать, но вы можете создавать резервные копии с помощью gzip на главном сервере, убедившись, что они легко синхронизируются с rsync и не беспокоят что-либо распаковывать в пути.
gzip(1)
--rsyncable
While compressing, synchronize the output occasionally based on
the input. This increases size by less than 1 percent most
cases, but means that the rsync(1) program can much more effi‐
ciently synchronize files compressed with this flag. gunzip
cannot tell the difference between a compressed file created
with this option, and one created without it.
Я думаю, что rsyncing с файловой системой, смонтированной на fuseCompress, может быть лучшим вариантом. В истории проекта особо упоминается, что с его помощью они улучшали производительность rsync.
Вы можете написать оболочку для rsync. Если «тянуть» данные, делать особо нечего. Если вы хотите «протолкнуть» данные с исходных машин на сервер резервного копирования, более деликатно заставить их работать:
Сначала вы должны убедиться, что оболочка вызывается с тем же именем, путем и параметрами, что и исходный rsync, по крайней мере, для пользователя, под которым вы запускаете резервное копирование.
Во-вторых, убедитесь, что ничего не пишете в stdout, потому что это нарушит канал связи.
И в-третьих, не забудьте передать все параметры, которые вы получаете, просто изменив их в соответствии с новым несжатым местом назначения.
Вероятно, он ищет сжатие передачи данных через rsync, а не сжатие файлов на другом конце.
Проверять, выписываться: http://jimmyg.org/blog/2007/rsync-basics.html
Параметры сжатия из справочной страницы:
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
По умолчанию ssh в определенной степени выполняет собственное сжатие. Я не знаю, насколько лучше rsync по сравнению с родным ssh. Если большинство ваших файлов уже сжаты в файлы gzip, вероятно, механизм сжатия rsync мало что может сделать для вас. Можно только так сильно сжать файл.