Pull to refresh

Comments 82

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



вспоминается как N лет назад нихронизацию поднимали на базах Fidonet стека, с помощью «левонета организации»…
Вообще, syncthing в данном случае был бы идеален для раздачи разного рода сериалов, когда серии подтягиваются автоматически.
А как у него с возможностью игнорировать удалённые удаления?
При нормальному не может, насколько я помню. Но умеет версионирование и корзину для таких вещей.
О! А ведь есть у него такой флаг. Вот кусок из документации:
ignoreDelete is an advanced folder setting that affects the handling of incoming index updates. When set, incoming updates with the delete flag set are ignored.
А что, этот флаг отменяет замену файла файлом с мусором?
Нет, не отменяет. Но там есть возможность задать глубину версий файла. И восстановить предыдущую версию.
Ну 10 раз заменить файл. Не большая разница вобщем-то. Вобщем, делайте параллельно копии раз в день с именем дня.
Можно копии суточные синхронизировать. Конечно, серебряной пули не бывает. Везде свои грабли.
Или можно так:
docker run -d --name syncthing -v /var/syncthing:/var/syncthing -p 8384:8384 -p 22000:22000 --restart=always
Не очень люблю docker. Мне нативно проще управлять. Если что-то совсем злое в плане зависимостей, то предпочитаю полную виртуализацию.
UFO just landed and posted this here
Тестировал syncthing под нагрузкой в более 120 постоянно активных клиентов (использовал сеть IoT) — хочу предупредить:
— под нагрузкой начинает потреблять большое количество ресурсов (иногда на столько большое что allwiner h3 1Gb просто не откроет интерфейс настройки);
— вылит клиента и возвращение через неделю, в такой сети, приводит к дублированию файлов (он их помечает как конфликтные). Решается в ручную удалением дублей, но все хосты сети перекачают по трафику.
Пришлось отказаться в пользу схемы клиент-сервер (хотя очень жаль).
Спасибо, не сталкивался пока. Для меня это резервный вариант копирования в любом случае.
Еще были проблемы с именами файлов (не знаю, починили или нет, в 0.14.44 так было). Суть в том, что если просто поменяешь регистр буквы в имени, то Syncthing не может синхронизировать такой файл.
Наткнулся на эту проблему и в версии 1.7.1
Так, что до сих пор не исправлено

1.19.2

Сервер на debian, клиенты на винде и android

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

Спасибо. А багрепорт есть?

Можно еще посмотреть на https://www.cis.upenn.edu/~bcpierce/unison/
Он конечно не умеет синхронизировать всех со всеми, а только мастер и много слейвов. Но обычно хоть одна точка с хорошим быстрым интернетом для мастера есть. По идее ресурсов unison должен потреблять меньше. Пусть unison и не прямая альтернатива syncthing, но как вариант.

Второй вариант будет работать только тогда, когда пользователь залогинился через ssh или авторизировался в локальной системе.

Эта проблема решается:
https://wiki.archlinux.org/index.php/Systemd/User_(Русский)#.D0.90.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_systemd_.D0.BE.D1.82_.D0.B8.D0.BC.D0.B5.D0.BD.D0.B8_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F

Главная беда как BTSync, Syncthing и их аналогов — отвратительная работа с большим количеством мелких файлов и директорий. Они просто захлёбываются и перестают нормально работать, выжирая кучу памяти и процессорного времени.

Раньше пытался использовать их для синхронизации рабочего окружения на десктопе, сервере и ноутбуке. Было очень удобно: не нужно вообще ни о чём задумываться — всё синхронизируется само в автомате. Но со временем стали появляться проблемы, и в итоге пришлось от этих программ отказаться после пары случае рассинхронизации.

