Синхронізуйте папку між двома комп’ютерами за допомогою спостерігача файлової системи, щоб кожен раз, коли файл змінювався, він негайно реплікувався


20

Я маю:

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

  • домашній комп'ютер (за маршрутизатором), загальнодоступний IP 198.51.100.17, який є Debian або Windows + Cygwin

Що найпростіше мати /home/inprogress/ синхронізовану папку (в обох напрямках), трохи схожу rsync, але з спостерігачем файлової системи , щоб кожен раз, коли файл змінювався, його негайно реплікувати з іншого боку? (тобто не потрібно вручну викликати програму синхронізації)

Я шукаю рішення командного рядка / без GUI, оскільки сервер без голови.

Чи є вбудоване рішення для Linux / Debian?


7
Ви описуєте syncthing.
Kusalananda

Є lsync, але я не знаю, чи працює він корисно для двосторонньої синхронізації.
Ульріх Шварц

lsync, csync2, inotify + rsync, але я вважаю за краще використовувати їх у налаштуваннях локальної мережі.
Rui F Ribeiro

2
На рівні файлової системи це звучить як OCFS2, або навіть RAID 1 за NBD
roaima

3
Одностороння синхронізація проста. Двонаправлена ​​синхронізація передбачає вирішення конфлікту (так, це станеться в якийсь момент), що в свою чергу означає певний інтерфейс користувача (хоча це не потрібно GUI).
jcaron

Відповіді:


23

Після коментаря @ Kusalananda я нарешті витратив кілька годин на тестування Syncthing для цього випадку використання, і він чудово працює. Він автоматично виявляє зміни з обох сторін, і тиражування відбувається дуже швидко.

Приклад: уявіть, що ви працюєте локально над server.pyвашим улюбленим програмним забезпеченням Блокнот, натисніть CTRL + S (Зберегти). Через кілька секунд він автоматично реплікується на віддалений сервер (без будь-якого діалогового вікна).

Одне чудове, що я помітив, це те, що вам не доведеться думати про IP домашнього комп'ютера та сервера із Syncthing: кожен "пристрій" (комп'ютер, сервер, телефон тощо) має унікальний DeviceID, і якщо ви ділитесь ідентифікатор з іншим пристроєм, він автоматично дізнається, як вони повинні з'єднуватися один з одним.

Зробити:

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

    Використовуйте звичайний інструмент налаштування Syncthing у браузері

  • Сторона VPS:

    Спочатку підключіть VPS до переадресації порту:

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

    Останній варіант дозволить перенаправити інструмент веб-конфігурації VPS Syncthing, який прослуховує порт 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 Кб / с при завантаженні)


@sudodus Друг уже порекомендував мені це кілька тижнів тому, і я спробував це для синхронізації з комп'ютером <-> телефоном, але я не уявляв, що він буде так добре працювати і на сервері розвитку! Відредагуйте свій код, натисніть зберегти, 1 2 3 це на іншому комп’ютері!
Бась

1
+1. У мене була така ж проблема довгий час, я використовував rsync + деякі сценарії протягом багатьох років, і, нарешті, спробував синхронізувати, csync, unison та кілька інших 2 місяці тому. Відмінно працює на будь-якій кількості комп’ютерів і навіть тоді, коли деякі з них не мають постійного підключення до мережі. Можу рекомендувати 100%.
Гунтрам Блом підтримує Моніку

1
Чудово, що ви протестували всі ці різні рішення @GuntramBlohm! Якщо у вас є кілька хвилин, щоб опублікувати відповідь, щоб дати свої відгуки / порівняння між синхронізацією, rsync, csync, unison і т. Д. Плюсами / мінусами для кожного, це буде дуже цікаво для подальшої довідки!
Basj

16

Здається, що Unison повинен зробити цю роботу.

Unison - це інструмент синхронізації файлів для OSX, Unix та Windows. Це дозволяє зберігати дві репліки колекції файлів і каталогів на різних хостах (або різних дисках на одному хості), змінювати їх окремо, а потім оновлювати, поширюючи зміни кожної репліки на інші.

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

Є компонент спостерігача файлів (fsmonitor), який може запускати синхронізацію, коли це потрібно. Шукайте "повторний перегляд" у посібнику для отримання детальної інформації.

Схоже, Debian має правильну версію (2.48+), упаковану з коробки .


Спасибі! Чи входить програма fsmonitor спостерігача за файлами поза коробкою з Unison, чи нам потрібно встановити цей інструмент і з'єднати його з Unison вручну?
Basj

1
@Basj Він включений в останні останні версії, і це справді тривіально налаштувати. Я додав посилання на посібник.
TooTea

Раніше я використовував це в старому Mac. Це просто працює з мінімальними клопотами. Не маю уявлення, чи підходить це для сценаріїв сервера.
Rui F Ribeiro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.