Rsync from Linux to Windows share – How to transfer
We help some of our customers with Rsync to copy files from one location to another. In the course it was found that it is fast and can also be used for mirroring data and incremental backups.
As part of our Server Management Services, we assist our customers with several Rsync queries.
Today, let us see how to transfer Rsync from Linux to Windows share.
What is Rsync?
A fast and versatile command-line utility, Rsync (Remote Sync) helps to synchronize files and directories between two locations over a remote shell, or from/to a remote Rsync daemon.
In addition, it provides fast incremental file transfer by transferring only the differences between the source and the destination.
We can use Rsync for mirroring data, incremental backups, copying files between systems. It acts as a replacement for scp, sftp, and cp commands.
Advantages and features of the Rsync command include:
- Rsync efficiently copies and sync files to or from a remote system.
- Supports copying links, devices, owners, groups, and permissions.
- It’s faster than SCP (Secure Copy) since it allows the transfer of just the differences between two sets of files.
- It consumes less bandwidth using the compression and decompression method while sending and receiving data.
Transfer Rsync from Linux to Windows share
Initially, we make a mount point:
Then, we mount the smb share:
mount -t cifs -o username=domainusername //ip_add/ShareFolder /mnt/share
It will prompt for a password. It is always a good practice not to provide password within commands.
In addition, if we run the following command we can verify if it has mount:
mount //ip_add/ShareFolder on /mnt/share type cifs (rw)
Similarly, we can mount it after every boot.
In order to do that we need to add it to /etc/fstab:
//ip_add/ShareFolder /mnt/share smbfs username=domainusername,password=P@S5W0rd 0 0
Now we can Rsync data to it.
For example, to rsync bob’s home directory into a dir called ‘homedir’ we run:
rsync -avz /home/bob/ /mnt/share/homedir/
[Stuck with the transfer? We are here to help you]
Conclusion
To conclude, the transfer of Rsync from Linux to Windows share can be done in a few steps. Today, we saw the best fit suggested by our Support Engineers.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
RSync на стероидах с поддержкой Windows
На Хабре периодически рассказывают о новых инструментах для синхронизации данных. Это интересная тема. Такие программы используются:
- для синхронизации файлов на разных устройствах,
- дедупликации,
- резервного копирования,
- сжатия.
Кроме того, инструменты синхронизации интересны с алгоритмической точки зрения. Любопытно, как люди умудряются оптимизировать базовые алгоритмы типа rsync , которые вроде бы работают идеально. Но нет, всегда можно придумать что-то получше.
rsync
Как известно, инструмент для быстрой синхронизации файлов rsync разработан австралийским программистом Эндрю Триджеллом по кличке Тридж в 1996 году для его кандидатской диссертации.
Суть алгоритма заключается в том, что файл разбивается на куски фиксированного размера, для каждого из них вычисляется MD4-хеш и скользящий хеш (rolling hash). Хеши отправляются второму компьютеру для сверки. В упрощённом виде схема выглядит так:
Этот алгоритм и концепция скользящего хеша используются во многих программах для синхронизации файлов, включая rdiff, librsync (Dropbox), sftp, macOS 10.5+, zsync (Ubuntu и другие Linux-дистрибутивы), rclone и др.
В последующие годы для rsync было разработано множество оптимизаций, особенно в части сжатия данных при их передаче.
CDC
Главным улучшением стало изобретение блоков переменного размера, когда границы скользящего окна не смещаются по биту, а устанавливаются в зависимости от содержимого файла. Другими словами, если у нас в битовом потоке попадается одинаковый фрагмент до 64 бит, то рамки скользящего окна сдвигаются на границу этого фрагмента. То есть разбиение на блоки происходит в зависимости от контента. Так появился алгоритм CDC (Content Defined Chunking), который благодаря своей простоте и эффективности стал по-настоящему гениальным изобретением.
Для сравнения, вот схема работы CDC:
CDC решает «проблему сдвига границы», показанную на КДПВ.
А теперь мы переходим к самому интересному…
Помните, был такой игровой сервис Stadia, который повторил судьбу десятков замечательных проектов компании Google, прибитых на взлёте? Сегодня он встречает похоронной надписью на главной странице:
Проект закрылся 18 января 2023 года…
Главная инновация Stadia состояла в трансляции видео с серверов Google на тонкие клиенты пользователей с минимальной задержкой. Говорят, работало фантастически. И просто удивительно, что Google решила убить такой перспективный проект.
Так или иначе, одной из внутренних технологий Stadia была эффективная синхронизация данных между Windows-серверами (большинство игр работает под Windows) и облачными Linux-инстансами для разработчиков. Сами разработчики Stadia первоначально использовали обычный scp , но он всегда копировал полные файлы без режима копирования «дельты» изменений, и в нём не было быстрого сжатия. Поэтому разработчики Stadia написали внутренние инструменты, которые решают эту проблему.
CDC File Transfer
В репозитории CDC File Transfer выложены две утилиты для синхронизации и стриминга файлов между машинами Windows → Windows или Windows → Linux. Это cdc_rsync и cdc_stream , соответственно. Обе используют упомянутый ранее алгоритм Content Defined Chunking (CDC) для максимально эффективного сжатия с учётом контента.
И теперь все желающие могут без проблем использовать эти инструменты для своих личных нужд, ставить на свои серверы и интегрировать в свои проекты. Чем многие не преминули воспользоваться: за несколько месяцев у проекта уже 75 форков и более 2700 звёзд на Github.
▍ cdc_rsync
Если вкратце, cdc_rsync работает примерно так же, как известная линуксовая утилита rsync. В большинстве случаев она просто быстро копирует файлы с одной системы на другую, но оптимизирована для ситуаций, когда на целевой системе уже есть старые копии файлов. В этом случае программа быстро проверяет метку времени и размер файла (тогда файл игнорируется с минимальной тратой времени на проверку). Если файл существует, но изменился, то утилита определяет, какие конкретно части файла изменились — и обновляет только их. И во всех случаях используется быстрый алгоритм сжатия данных.
Алгоритм удалённой сверки файлов основан на CDC, а по внутренним тестам Google он работает примерно в 30 раз (!) быстрее, чем rsync . Причины такого ускорения заключаются в значительной оптимизации по сравнению со стандартным алгоритмом rsync, который при сравнении копий файла использует скользящее окно фиксированного размера.
Эта оптимизация сильно влияет на общее время синхронизации файлов. На следующей диаграмме из репозитория показаны результаты реального тестирования cdc_rsync и линуксового rsync под Cygwin в Windows.
В целом, cdc_rsync синхронизирует файлы примерно в три раза быстрее, чем rsync под Cygwin. В качестве тестовых данных использовались девелоперские билды игры общим размером 40-45 ГБ. На трёх билдах, вероятно, потерялись какие-то файлы, что резко увеличило время синхронизации.
В итоге получается, что алгоритм cdc_rsync гораздо быстрее, чем rsync , и при этом проще. Поскольку границы блоков перемещаются вместе со вставками или удалениями, задача сопоставления локального и удалённого хешей является тривиальной операцией разности множеств. Она больше не включает поиск побайтовой хеш-карты.
▍ cdc_stream
В свою очередь, cdc_stream — это инструмент для потоковой передачи файлов и каталогов с Windows на Linux. Концептуально он похож на sshfs , но оптимизирован для скорости чтения. Утилита не поддерживает запись файлов обратно из Linux в Windows. Каталог Linux доступен только для чтения.
Вот как работает программа:
А ниже сравнительные графики производительности: время запуска игры от начала операции до появления меню на экране. Тестировались разные игры для Stadia, но в целом процесс демонстрирует скорость потоковой передачи любых файлов:
Судя по проведённым тестам, cdc_stream копирует файлы примерно в 2–5 раз быстрее, чем sshfs . Как можно понять из объяснений выше, эта разница обеспечена преимуществом CDC над стандартным алгоритмом rsync. Для эффективного диффиринга используется тот же алгоритм на основе CDC, что и в программе cdc_rsync .
Если файл изменился на Windows, то в систему Linux передаются только различия (дельта). Это происходит в момент считывания файла под Linux. Остальное считывается из кэша. Изменения в файлах Windows отражаются в Linux с задержкой от 0,5 с (плюс примерно 0,7 с на каждый гигабайт).
Операции stat выполняются очень быстро, поскольку метаданные (имена файлов, разрешения и т.д.) оптимизированы для потоковой передачи.
Более подробно об использовании инструментов cdc_rsync и cdc_stream и необходимой конфигурацией SSH и SFTP см. в документации на Github, а также в документации/комментариях внутри кода. В целом, cdc_rsync используется аналогично scp или rsync , с таким же синтаксисом, понимает стандартные виндовые заменители типа * и ? :
cdc_rsync C:\path\to\*.txt user@linux.device.com:~
Локальная синхронизация с Windows на Windows рекурсивно ( -r ) с визуальным индикатором прогресса ( -v ):
cdc_rsync C:\path\to\assets\* C:\path\to\destination -vr
Примечание. Инструменты cdc_rsync и cdc_stream — не единственные, в которых реализован алгоритм разбиения на блоки с учётом контента (CDC). Его использует restic и другие продвинутые инструменты для синхронизации и резервного копирования. В последние годы оптимальной реализацией CDC считалась FastCDC с поддержкой Gear-based CDC (GC) со скользящими хешами для разного размера окон, что повышает производительность вычислений (с оптимизациями 2020 года), есть версии на Rust, Python, C и др.
Подобные инструменты можно использовать для дедупликации файлов и резервного копирования по дельте. В большом масштабе это высвободит большой объём дискового пространства, сэкономит время и повысит скорость операций.
Разработчики пишут, что софт сделан на основе FastCDC с учётом конкретной сферы применения: максимально быстрой инкрементальной синхронизации файлов. И кажется, что это наследие Stadia — действительно лучший вариант для синхронизации/стриминга с Windows на Linux.
По крайней мере, крах Stadia принёс какую-то пользу обществу.