Одна из фундаментальных проблем — отсутствие полноценных средств слежения за изменениями в файлах и директориях в ОС и ФС. Механизм inotify очень плохо масштабируется: с его помощью нельзя следить рекурсивно за всеми директориями, за каждой директорией нужно сделить отдельно, но дескрипторов-то у нас не бесконечное количество. В Windows дела обстоят лучше — там средство слежения рекурсивное, но возможен приход события до вступления изменения в силу. И в обоих случаях есть ещё один подводный камень: переполнение очереди событий, восставление после которого будет очень болезненным.
Мне надо было синхронизировать кэш программы SasPlanet — миллион мелких файлов. В результате BTSync отжирал всю память и зависал. Если добавить паку с кэшем в игнор, то BTSync все равно ее индекисировал, отжирал память и зависал.
Syncthing тоже отжирает кучу памяти, но при добавлении папки в игнор, перестает ее индексировать и работает вобщем-то нормально.
Сейчас как раз использую SyncThing на трех машинах.
Я тоже нарывался на проблему, которую вы описываете. Но только с BTSync. После перехода на Syncthing такой проблемы не было, хотя папка и количество файлов в ней только росло.
Было бы неплохо указать ещё количество файлов, директорий и ОС. В моём случае — 22 тыщи директорий. Syncthing я тоже пробовал — но видимо, тогда он был совсем сырой и работал хуже BTSync.
Ну, сейчас это выглядит так: 3 063 Files, 200 Folders. В самом начале файлов было раза в четыре меньше, директорий была парочка.
Начинал всё это синкать с помощью BTSync, почти сразу попал на полный рассинхрон на всех трех устройствах (винда, линукс и андроид). И каждый клиент показывал разную информацию.
Тогда (года два назад) я решил попробовать Syncthing, и никакого рассинхрона до сих пор не было. Были пару раз какие-то дубли-конфликты, но решалось быстро ручной проверкой.
Ну это же вообще несерьёзно, на таких объёмах всё должно работать просто идеально.

Вот мой случай:

Folder "F:\.BTSync"

Contains:

Folders 22481
Files 387593
Files size 137 GB


Правда, из этого количества нужно ещё выкинуть игнорируемые директории — останется примерно 15к папок и 200к файлов, что все равно дофига для синхронизации.
3k файлов это совсем цветочки, когда будет под 300k тогда можно будет судить о чём-то. Посмотрел на свою синхронизируемую папку — это 260094 файла и 60123 папки (между двумя маками в локальной сети), действительно порой дикие CPU-всплески бывают, но по памяти большого «отжирания» не заметил.
Использую syncthing, несколько кейсов:
для синхронизации каталога с мелкими файлами (заметки, логи, версии этого в git) — 33 тысячи файлов, 1.3 гб — полет нормальный. постоянно несколько нод онлайн, максимально — до 5 нод поднимал.
в другом месте на двух windows машинах синхронизация данных — около 180 гб, используется версионирование, переодически слышу отзывы о пропадании корректной версии, или наоборот, о невозможности откатиться на нужную, часто вижу конфликты по синхронизации, и там более нескольких сотен таких ошибок — разбирать часто нет времени/желания. отказываться ещё не хочу, но проблемы признаю.
На днях добавил к тем windows-нодам свой linux сервер — чтобы организовать версионирование силами btrfs, при синхронизации сотни ошибок по поводу длины имени файла (ntfs vs btrfs )) ) — но с моей точки зрения, если это будет работать, то резервные копии уже не так и нужны.

Всем программам динамической синхронизации, то есть такой, которая происходит в реальном времени, нужно держать в памяти все метаданные к файлам. Хотя бы потому что система inotify ненадёжна по определению. Потому любые такие программы будут есть много памяти на множестве мелких файлов пока не придумали надёжный вид inotify. Это не беда программ синхронизации, это особенность современных ОС.


Иначе говоря, вы либо терпите этот недостаток, либо делаете rsync раз в полчаса. Ругаться, жаловаться и порицать не имеет смысла: это не та проблема, которую можно решить.

Это не беда программ синхронизации, это особенность современных ОС.…

Почему же? В той же Mac OS проблемы с переполнением очереди событий, насколько я понимаю, нет. FSEvents — вполне эффективная штука, судя по её описанию.


Ругаться, жаловаться и порицать не имеет смысла: это не та проблема, которую можно решить.

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


Кстати, интересно, почему до сих пор нет решений на базе виртуальных файловых систем? Берём FUSE/Dokan, проксифицируем обращения к ФС и имеем полный контроль за всеми изменениями, правда, ценой небольшого падения производительности из-за накладных расходов.

