Syncthing на сервере: частые ошибки и решения
Syncthing надёжен, но на сервере всплывают свои грабли: узлы не находят друг друга, папка вечно «Out of Sync», плодятся файлы с пометкой sync-conflict, а GUI недоступен после установки. Ниже — частые ошибки Syncthing на VPS и их решения: по каждой указана причина и конкретные команды.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Узлы не подключаются друг к другу
Устройства добавлены, ID введён верно, а статус узла — «Disconnected». Первое, что проверить, — открыт ли порт синхронизации на сервере:
ufw status
ss -tlnp | grep 22000
Порт 22000 (TCP и UDP) должен быть открыт наружу. Если фаервол его режет:
ufw allow 22000/tcp
ufw allow 22000/udp
ufw reload
Вторая причина — узлы полагаются только на локальное обнаружение, а находятся в разных сетях. Убедитесь, что в Настройки → Соединения включены Global Discovery и Relaying. Тогда узлы найдут друг друга через публичные серверы обнаружения даже за NAT. Проверить внешнюю доступность порта можно с другого хоста:
nc -vz ВАШ_IP 22000
Если порт «filtered» — трафик режет провайдер или облачная security group, а не только ufw. Это частая скрытая причина: локально ufw всё разрешает, а внешний фильтр провайдера поверх системного молча режет входящие, и узлы упорно не соединяются напрямую. Проверяйте доступность порта именно снаружи, с другого хоста, а не только с самого сервера, иначе диагностика уводит в ложном направлении.
Третья причина, о которой забывают, — рассинхрон версий или времени. Если на сервере сбито системное время, установление зашифрованного соединения между узлами может срываться, потому что проверки завязаны на актуальные метки. Убедитесь, что время синхронизировано (timedatectl status), а версия Syncthing на узлах не слишком расходится — очень старый клиент на одном из устройств иногда не договаривается с новым протоколом.
Папка вечно «Out of Sync»
Синхронизация запущена, но прогресс замер и папка показывает «Out of Sync» с процентом меньше 100. Разверните раздел папки — Syncthing перечислит проблемные файлы с причиной. Три типовых случая.
Права доступа: пользователь, от которого работает демон (syncthing), не может писать в каталог. Исправьте владельца:
sudo chown -R syncthing:syncthing /home/syncthing/Sync
Нет места на диске — самая частая причина у «застрявшей» папки:
df -h
И конфликт режимов: если на обоих узлах папка стоит «Send & Receive», а один из них считает файл другим — синхронизация буксует. Для серверной копии-хранилища переведите папку в «Receive Only», тогда сервер принимает изменения, но не навязывает свои.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSПлодятся файлы sync-conflict
В папке появляются копии вида имя.sync-conflict-20260824-.... Это не баг: два узла изменили один файл, пока не видели друг друга, и Syncthing сохранил обе версии, чтобы ничего не потерять. Решение — выбрать нужную версию и удалить конфликтную копию.
Чтобы конфликтов было меньше: не редактируйте один файл одновременно на двух устройствах и дайте узлам чаще синхронизироваться (постоянно включённый VPS как раз для этого). Найти все конфликты на сервере:
find /home/syncthing/Sync -name "*sync-conflict*"
Для баз данных и файлов, которые пишутся приложением в реальном времени (например, активный SQLite), Syncthing не подходит — их синхронизируйте в остановленном состоянии или исключите через .stignore.
GUI недоступен после установки
Открываете http://IP:8384 — не отвечает. Так и задумано: по умолчанию панель слушает только 127.0.0.1, наружу не торчит. Правильный доступ — через SSH-туннель:
ssh -L 8384:127.0.0.1:8384 root@ВАШ_IP
Затем откройте http://127.0.0.1:8384 в браузере. Если панель нужна на другом адресе, поменяйте address в секции <gui> файла конфигурации, но помните: открытый наружу GUI без пароля — прямой риск. Файл конфигурации:
nano /home/syncthing/.local/state/syncthing/config.xml
В свежих версиях путь конфига — ~/.local/state/syncthing/, в старых — ~/.config/syncthing/. После правки перезапустите сервис.
Высокое потребление CPU и диска
Syncthing грузит процессор на 100% и сервер тормозит. Обычно это первичное сканирование большой папки или пересчёт хешей. Дайте ему завершить полное сканирование — после этого нагрузка падает до фоновой.
Если высокая нагрузка постоянна, снизьте частоту сканирования папки (Настройки папки → Full Rescan Interval, увеличьте значение) и включите слежение за файловой системой (fswatcher) вместо периодического обхода — так Syncthing реагирует на изменения, а не перечитывает всё подряд. Проверить, кто ест ресурсы:
top -o %CPU
На совсем слабом тарифе большие библиотеки с сотнями тысяч файлов упрутся в CPU при хешировании — тогда стоит взять сервер на пару ядер мощнее.
Стоит различать разовую и постоянную нагрузку. Разовый всплеск при первом добавлении большой папки — это нормально: Syncthing один раз считает хеши всех файлов, и по завершении процессор освобождается. Пугаться такого всплеска не нужно, важно лишь дать ему завершиться, не перезапуская сервис на середине. А вот постоянно высокая нагрузка — уже симптом: обычно это слишком частое полное пересканирование либо отсутствие слежения за файловой системой, из-за чего Syncthing раз за разом перечитывает весь каталог вместо того, чтобы реагировать на конкретные изменения. Включённый fswatcher и разумный интервал полного пересканирования почти всегда снимают эту проблему, и постоянная нагрузка падает до едва заметной фоновой.
Сервис не стартует или падает
После перезагрузки Syncthing не поднялся. Проверьте, включён ли автозапуск и что пишет журнал:
systemctl status syncthing@syncthing.service
journalctl -u syncthing@syncthing.service -n 50 --no-pager
Частая причина падения — панель или папка на внешнем диске, который монтируется позже старта сервиса. Тогда Syncthing не находит каталог и выходит с ошибкой. Добавьте в unit-файл зависимость RequiresMountsFor= на точку монтирования и:
systemctl daemon-reload
systemctl enable --now syncthing@syncthing.service
Ещё одна ловушка — база данных индекса повредилась после жёсткого выключения. В этом случае Syncthing сам пересоберёт индекс при старте; это может занять время, но данные не теряются.
Разобравшись с портами, правами и режимами папок, вы получаете тихий и надёжный узел синхронизации. Для стабильной работы важен предсказуемый сервер с достаточным диском и открытым портом 22000 — такой VPS в MAATRIX можно оплатить картой РФ, по СБП или криптой.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Почему узлы не видят друг друга?
Чаще всего закрыт порт 22000 наружу или выключен Global Discovery. Откройте порт на фаерволе и проверьте доступность командой nc -vz IP 22000.
Откуда берутся файлы sync-conflict?
Один файл изменили на двух узлах до синхронизации. Выберите нужную версию, удалите конфликтную; чаще синхронизируйте узлы, чтобы конфликтов не было.
Как открыть GUI, если порт не отвечает?
Панель слушает только localhost. Заходите через SSH-туннель ssh -L 8384:127.0.0.1:8384, наружу порт 8384 не открывайте.
Можно ли синхронизировать активную базу данных?
Нет, файлы, которые приложение пишет в реальном времени, дают повреждения. Останавливайте приложение перед синхронизацией или исключайте файл через .stignore.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.