Дата публикации:Wed, 13 Aug 2025 09:47:43 +0300
Представлен релиз системы автоматической синхронизации файлов Syncthing 2.0, в которой синхронизированные данные не загружаются в облачные хранилища, а напрямую реплицируются между системами пользователя при их одновременном появлении в online, используя развиваемый проектом протокол BEP (Block Exchange Protocol). Код Syncthing написан на языке Go и распространяется под свободной лицензией MPL. Готовые сборки подготовлены для Linux, Windows, macOS и FreeBSD.
Кроме решения задач по синхронизации данных между несколькими устройствами одного пользователя, при помощи Syncthing возможно создание больших децентрализованных сетей для хранения совместно используемых данных, которые распределены по системам участников. Предоставляются средства контроля доступа и создания исключений для синхронизации. Возможно определение хостов, которые будут только получать данные, т.е. изменение данных на этих хостах не будет отражаться на экземплярах данных, хранимых на других системах. Поддерживается несколько режимов версионирования файлов, при которых сохраняются прошлые версии изменившихся данных.
При синхронизации файл логически разбивается на блоки, которые неделимы при передаче данных между системами пользователя. При синхронизации на новое устройство, в случае наличия идентичных блоков на нескольких устройствах, копирование блоков производится с разных узлов, по аналогии с работой системы BitTorrent. Чем больше устройств участвуют в синхронизации, тем быстрее будет проходить репликация новых данных за счёт распараллеливания. В процессе синхронизации изменённых файлов, по сети передаются только изменившиеся блоки данных, а при переименовании или изменении прав доступа синхронизируются только метаданные.
Каналы передачи данных формируются при помощи TLS, все узлы аутентифицируют друг друга по сертификатам и идентификаторам устройств, для контроля целостности применяется SHA-256. Для определения узлов синхронизации в локальной сети может быть использован протокол UPnP, при котором не требуется ручной ввод IP-адресов синхронизируемых устройств. Для настройки системы и мониторинга предусмотрен встроенный web-интерфейс, CLI-клиент и GUI на базе библиотеки GTK, в котором дополнительно предоставляются средства управления узлами синхронизации и репозиториями.
Ключевые изменения в новой ветке:
- Бэкенд хранения переведён с БД LevelDB на SQLite. Миграция данные производится автоматически при первом запуске после обновления. Предполагается, что использование SQLite упростит сопровождение и анализ данных, а также сократит число ошибок. Изменён формат ведения логов, которые теперь формируются в структурированном виде (сообщение + параметры в формате ключ-значение). Добавлен новый уровень логов - WARNING, который не столь подробен как INFO, но охватывает больше информации по сравнению с уровнем ERROR. Предоставлена возможность назначать разные уровни логов разным пакетам. Прекращено вечное хранение удалённых элементов в БД, подобные элементы теперь удаляются через 6 месяцев (время можно изменить через опцию "--db-delete-retention-interval". Улучшен код для разбора опций командной строки и прекращена поддержка устаревшего формата с одним тире (т.е. вместо "-home" следует указывать "--home"). Переименованы или переведены в разряд подкоманд некоторые опции. Прекращено создание каталога по умолчанию при первом запуске. Задействована установка нескольких сетевых соединений между устройствами, использующими Syncthing 2.x. По умолчанию создаётся три соединения - одно для метаданных индекса и два для обмена данными. Изменён алгоритм разрешения конфликтов в ситуации удаления файлов. Из-за сложностей кросс-компиляции SQLite прекращена сборка готовых исполняемых файлов для платформ dragonfly/amd64, illumos/amd64, solaris/amd64, linux/ppc64, netbsd/*, openbsd/386, openbsd/arm и windows/arm.
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63722