Я пытаюсь сделать резервную копию некоторых папок с помощью rsync, запущенного в режиме демона. Обычно клиент запускает эту команду:
rsync --delete -avz -R -e "ssh -i ${KEY}" ${SERVER}::${MODULE} {DST_DIR}
у сервера есть открытый ключ в его файле authorized_keys:
command="rsync --server --daemon --config /root/rsync.conf"
и вот файл rsync.conf, содержащий папки, для которых я хочу создать резервную копию:
uid=0
gid=0
read only = true
use chroot = true
[backup]
path = /root
path = /etc
Проблема здесь в том, что копируется содержимое этих папок, а не их абсолютный путь. Я хотел бы / etc / etc_content и / root / root_content в моем $ {DST_DIR}, и я получаю содержимое / etc (я полагаю, сначала синхронизируется / root, а затем / etc, которые удаляют / root-содержимое ... Ой).
Я почти уверен, что есть способ заставить rsync сохранять абсолютный путь. Я безуспешно пытался использовать параметр -R. Я также пробовал без использования chroot.
Как я могу пройти через это?
Большое спасибо
Вы правы с "-Р" возможность использовать относительные пути, но это работает немного иначе. В $ {МОДУЛЬ} экспортирует точно ту часть файловой системы сервера rsync, которая определена "дорожка" параметр.
У тебя должен быть только один "дорожка" параметр на "модуль" раздел определен. Это объясняет, почему вы можете видеть содержимое / root сначала и / etc позже, поскольку оно кажется перезаписанным, если указано несколько параметров пути.
Я бы попытался определить модуль для каталога, который я хочу сделать резервную копию
uid=0
gid=0
read only = true
use chroot = true
[root]
path = /root
[etc]
path = /etc
а затем вызовите rsync для всех этих модулей
for MODULE in root etc; do
rsync -avzR $SERVER::$MODULE $DST_DIR/$MODULE
done
Или я бы экспортировал более широкую часть файловой системы сервера с одним модульным разделом
uid=0
gid=0
read only = true
use chroot = true
[root]
path = /
И резервные копии необходимых каталогов
rsync -avzR $SERVER::$MODULE/root $SERVER::$MODULE/etc $DST_DIR
Оба способа сохранят исходную / абсолютную структуру каталогов, которую вы запрашивали.
Я нашел способ с опциями включения; мой файл rsync.conf теперь выглядит так:
uid=0
gid=0
read only = true
use chroot = true
[backup]
path = /
include /etc/*** /root/*** /usr/local/etc/***
exclude /***
Затем я могу получить папки с их абсолютным путем, но появляется другая проблема:
Проблема здесь в том, что синхронизация работает только для включенных каталогов непосредственно под / aka / etc / * и / root / * и не работает для / usr / local / etc / *
Та же проблема возникает, когда я пытаюсь использовать ключевое слово include from и заполнять эти папки в указанный файл included_from.
Я в отчаянии; Либо это невозможно выполнить с помощью rsync, либо мне не хватает чего-то очевидного? man объяснение rsync довольно жесткое. dsumsky, спасибо за ваш ответ, и я думаю, что все-таки должен принять ваше решение.