LINUX.ORG.RU

[Синхронизация] есть ли готовые решения?

 


0

0

Чего хочется:
Выбираю файлы и каталоги для синхронизации, с помощью этой софтины отправляю на сервер (например по ssh или ftp), потом на другом компьютере запускаю её же, она скачивает и синхронизирует выбранные файлы.


Есть ли такая софтина, или нужно писать велосипед?

★★★★★

Ну, вообще есть dropbox, я с помощью него синхронизирую firefox scrapbook, но банальная зависимость и необходимость платить очень расстраивают, конечно. Тоже хотелось бы, чтобы можно было поставить на свой сервер, были кроссплатформенные клиенты с функциональностью dropbox.

RealSiberianMan
()
Ответ на: комментарий от devl547

>rsync
Т.е. велосипед?

git/hg/

История не нужна

xorik ★★★★★
() автор топика
Ответ на: комментарий от RealSiberianMan

>dropbox
Там же только один каталог можно синхронизировать? А мне нужно несколько файлов и каталогов из ~

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

как сразу и говорилось, rsync ) Под винду кстати тоже видел порты rsynca, так что кросплатформенное решение. Если я не ошибаюсь, он еще настраивает авторизацю по ключам без пароля, что делать не обязательно, просто при каждом запуске синхронизации он будет спрашивать пароль/пароль к ключу для авторизации.

silw ★★★★★
()
Ответ на: комментарий от KRoN73

Спасибо, посмотрю. Надеюсь его не нужно на сервер ставить (где ssh), у меня там рутовских прав нет?

xorik ★★★★★
() автор топика
Ответ на: комментарий от silw

Голый rcync не пойдет, нужно проверять, в какую сторону качать файлы. Или он умеет синхронизировать в обе стороны (чтоб на клиенте и сервере были последниие версии файла)?

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

>Надеюсь его не нужно на сервер ставить (где ssh)

Нужно :)

у меня там рутовских прав нет?


Так от юзера можно поставить же.

...

На самом деле тогда возможно решение - смонтировать удалённую машину по sshfs, отсинкать туда локально и потом повторить то же самое на второй машине.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Так от юзера можно поставить же.
собрать ручками со всеми зависимости из исходников?

На самом деле тогда возможно решение - смонтировать удалённую машину по sshfs, отсинкать туда локально и потом повторить то же самое на второй машине.

Вот это можно попробовать

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

rsync только в одну сторону работает, емнип.

кстати, а насколько sshfs секьюрно ? удобно - да, но вот секьюрно ли ?

silw ★★★★★
()

Кстати насчет rsync — можно создать файл с timestamp на сервере и клиентах, и и где число больше, оттуда и делать rsync...

xorik ★★★★★
() автор топика
Ответ на: комментарий от silw

>удобно - да, но вот секьюрно ли ?

Имеешь ввиду, что если забыл отмонтировать, можно нечаянно удаленные файлы прибить?

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

>собрать ручками со всеми зависимости из исходников?

Да хоть локально static-версию (без GUI) :) Он же мелкий в таком варианте...

KRoN73 ★★★★★
()
Ответ на: комментарий от silw

>кстати, а насколько sshfs секьюрно ?

Настолько же, насколько работа с любой FS :) Перехвата трафика можно особо не бояться, на то оно и SSH. А если кто-то локально полуит доступ к файлам - так какая разница, sshfs это или ext4? :)

KRoN73 ★★★★★
()

Всем спасибо

Попробую написать велосипед с rsync, потом попробую unison черзе sshfs

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

сейчас попробовал cкопировать с удаленной машины, ругнулся на отсутствие rsync, оказалось изкаропки в OpenBSD действительно не было rsync ) поставил rsync, без запуска демона, все прекрасно работает. Посмотрел, в убунте, калькуляте, арче rsync идет по дефолту.

silw ★★★★★
()
Ответ на: комментарий от silw

Я в курсе, на сервере дебиан без rsync-а. Придется через sshfs монтировать или по другому можно?

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

собрать самому rsync и экспортировать путь в PATH ?

silw ★★★★★
()
Ответ на: комментарий от xorik

rsync может работать просто через ssh, демона запускать не обязательно.

CyberTribe ★★
()
Ответ на: комментарий от xorik

Но если на другой стороне rsync-а нет, то работать, конечно, не будет.

CyberTribe ★★
()

А если на клиентских машинах поменяешь файлы, а с сервером оно (в перерыве между изменениями) не успеет синхронизироваться. Такой вариант возможен?

