Вы не можете «сжать все», поскольку gzip сжимает только один файл, вы можете создать tar-файл и скопировать его, чтобы «сжать все», но вы потеряете возможность rsync копировать только измененный файл.
Поэтому вопрос в том, лучше ли хранить файл, который мне нужен, для использования rsync gziped или использовать опцию -z команды rsync.
Ответ, вероятно, заключается в том, что вы не хотите, чтобы файл был разархивирован на вашем сервере? Я думаю, да, поэтому я не понимаю, как вы могли бы сжать файл gzip перед выполнением rsync.
Может быть, вам не нужна возможность rsync копировать только измененный файл? В этом случае зачем использовать rsync вместо scp файла tar.gz, содержащего ваши материалы?
В любом случае, чтобы ответить на вопрос, rsync gzip будет немного менее эффективным, чем файл gziping с gzip. Почему ? поскольку rsync будет разбивать данные по частям gzip, поэтому для создания таблицы, которую gzip использует для сжатия, будет использоваться меньший набор данных, а больший набор данных (gzip будет использовать весь файл сразу) дает лучшую таблицу сжатия. Но в большинстве случаев разница будет очень очень мала, но в очень редком случае разница может быть более важной (если у вас очень большой файл с очень длинным партером, многократно повторяющимся в файле, но далеко друг от друга) (это очень упрощенный пример)
Если вы копируете данные только один раз, rsync сам по себе не станет большой победой. Если вам нравится gzip (или tar + gzip, поскольку у вас много файлов), вы можете попробовать что-то вроде:
Это позволит получить сжатие, которое вы ищете, и просто скопировать напрямую, без использования rsync.
источник
@radius, второстепенная идея о том, как
gzip
работает, -gzip
это алгоритм сжатия на основе блоков, причем довольно простой. Весь файл не рассматривается для таблицы сжатия - только каждый блок. Другие алгоритмы могут использовать все содержимое файла, и есть несколько, которые используют содержимое нескольких блоков или даже блоков переменного размера. Один увлекательный примерlrzip
того же автора, что иrsync
!Тощий по
gzip
российскому алгоритму .Итак, в итоге, использование
rsync -z
, скорее всего, даст такое же сжатие, какgzip
и первое - и если вы делаете дифференциальную передачу, лучше из-заrsync
алгоритма сравнения.Тем не менее, я думаю, что каждый найдет, что обычные
scp
удобные ударыrsync
для недифференциальных передач - потому что это будет иметь гораздо меньше накладных расходов, чемrsync
алгоритм (которыйscp
в любом случае будет использовать скрытое!)Если ваша сеть действительно становится узким местом, то вы хотите использовать компрессию на проводе.
Если ваши диски являются узким местом, то лучше всего потоковую передачу в сжатый файл. (например,
netcat
с одной машины на другую, потоковая передача вgzip -c
)Обычно, если скорость является ключевым фактором, сжатие существующего файла заранее неэффективно.
TIMTOWTDI, YMMV, IANAL и др.
источник
По словам этого парня, это может быть просто быстрее
rsync -z
, хотя я думаю, это будет почти так же эффективно, как сжатие каждого файла перед передачей. Это должно быть быстрее, чем сжимать поток смолы, как предлагают другие.Со страницы руководства:
источник
Поскольку и для scp сжатого файла, и для rsync потребуется очень похожее время передачи, «наиболее эффективным способом сделать это» будет сжатие на лету, а не сжатие, передача.
Помимо «быстроты» другие соображения включают в себя:
rsync может быть легко перезапущен, если не все файлы будут переданы.
rsync может использоваться для поддержки файлов на удаленной машине.
локальный tar или gzip требует локального пространства.
Рекомендации по использованию порта для целевой машины и брандмауэров: 1) scp использует порт 22 (по умолчанию), что может быть неприемлемо. 2) порт rsync для пользователей 873 (по умолчанию)
Я не уверен, почему радиус ожидает, что оригинальный постер НЕ хочет, чтобы файлы были разархивированы.
источник