Синхронизация файлов windows linux

Обновлено: 08.07.2024

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

Synkron имеет открытый исходный код и кроссплатформенный

Установщик Synkron имеет размер 5,3 МБ. Это кроссплатформенная программа с открытым исходным кодом, которая может быть действительно полезна, если у вас есть несколько устройств, работающих в Windows, Mac OS X и Linux. Вы получаете один и тот же простой в использовании интерфейс для всех трех ОС.

Анализируйте перед синхронизацией

Перед синхронизацией вы можете сделать предупредительную проверку того, как будет выглядеть ваша синхронизация. Функция анализа требует времени, чтобы показать вам любое несоответствие между источником и назначением. Например, он проверит структуру папок (папок, подпапок, файлов) и отобразит уведомление НЕ НАЙДЕН, если какая-либо из подпапок не существует на целевом жестком диске. Приятно то, что программное обеспечение автоматически создавать любые требуемые подпапки чтобы соответствовать исходной структуре папок источника.

Расширенные функции

Черный список: Вы можете придать этому приложению немного интеллекта, создав черный список. Черный список помогает игнорировать файлы, которые вы не хотите синхронизировать. Подстановочные знаки также можно использовать для синхронизации определенных файлов, которые вы хотите. Вам не нужно вводить его; просто перейдите к файлам и добавьте их. Широко используйте черный список для больших файлов, которые не нужно синхронизировать каждый раз.

Планировщик: Вы можете автоматически настроить Synkron на запуск операций синхронизации с помощью расписаний. Планировщик работает для нескольких заданий синхронизации так же, как и для одного.

Восстановить: Если вы удалите или перезаписываете файл за один запуск, вы можете легко восстановить его с помощью функции восстановления. Вам просто нужно выбрать дату, когда вы выполнили синхронизацию, и исходный путь к файлу.

Тонкая настройка расширенных функций

На мой взгляд, расширенные функции (нажмите кнопку «Дополнительно» в раскрывающемся списке) действительно дают этому небольшому приложению дополнительные возможности, когда дело доходит до автоматической настройки заданий синхронизации и резервного копирования. Вы можете игнорировать уже обновленные файлы, игнорировать черный список, перемещать содержимое вместо его синхронизации и т. Д.

Небольшое примечание: если у вас много файлов для синхронизации, выйдите из программ, интенсивно использующих процессор, таких как Firefox и других, чтобы ускорить синхронизацию Synkron. Synkron может легко стать вашим приложением для синхронизации файлов по умолчанию. Если да, расскажите нам, что вам в нем нравится. Даже если это не так, дайте нам знать.

Имеются два удалённых друг от друга сервера на Ubuntu 16.04 и Win2012r2.
Оба втянуты в один домен с AD, на обоих имеются файловые шары с множеством различных прав доступа через AD.
В шарах порядка 3млн. файлов в 400тыс. директорий. Всего чуть более 3ТБ данных.
Всё это дело надо непрерывно синхронизировать с минимальными задержками между серверами хотя бы в одну сторону (с линукс на винду) и, желательно, бесплатными решениями.

Рассмотренные варианты:
Resilio Sync - не умеет синхронизировать расширенные атрибуты (xattr, ACLs), есть Connect, но там платно уже,
Syncthing - тоже не умеет синхронизировать расширенные права доступа,
rsync - всё отлично синхронизирует, но долго строит дерево каталогов,
lsyncd - нельзя синхронизировать с виндой, пробовал монтировать виндовую шару через CIFS, но там нет inotify и ничего не получилось,
osync - тоже не получилось синхронизировать с примонтированной виндовой CIFS директорией, выдаёт
Unison - не умеет синхронизировать расширенные права. Хотя двусторонняя синхронизация на тесте с параметрами -repeat watch -fastcheck true быстрее всех остальных, но на больших объёмах данных я так и не дождался окончания начального построения,
robocopy - встроенная утилита в винде, аналогична rsync в линуксе, на нём и остановился пока, т.к. там есть встроенные параметры мониторинга изменений в исходной шаре.

Запускаю в несколько процессов команды на каждую шару (для ускорения):

/MON:1 - мониторит изменения источника за 1 минуту после окончания синхронизации и перезапускает процесс.
Проблема та же, что и у rsync - долгое построение дерева, отключить это, как в lsyncd или Unison, по видимому никак нельзя. Если кто знает, как можно отключить первоначальное построение дерева и сразу передавать изменения, подскажите, пожалуйста.
То что без начальной синхронизации менее надёжно знаю, планирую раз в сутки полностью прогонять rsync или robocopy.

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

