Включает ли опция сжатия -z с rsync ускорение резервного копирования

37

In rsync, -zсжимает данные файла во время передачи.

Если я правильно понимаю, -zсожмите файлы перед передачей, а затем распакуйте их после передачи. Сокращается ли время при передаче из-за сжатия, превышающего время сжатия и распаковки?

Зависит ли ответ на вопрос, сделаю ли я резервную копию на внешний жесткий диск через USB (2.0 или 3.0) или на сервер через ssh через Интернет?

Тим
источник
Также помните, что если сжатый файл не сильно отличается по размеру от исходного файла, это может привести к огромным накладным расходам.
Heemayl
1
Чтобы уточнить, что говорит Heemayl, если содержимое в основном является материалом, который уже находится в сжатом формате (jpeg, mpeg, дистрибутивные пакеты и т. Д.), Сжатие будет гораздо менее эффективным. Я заметил, man rsyncчто на самом деле существует список файловых суффиксов, которые не будут сжаты даже с помощью -z(см. --skip-compress).
Златовласка

Ответы:

46

Это общий вопрос. Улучшает ли сжатие и декомпрессия в конечных точках эффективную полосу пропускания канала?

Эффективная (воспринимаемая) полоса пропускания канала, выполняющего сжатие и декомпрессию в конечных точках, является функцией:

  1. как быстро вы можете сжать (ваша скорость процессора)
  2. фактическая пропускная способность вашей сети

Функция описана на этом трехмерном графике, к которому вы можете обратиться для вашей конкретной ситуации:

введите описание изображения здесь

График взят из статьи Compression Tools Compared 2005 от http://www.linuxjournal.com/ .

PSkocik
источник
1
Ваш тип данных также является основным фактором (фактор № 3 отсутствует в списке). В связанной статье используется типичное сочетание данных. Ваш не может быть типичным. Если вы синхронизируете 100% ZIP-файлы (или любые предварительно сжатые данные), вам, вероятно, не нужно сжатие. Если вы синхронизируете текстовые файлы на 100%, сжатие может быть быстрее, даже если ваша сеть работает быстро и ваш процессор работает медленно. Взвесьте все 3 фактора.
Ричард Брайтвелл
13

Если у вас очень медленное соединение (например, GPRS), вы определенно хотите максимально сжать ваши данные, иначе ваше соединение замедлит работу.

Если у вас очень медленный процессор и быстрое соединение (например, встроенное сетевое устройство), вы обычно не хотите сжимать ваши данные, иначе ваш процессор замедлит работу.

Михась
источник
3

Зависит от того, насколько сжимаемы ваши данные и от вычислительной мощности вашего источника и места назначения. По моему опыту, полная резервная копия диска будет сжата до 30-50% от ее первоначального размера, поэтому, возможно, стоит попробовать. В противном случае не беспокойтесь о сжатии. Возможно, стоит проверить степень сжатия pigz -c <your file> | wc -cи сравнить возвращаемый размер с исходным размером.

RAKK
источник
2

Да, скорость соединения определяет, ускоряет ли скорость. Это будет связано только с резервным копированием через USB, потому что не диски раздувают данные, а процесс, который записывает данные. Так что та же самая машина, которая читает и выкачивает ее, должна надувать и записывать ее тоже. Я думаю, что Rsync - это еще два процесса, но ваша память для передачи данных из одного процесса в другой достаточно быстра, и процессору требуется больше времени для его сжатия (при чтении его в ту же память, которая впоследствии передает его :).

Сжатие помогает только тогда, когда у вас есть rsync отправителя и получателя и какая-то более медленная сеть между ними. Например, 1 Гбит может быть достаточно быстрым, если у вас есть локальный NAS, 10 Гбит - это уже сырая скорость SATA. Таким образом, сжатие необходимо только тогда, когда у вас есть подключение 100 Мбит или меньше, и это имеет смысл только тогда, когда сжатые данные сжимаемы.

Я думаю, что rsync может заметить, что он работает не на двух машинах, а на одной и пропускает сжатие, но не уверен.

Рене Швицке
источник
1

tl; dr По медленным ссылкам передачи, сжимать, иначе нет. Ниже приведен тест скорости сжатия, ссылка на инструмент преобразования пропускной способности и некоторая информация.

Использование сжатия с rsyncускорит работу только в том случае, если промежуточная линия связи «достаточно медленная», т. Е. Если машина на одном конце способна создать поток сжатых данных достаточно быстро, чтобы насытить канал связи.

Итак, какова самая медленная связь, на которой я должен использовать сжатие, чтобы получить что-нибудь?

Ниже приведен очень ненаучный тест, который покажет, как быстро gzipможно создавать данные, и что это означает для того, следует ли вообще сжимать объемные передачи в сети.

Входные данные сильно изменят результаты теста . Я использую несжатый (!) Обычный файл на моем компьютере, который может представлять тип данных, которые я обычно передаю по сети. Использование /dev/zero(создание неограниченных нулей) будет вводить в заблуждение, поскольку поток нулей будет очень легко сжать, а использование /dev/randomбудет вводить в заблуждение по противоположной причине. Поэтому вместо этого я использую tar-файл своего $HOME/localкаталога, который содержит программное обеспечение, которое я установил в моем $HOME. Файл сам по себе не сжат, но содержит смесь двоичных файлов, небольших сжатых файлов и исходных / текстовых файлов, и я бы сжал его с настройками по умолчанию, так как gzipон уменьшится на 67% с 64 МБ до 22 МБ.

$ gzip -c local.tar | dd of=/dev/null
43092+4 records in
43093+1 records out
22063854 bytes transferred in 2.819 secs (7825741 bytes/sec)

Я делаю это несколько раз, чтобы понять, каково среднее значение, и оно достигает 7800000 байт / с.

Затем я использую калькулятор пропускной способности сети, чтобы увидеть, во что это конвертируется. В данном конкретном случае он оказывается чуть менее пропускной способности проводной линии связи «100 Мбит Ethernet», чуть быстрее, чем интернет-восходящая линия связи «VDSL Download», немного быстрее, чем беспроводная связь «802.11 [a / g]», и где-то еще. между «Bluetooth v3.0» (медленнее) и «USB 2.0» (быстрее).

Это означает, что если я использую сжатие поверх чего-либо более быстрого , сжатие, скорее всего, замедлит передачу файла.

rsyncне может быть с помощью точных же библиотек , как gzipсделать сжатие, но выше даст вам немного намека , по крайней мере.

rsyncхотя, как вы знаете, он делает больше, чем просто сжатие, и реальное увеличение скорости происходит только за счет передачи [битов] файлов, которые изменились.

По моему собственному опыту, использование сжатия с использованием rsyncстало менее и менее выгодным за последние 10 лет или около того, так как пропускная способность сетей увеличилась (где я нахожусь).

Для создания инкрементных резервных копий я бы определенно рекомендовал исследовать эту --link-destопцию (это не имеет ничего общего с тем, что передается, только с тем, как вещи хранятся в целевом объекте). Кроме того, если вы делаете это по SSH, не используйте сжатие, если ваше SSH-соединение уже сжато, и сжимайте только SSH-соединения (туннели и т. Д.) По медленным каналам по тем же причинам, что и выше.

Кусалананда
источник