Нам необходимо регулярно передавать большие (60 ГБ) образы виртуальных машин Hyper-V по нашей глобальной сети (из Великобритании в США) по выделенным линиям со скоростью 50 Мбит / с. Мы также используем DFS-R между сайтами. Раньше я использовал 7-zip, чтобы заархивировать виртуальную машину (на более мелкие блоки по 100 МБ), а затем перетащить файлы в папку передачи DFS-R. Когда отставание очистится, разархивируйте на другом конце.
Интересно, не зря ли я трачу свое время и могу также сбросить всю виртуальную машину (в основном файлы VMDX) в папку передачи и позволить DFS-R сжимать ее во время передачи.
Возникает вопрос - насколько эффективен алгоритм сжатия DFS-R по сравнению с собственным форматом 7zip 7z? 7-zip упаковывает образ примерно до 20 ГБ, поэтому экономия составляет 70%.
У меня такое ощущение, что дополнительное время на упаковку и распаковку перевешивает любую возможную более высокую степень сжатия в алгоритме 7-zip. Тем не менее, передача фрагментов размером 100 МБ кажется «лучше», чем один большой файл VMDX размером 50 ГБ.
DFS-R использует так называемое удаленное дифференциальное сжатие.
Вместо того, чтобы сравнивать и передавать весь файл, алгоритм сравнивает сигнатуры последовательных фрагментов данных между исходной и целевой репликами. Таким образом, по сети должны передаваться только разные порции данных, чтобы «восстановить» файл в целевом местоположении.
Таким образом, RDC несравнимо с алгоритмами сжатия, используемыми в 7-zip. Хотя они используют аналогичные методы (создание словарей сигнатур по диапазонам данных), алгоритм 7-zip предназначен для преобразования байтов в контейнерный формат без потерь, в котором все данные «сжаты» вместе, а цель RDC - выявить различия между похожими файлами или версии файлов, чтобы минимизировать объем передаваемых данных и синхронизировать реплики
Если у вас уже есть похожие файлы VMDX в целевом расположении, нет необходимости разбивать файл на блоки по 100 МБ. Просто убедитесь, что вы всегда используете один и тот же алгоритм (ы) сжатия при архивировании изображений.
Это поведение (сравнение похожие файлы, а не отдельные версии одного и того же файла, и извлечение фрагментов) известен как «межфайловый RDC», и общедоступная документация довольно скудна, но у команды блога AskDS есть краткое, но довольно хорошее разъяснение в этом посте вопросов и ответов
Как уже отмечал Матиас, DFS-R использует алгоритм "удаленного дифференциального сжатия" похожий на rsync's для передачи только измененных / добавленных частей файла, уже присутствующих на удаленной стороне. Дополнительно, данные сжимаются перед передачей используя Алгоритм сжатия XPRESS (Ссылка: Технет блог) с самого первого появления DFS-R в Server 2003 R2. Я не смог найти никаких подробностей о фактическом используемом варианте XPRESS, но, поскольку сжатие должно происходить на лету, он может использовать LZNT1 (в основном LZ77 с уменьшенной сложностью), поскольку это то, что используется в NTFS для той же цели.
Если вы хотите контролировать степень сжатия, рассмотрите возможность включения Ведение журнала отладки DFS-R и оценка файлов журнала.
Степень сжатия для любого из алгоритмов EXPRESS, вероятно, будет ниже (возможно, даже в два раза), чем то, что вы получаете с 7zip, который имеет алгоритмы, оптимизированные для уменьшения размера файла, а не для уменьшения использования ЦП. Но опять же, используя RDC, который позволяет передавать только измененные части файла, вы, вероятно, получите значительно меньше данных по сети, чем ваш архив 20 ГБ.
Предварительное создание архива 7zip для передачи с помощью RDC может показаться хорошей идеей, чтобы получить лучшее из обоих миров - только передавать изменения, но с более высокой степенью сжатия для измененных частей - но это не так. Сжатие приведет к искажению всего файла, и даже изменение одного байта в начале потока данных приведет к тому, что сжатый файл будет выглядеть совершенно иначе, чем раньше. Есть модификации алгоритма сжатия для смягчения этой проблемы, но 7zip, похоже, их пока не реализует.
В целом, вы можете значительно сэкономить на байтах, передаваемых по сети, при использовании DFS-R для передачи изменений файлов. Но маловероятно, что вы получите какую-либо экономию времени, и вы вызываете значительную нагрузку на ввод-вывод и ЦП в пункте назначения, а также в источнике, поскольку оба файла (исходный и целевой) необходимо прочитать и проверить контрольную сумму до фактического передача может начаться.
Изменить: если у вас есть новые файлы, RDC действительно не поможет - нет аналога rsync --fuzzy
параметр, который будет искать похожие файлы в месте назначения и использовать их в качестве основы для дифференциальной передачи. Если вы знаете, что у вас есть аналогичный файл (например, базовый образ переданной виртуальной машины HD), вы можете предварительно заполнить целевой каталог этим файлом.