А можно настроить запуск какой-нибудь команды по окончанию синхронизации?


Например, раздача софта или обновлений баз данных: сейчас для этого по крону запускается скрипт, который сперва через rsync выкачивает содержимое папки, потом запускает команду распаковки/установки. Чтобы 200+ серверов выкачивающих гигабайты данных не положили сеть и раздающий сервер, приходится разбрасывать время старта.
Syncthing мог бы распараллелить и снизить нагрузку, но как узнать, что точно все файлы и папки загрузились, и можно запускать программу установки?

Тривиально никак, на мой взгляд. Из особо извращённых вариантов — запуск после того, как хеши файлов сойдутся. Или размер каталогов. Хотя кейс интересный.
Порылся еще. Там есть syncthing CLI. Один из вариантов — писать логи куда-то. Потом парсить их на предмет статуса up to date.
Вообще-то там есть REST API
docs.syncthing.net/dev/rest.html

и в нем можно подписаться на какие-то события и прочитать состояние ноды
Не знал, спасибо. Надо подумать, возможно я смогу что-то оптимизировать.
Возможно вам подойдёт не средство синхронизации (syncthing, btsync), а просто консольный торрент-клиент, например aria2:
aria2 is a lightweight multi-protocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink. aria2 can be manipulated via built-in JSON-RPC and XML-RPC interfaces.

Да, но тогда для каждого чиха придется перехешировать весь каталог и заново создавать/рассылать torrent файл.

По-моему, это только всё усложнит.
Syncthing удобен тем, что расшарил папочку, и клиенты её выкачивают, а если папочка большая и клиентов много, то они качают и друг от друга, а не только с раздающего сервера.
Не хватает только хука syncCompleted.sh, который бы выполнялся после завершения синхронизации.
Но исходники открытые, можно и подкостылить для себя, наверное, или зацепиться за event-ы ItemFinished или FolderCompletion, как предлагает Tsvetik.

Но исходники открытые, можно и подкостылить для себя

Разве API не хватает?
Использую Syncthing для перемещения больших файлов на/с удаленные Windows со/на своего компьютера.

Очень нравится стабильность и скорость и не ломать головы насчет NAT на слабом канале по сравнению с другими способами перекачки файлов.
Используем данный продукт для синхронизации данных между филиалами.
Работает более года уже.
Скриншот одной из нод
image

Главное настроить исключения нормально. С последними билдами отпала необходимость выставлять время синхронизации. Ставим «Watch for Changes» и на всякий случай «Full Rescan Interval» в час или часы.
У меня больше проблема с частичной синхронизацией той же базы данных. Канал потух, не успев дать полную копию и на руках не валидная каша из старых и новых файлов. Я думаю поднимать сервис только в субботу и к понедельнику гасить. Возможно, синхронизировать не саму базу, а ее упакованные снапшоты.
Про дампы.
Инкрементальный бэкап сильно упрощает жизнь, а если с сжатием так вообще сказка.
На одном из серверов БД сделано так. Сервер делает бэкапы в папку на самом сервере. Полные, инкрементальные, транзакций. После этого «синком» улетает на сервер бекапов. Контроль версий не используется из за того что в названии бэкапа имеется timestamp.

А вообще сильно индивидуально. Зависит от объема, нагрузки, etc.
Описанное выше это слабонагруженный сервер и ему такие вольности простительны.
Там винда стоит. Штатными средствами резервные копии льются. Надо подумать.
UFO just landed and posted this here
Насколько я знаю, при синхронизации между NTFS все переносит, если не стоит флаг игнорирования. При синхронизации с линуксовыми файловыми системами метаинформация теряется.
Права не переносятся. Ни доменные, ни локальные группы\пользователи.
Специально сейчас провел эксперимент, думал что то поменялось.
Все так же ка ки было.
Возможно мы что то не так делаем, но права не переносятся с других нод.
Надо копаться в документации. При работе от root по идее все должен переносить. Там даже галочка есть в настройках Ignore permissions.
UFO just landed and posted this here

Печалит, что .stignore не передается между нодами и необходимо придумывать велосипеды с #include

