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

20

Я имею:

  • сервер Linux, который я подключаю через SSH по IP-порту 203.0.113.0, порт 1234

  • домашний компьютер (за маршрутизатором), общедоступный IP-адрес 198.51.100.17, который является либо Debian, либо Windows + Cygwin

Как проще всего /home/inprogress/ синхронизировать папку (в обоих направлениях), что-то вроде rsync, но с наблюдателем файловой системы , чтобы каждый раз, когда файл был изменен, он сразу же копировался на другой стороне? (т.е. нет необходимости вручную вызывать программу синхронизации)

Я ищу решение для командной строки / без графического интерфейса, так как сервер безголовый.

Есть ли встроенное решение для Linux / Debian?

Basj
источник
7
Вы описываете syncthing.
Кусалананда
Есть lsync, но я не знаю, насколько это полезно для двунаправленной синхронизации.
Ульрих Шварц
lsync, csync2, inotify + rsync, но я бы предпочел использовать их в локальной сети.
Руи Ф. Рибейро
2
На уровне файловой системы это звучит как OCFS2 или даже RAID 1 поверх NBD
roaima
3
Односторонняя синхронизация проста. Двунаправленная синхронизация подразумевает разрешение конфликтов (да, это произойдет в какой-то момент), что, в свою очередь, означает некоторый интерфейс (хотя не обязательно графический интерфейс).
jcaron

Ответы:

23

После комментария @ Kusalananda я, наконец, потратил несколько часов на тестирование Syncthing для этого варианта использования, и он отлично работает. Он автоматически обнаруживает изменения с обеих сторон, и репликация выполняется очень быстро.

Пример: представьте, что вы работаете локально server.pyв своем любимом программном обеспечении Notepad, вы нажали CTRL + S (Сохранить). Через несколько секунд он автоматически реплицируется на удаленный сервер (без всплывающего диалога).

Одна замечательная вещь, которую я заметил, это то, что вам не нужно думать об IP-адресе домашнего компьютера и сервера с помощью Syncthing: каждое «устройство» (компьютер, сервер, телефон и т. Д.) Имеет уникальный DeviceID, и если вы предоставляете общий доступ по идентификатору другого устройства он автоматически узнает, как они должны соединяться друг с другом.

Сделать:

  • Сторона домашнего компьютера (Windows или Linux):

    Используйте обычный инструмент настройки синхронизации в браузере

  • Сторона VPS:

    Сначала подключите VPS с переадресацией портов:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    

    Последний вариант перенаправит средство веб-конфигурации Syntshing VPS, прослушивающее порт 8384, на порт 8385 домашнего компьютера.

    Затем запустите это на VPS:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    

    Затем в браузере домашнего компьютера откройте http: // localhost: 8385 : это будет конфигурация синхронизации VPS!


Другое решение, которое я пробовал:

  • SSHFS, используя этот учебник . Обратите внимание, что в этом уроке они не используют sshfs-win, а вместо этого win-sshfs (это два разных проекта). Я попробовал оба, и я не мог заставить ни одного из них работать (вероятно, проблема с моей конфигурацией VPS).

  • Вот еще одна интересная ссылка: /softwarerecs/13875/windows-sshfs-sftp-mounting-clients


Дополнительные преимущества Syncthing, которые я только что заметил:

  • Вы можете уменьшить fsWatcherDelaySзначение config.xmlот 10до 2секунд, чтобы после выполнения сочетания клавиш CTRL + S через 2 секунды (+ время загрузки, т. е. менее 1 секунды для небольшого текстового файла) он находился на другом компьютере.

  • если вы синхронизируете два компьютера, которые находятся в одной локальной сети (просто передавая DeviceID друг другу, не нужно заботиться о локальных IP-адресах), он автоматически заметит, что ему не нужно проходить через Интернет, но это может иметь дело локально Это замечательно и обеспечивает очень быструю синхронизацию передачи данных (4 МБ / с!) Для phone <--> computerобоих, подключенных к одному домашнему маршрутизатору через WiFi ... ... тогда как он будет зависать на скорости 100 КБ / с в ADSL с синхронизацией Dropbox ! (мой ADSL ограничен на 100 КБ / с при загрузке)

Basj
источник
@sudodus Мой друг уже рекомендовал его мне несколько недель назад, и я попробовал его для синхронизации компьютера <-> телефона, но я не думал, что это будет работать так же хорошо для сервера разработки! Отредактируйте свой код, нажмите Сохранить, 1 2 3 это на другом компьютере!
Бась
1
+1. У меня была такая же проблема довольно долгое время, я годами использовал rsync + некоторые скрипты и, наконец, 2 месяца назад пробовал синхронизировать, csync, unison и несколько других. Прекрасно работает с любым количеством компьютеров, даже если некоторые из них не имеют постоянного сетевого подключения. Могу порекомендовать 100%.
Гунтрам Блом поддерживает Монику
1
Здорово, что вы опробовали все эти разные решения @GuntramBlohm! Если у вас есть несколько минут, чтобы опубликовать ответ, чтобы дать свой отзыв / сравнение между синхронизацией, rsync, csync, unison и т. Д. Плюсы / минусы для каждого, это было бы очень интересно для дальнейшего использования!
Basj
16

Похоже, Unison должен делать эту работу.

Unison - это инструмент синхронизации файлов для OSX, Unix и Windows. Он позволяет хранить две копии набора файлов и каталогов на разных хостах (или разных дисках на одном хосте), изменять их отдельно, а затем обновлять, распространяя изменения в каждой реплике на другую.

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

Существует компонент для отслеживания файлов (fsmonitor), который запускает синхронизацию при необходимости. Ищите «повторить часы» в руководстве для деталей.

Похоже, что Debian имеет нужную версию (2.48+), упакованную из коробки .

TooTea
источник
Благодарность! Включен ли в комплект поставки Unison файл-наблюдатель fsmonitor или нам нужно установить этот инструмент и вручную подключить его к Unison?
Basj
1
@Basj Это включено в достаточно недавние версии, и это действительно тривиально настроить. Я добавил ссылку на руководство.
TooTea
Я использовал это в прошлом на старом Mac. Это просто работает с минимальными хлопотами. Не знаю, подходит ли это для серверных сценариев.
Руи Ф. Рибейро