В отдалённой перспективе снести винду и сделать везде lsyncd или zfs репликацию, но это дело будущего, сейчас надо решение в текущей конфигурации.

Во-первых, rsync + cwrsync для синхронизации файлов Windows и Linux

Rsync (удаленная синхронизация) - это средство удаленной синхронизации данных, которое может быстро синхронизировать файлы между несколькими хостами через LAN / WAN. Вы также можете использовать Rsync для синхронизации разных каталогов на локальном жестком диске.

Сначала установите службу rsync на сервере Linux

1, может быть установлен через Yum:

2. Файл конфигурации rsyncd.conf (/etc/rsyncd/rsyncd.conf) сервера rsync:

rsync в основном имеет следующие три файла конфигурации:

  • rsyncd.conf (основной файл конфигурации)
  • rsyncd.passwd (файл паролей)
  • rsyncd.motd (информация о сервере rysnc)

3. Создайте каталог rsyncd в каталоге / etc для хранения файла rsyncd.passwd

** Примечание:
Установите для атрибута файла файла паролей rsyncd.passwd значение root и установите для разрешений значение 600, иначе резервное копирование не может быть успешным! В целях безопасности атрибут файла должен быть владельцем Читаемый **

4. Настройте файл rsyncd.conf:

5, настройте файл rsyncd.motd (в этом нет необходимости)

Во-вторых, установите клиент cwRsync для Windows

2. Клиент cwRsync не требует сложной настройки. Настройте переменную среды Windows PATH: E: \ cwRsync \ Install \ bin

3. Создайте новый каталог rsync_data для синхронизации каталога данных в Windows (настройка имени)

4. Создайте файл пароля rsync.passwd в каталоге E: \ cwRsync, который является паролем: 123456

5. Напишите пакетный файл bat и сохраните его как bat в формате ANSI (в противном случае он будет искажен): rsync_start.bat

Так как rsync всегда есть что-то под Linux, при установке директории сохранения для win необходимо / cygdrive взять на себя инициативу, а затем букву диска и директорию

Просто запустите rsync_start.bat.

В-третьих, вы можете добавить пакетный сценарий в план задач Windows для автоматической синхронизации данных.

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

Попробую сберечь вам немного времени на чтение мануала и рассказать о самом важном и полезном. Простыми словами, как есть.

Зачем нужен rsync?

Зачем пользоваться rsync если есть привычные cp и scp , спросите вы.

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

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

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

Принцип применения

Если мы говорим о простом копировании файлов, то первым делом всегда стоит сделать пробный прогон (ключ -n ) в режиме с показом подробностей ( -v ):

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

После того как вы убедились что копируется именно то, что вы хотите, можно запускать самое настоящее копирование:

В этой команде ключ -a подразумевает рекурсивное копирование всех файлов и каталогов включая их атрибуты, такие как дата создания и дата изменения. Ключ -v даст вам подробный отчет о работе по мере выполнения и по окончании.

Правила копирования каталогов

С одной стороны правила очень простые.

Если в конце пути до именованного источника нет слеша, то скопируется сам каталог.

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

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

Потому лучше всегда следовать обычному сценарию с предварительной проверкой операции.

Некоторые полезные ключи

Сначала поговорим об опциях которые вам будет здорово знать без шпор и шпаргалок.

Ключ -P включает сразу несколько опций. С этим ключем rsync и покажет процесс копирования отдельных файлов, и продолжит копирование если оно было прервано. Особо эта опция пригождается при копировании больших файлов. Ключ -P нужно указывать каждый раз, иначе rsync удалит файлы которые не успели полностью закачаться.

Если вы копируете файлы с какого-то очень занятого, или слабого, сервера, то можно исключить трату ресурсов процессора на вычисление изменившихся частей файлов, скопировав их целиком. Для этого нужен ключ -W .

Если вам хочется знать сколько всего, по мнению rsync, осталось работать, вам нужен ключ --info=progress2 . Если вы копируете целую файловую систему, то этот ключ, будучи использован сам по себе, вас разочарует: информация об итоговом объёме будет постоянно обновляться. Это происходит потому что rsync не пытается считать всю файловую систему до того как начнёт копирование, а делает обе задачи сразу.

Но не отчаивайтесь! Если вы хотите знать точно сколько осталось работать с самого начала, то можно отключить последовательное сканирование ключём --no-inc-recursive или, короче, --no-i-r .

Ключи выше есть начиная с версии 3.1.0, то есть уже работают в Debian stable.