Если мне память не изменяет от вас уже были мануалы тут об own(next)cloud. Правильно ли понимаю что вы сменили метод синхронизации? И если да, то почему?
Нет, не сменил, просто задачи разные. Тут как раз фишка именно в том, что это единый кластер, который хорошо работает при проблемах со скоростью на отдельных нодах.
UFO just landed and posted this here
А для простых и приземленных вещей, вроде синхронизации я-то с андроида на домашнюю винду эта хитрая штука лучше или хуже банального бтсинк? Про то андроид ничего и не сказано…
На андройде не интересно тем, что не умеет работать с картой памяти.
Значит чисто корпоративная прога. Может в повседневном использовании кому-то будет полезна… Но…
Тут надо привет Гугол передать. На каких-то версия андроида работает полностью.
Не обязательно. Каталоги конфигурационные можно синхронизировать, например. Условные два планшета на Android с Kodi-медицентром. Синхронизация рабочего каталога Kodi даст возможность иметь единую базу фильмотеки и просмотренных фильмов. Это просто как пример. От потребностей зависит. Просто синхронизация каталогов между своими компьютерами.
Может быть да, а может и нет. Надо всесторонне испытывать мобильное приложение. Дропболкс и БТСинк работают хорошо и без сбоев — проверено. А вот эта штука — кот в мешке, без тестов на смарте поднимать такой сервер для «синхронизации фоточек» — может быть слишком избыточно.
На смарте можно использовать другие приложения для синхронизации (например FolderSync) И заливать по SFTP (ssh), webdav, итд.
Я много пробовал, но остановился на банальном Дропбоксе. Плата за сервис компенсируется тем, что он очень хорошо интегрирован во всякие другие службы и программы.
Пригодится, спасибо)
Поставил сабж для оперативной синхронизации рабочего виндового dev окружения. Так вот он в такой конфигурации постоянно шуршит диском — пришлось SSD взять под рабочий каталог
UFO just landed and posted this here
Сделай /mnt/sync. Потом chmod 770 -R /mnt/sync. А группу сделай общую для обоих пользователей. Запускай от отдельного пользователя.
UFO just landed and posted this here
А если, допустим, первый пользователь создает там файл, второй же не сможет его править, потому что файл чужой?

Поставьте флаг sgid для каталога и будет вам счастье.

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Очень жаль, что в целях безопасности, механизм добавления устройств требует повторяющихся однотипных действий с обеих сторон. И если мне нужно распространять папку на кучу машин с пары-тройки серверов, то нормального решения пока не найдено…
Ansible добавить для массовой разливки конфигов?
Почитал про Ansible, и, каюсь, надо было сразу для ясности писать, что там, где это надо, и машины и сервера на Windows, а машины ко всему еще и в сети бывают лишь иногда.
И идея в том была, чтобы через SyncThing синхронизировать папку с необходымым набором скриптов (cmd/powershell — не суть), пара из которых запланирована была бы шедуллером на запуск по событию и условно раз в день в час Ч. Проблема доставить их и поддерживать актуальными при эпизодической связи, это и хотелось бы решить через ST.

Где-то с 2011 года начал использовать в своих делах BTSync, как только они начали его монетизировать перешёл на Syncthing и так же продолжил использовать для бизнеса. В синхро-работе 7 машин (2 всегда включены). Есть свой релей, и тот же для глобального обнаружения, так как почти все пользователи за NAT.
Посмотрел сейчас в работе: 97 553 объекта, всего 74,4 ГБ. Работает не захлёбывается. Скорости синхронизации выставляем на 5-10Мбит. Кое-что синхронизируем с поддержкой пяти последних версий файлов, что-то ежедневно в архив убираем, что-то раз в месяц.
Вот как-то так и живём. Syncthing крутая штука.

Но это не всё, что нам помогает. Есть у нас пару nextcloud. Для дела и второй для личного. Ну так повелось, два разных.

Hidden text

Но это не всё, что нам помогает.
Есть у нас пару nextcloud. Очень крутая и нужна вещь для дела. Без него тоже никак.
Так повелось, два разных. Для дела и второй для личного.

Sign up to leave a comment.

Articles