Nao ★★★★★
()
Ответ на: комментарий от Nao

>А если на клиентских машинах поменяешь файлы, а с сервером оно (в перерыве между изменениями) не успеет синхронизироваться.

Не понял, поподробнее можно?

xorik ★★★★★
() автор топика

Выкладываю свой велосипед:

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

Пример файла .sync:

.sync
.conkyrc
.gitconfig
.purple/
.tilda/

#!/bin/bash

# Каталоги для синхронизации
SERV_DIR="xorik@domain.ru:~/backup"
LOCAL_DIR="/home/xor"

# Временный файл для сравнения дат
TMP_FILE="/tmp/.sync"

# Команда rsync
RSYNC="rsync -aruv"

# Скопировать файл для сравнения дат
scp -q -p "$SERV_DIR/.sync" "$TMP_FILE"

if [ $TMP_FILE -nt ${LOCAL_DIR}/.sync ]
then
	# На сервере новее
	echo "Скачивание с сервера"
	$RSYNC --files-from $TMP_FILE $SERV_DIR $LOCAL_DIR
else
	# На клиенте новее
	echo "Отправка на сервер"
	# Обновляем дату
	touch "$LOCAL_DIR/.sync"
	$RSYNC --files-from ${LOCAL_DIR}/.sync $LOCAL_DIR $SERV_DIR
fi

TODO: сделать сжатие, удалять ненужные файлы

xorik ★★★★★
() автор топика
Ответ на: комментарий от Nao

возможен. Поэтому надо выставить частоту запуска исходя из реальной нобходимости/траффика синхронизации/нагрузки на систему.

silw ★★★★★
()
Ответ на: комментарий от xorik

сжатие может делать сам rsync, ровно как и удалять файлы как на источнике так и на удаленном хосте. man rsync :)

silw ★★★★★
()
Ответ на: комментарий от silw

Насчет удаления, не все так просто, вдруг он решит удалить весь ~ удалить, кроме файлов, перечисленных в .sync

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

Например есть машины A,B (клиенты) и C(сервер)
на всех трёх машинах одинаковое состояние файлов X
теперь на машине A я меняю файлы - у нас становится состояние XA и на машине B меняю - состояние XB
Между этими изменениями небыло синхронизации с сервером.

На лицо конфликт.

В случае с твоим скриптом, в зависимости от того, где первее запустится синхронизация, на всех трёх компах будет состояние XA или XB. Т.е. может быть потеря изменений.

Ещё будет очень плохо, если скрипты запустятся одновременно.

Nao ★★★★★
()
Ответ на: комментарий от Nao

Да, насчет этого я в курсе, НО: я не сижу одновременно в двух местах (дома и на работе), поэтому можно запускать синхронизацию 2 раза вручную: при включении компа и при выключении, тогда проблем быть не должно. Второй путь: делать синхронизацию почаще.

Да кстати: флаг -u у rsync для этого и добавил, чтоб более новые файлы не обновлялись

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

xorik> if [ $TMP_FILE -nt ${LOCAL_DIR}/.sync ]

Если TIMEZONE на сервере и клиенте настроены по-разному, то у тебя проблема. Храни дату синхронизации в файле как << date '+%s' >>

sdio ★★★★★
()
Ответ на: комментарий от sdio

>Если TIMEZONE на сервере и клиенте настроены по-разному, то у тебя проблема.
Спасибо, учту

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

если скрипты будут в кроне, то, вероятнее всего, с одинаковыми интервалами. Соответственно, если они пересекутся один раз, то будут пересекаться каждый раз и никакой лок не спасет :) Есть правда погрешность часов и т.д.

Но если делать лок, то надо добавлять sleep и повторную попытку.

silw ★★★★★
()
Ответ на: комментарий от silw

>Но если делать лок, то надо добавлять sleep и повторную попытку.

Конечно, так и собирался сделать :)

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

xorik> rsync -ar

Несущественно: опция -а включает в себя -r, т.е. -r можно удалить из указанной выше команды

sdio ★★★★★
()
Ответ на: комментарий от xorik

Помогите разобраться пожалуйста

Осваиваю работу с rsync, пытаюсь выполнить с указанием файла списка

rsync --files-from=/path/to/list.lst /home/username/backup

где list.lst содержит /path/to/file1 /path/to/file2 /path/to/dir1

почему-то вылетает ошибка rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]

Поиск не дал результатов, может кто знает в чем ошибка?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.