Если требуется не просто скопировать файлы, а полностью синхронизировать содержимое каталогов, удалив лишние файлы, при этом вам почему-то не с руки синхронизировать файлы с помощью Git, то пригодится ключ --delete (или эквивалентный ему --del ).

С этим ключём rsync удалит лишние файлы из каталого-назначения.

Ключ -n в команде выше был оставлен намеренно.

Дальше я рассмотрю в деталях более интересные, хоть более редко используемые, опции.

О сжатии замолвим слово

Вопреки популярному заблуждению от использования сжатия внутри rsync (ключ -z ) больше вреда, чем пользы. Дело в том что всюду используемый OpenSSH уже с версии конца 2005 года по умолчанию использует сжатие передаваемых данных. Сами понимаете, сжатие уже сжатых данных только лишь использует ресурсы процессора, не уменьшая объем передаваемых данных.

В том, что при соединении с вашим сервером уже используется сжатие, можно убедиться так:

Если эта команда не покажет, в числе прочих, такую строчку про включение сжатия как выше, то может быть вам стоит использовать сжатие. Стоит проверить что от сжатия есть толк. Особенно это касается маломощных устройств с быстрым соединением: вашему NAS может быть быстрее скопировать что-то по гигабитному линку без сжатия, чем пытаться обогнать гигабитную сеть маломощным процессором.

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

Копируем частично

Наверняка вам когда-нибудь понадобится чтобы rsync пропускал некоторые файлы при копировании.

В самом простейшем случае вам нужно чтобы rsync не копировал файлы разных систем контроля версий, включая каталог вроде .svn и .git . В этой задаче вам не нужно ничего кроме ключа -C (или --cvs-exclude в полной форме). Так файлы большинства популярных VCS будут проигнорированы будто их нет. Не забываем использовать -n при первом запуске.

Может получиться так что вы, по ошибке, скопируете кучу таких файлов от VCS. В этом случае для получения чистой копии вам пригодится ключ --delete-excluded , с которым все исключенные файлы будут удалены.

Исключаем через .rsync-filter

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

Для исключения чего-либо из списка на перенос нужно добавить в этот файл строчку с правилом ( - или + в начале строки).

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

Если нужно исключить файл или каталог относительно каталога в котором находится .rsync-filter , то укажем со слешем в начале:

В правилах звездочка соответствует любым символам кроме слеша, а две звездочки соответствуют вообще любым символам:

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

Файлы .rsync-filter команда rsync умеет искать по всей структуре каталогов будучи запущена с ключём -F .

Если нужно чтобы сами эти файлы не копировались, то нужно указать этот ключ два раза так:

Как видите, лишние файлы не скопировались:

Ограничим rsync по ssh

Случается нужно разрешить работу rsync по ssh, удалённо и без пароля, только определённого для каталога и хоста, исключив копирование чего-либо в другие места или из других мест.

То сначала нужно получить команду, которую rsync выполняет при вызове ssh на удаленном хосте:

Таким образом, даже если при запуске rsync будут указаны какие-то другие опции, на сервере-назначении всё равно выполнится команда rsync соответствующая исходным, заданным вами, опциям и настройкам.

Если нужно чтобы ваш бекап нельзя было перезаписать или удалить на сервере назначения, то опцию --del следует заменить на --ignore-existing .

Машина времени

Те пользователи macOS и OS X, что делают бэкап, наверняка оценили работу Time Machine. Эта программа позволяет буквально в два клика вернуться к прошлой версии любого файла. Не смотря на все красивости, Time Machine не делает ничего такого чего мы не можем сделать с помощью rsync .

Скрипт следует положить в корень того диска или каталога, куда следует делать бэкапы.

Запускать с указанием единственного аргумента: каталога с исходными файлами. Например, так.

После нескольких запусков получается такая структура каталога:

При этом latest указывает на самый последний бэкап.

В каждом из каталогов содержится слепок того, что было в исходном каталоге в момент копирования. Можно подумать что и место на диске занято пропорционально количеству копий, однако это не так.

Всё множество копий занимает лишь немного больше места чем исходный каталог. Место уходит на изменившиеся файлы.

Если ничего не менялось, то место всё равно расходуется на создание каталогов, которые нельзя хранить как жесткие ссылки.

Такая существенная экономия возможна благодаря упомянутым жестким ссылкам, которые rsync делает для файлов, не изменившихся с последнего копирования.

У одинаковых, не менявшихся, файлов будет один и тот же inode.

Конечно, по возможной экономии места на диске такому способу резервного копирования далеко до специальных программам, таких как Borg или Restic.

Читайте также: