Назад | Перейти на главную страницу

Для чего нужен параметр rsync «-logDtprze.iLsf»?

Я нашел статью в Интернете, в которой даются инструкции по резервному копированию выделенного сервера с помощью rsync.

На одном из этапов этой статьи я должен создать пользователя с именем «rsync» и добавить ему привилегии sudo. Все идет хорошо, но параметры visudo для пользователя "rsync" довольно сложно понять. Некоторые параметры команды "/ usr / bin / rsync" практически не имеют документации в Интернете.

Ниже приводится строка visudo, о которой я говорю:

rsync ALL=(ALL) NOPASSWD: /usr/bin/rsync --server --sender -logDtprze.iLsf --numeric-ids . /

Начнем с того, что я как бы понимаю свойства "--server --sender". Что меня действительно беспокоит, так это опция "-logDtprze.iLsf".

У меня есть сервер CentOS, и эта опция недоступна в документации по rsync, когда я запускаю команду "man rsync". Собственно, каждый раз, когда я пытаюсь использовать эту опцию в visudo, ничего не работает.

В конце концов я обнаружил расплывчатую ссылку на "-logDtprze.iLsf" как на новую функцию rsync в Debian. Я не уверен в этом.

Я просто хотел знать, что делает этот параметр, и можно ли его игнорировать в настройках резервного копирования.

Я также хотел понять назначение точки и косой черты в конце строки ". /"

РЕДАКТИРОВАТЬ: Спасибо, бодгит! Я чувствую себя идиотом! :)

Это короткие варианты -l, -o, -g, -Dи т. д., которые вместо того, чтобы перечислять их по отдельности, могут быть свернуты, что является стандартным поведением для большинства инструментов Unix, т.е. rm -rf такой же как rm -r -f.

Я провел небольшое исследование и нашел значение каждой буквы в последовательности параметров "-logDtprze.iLsf"

-l, --links                 copy symlinks as symlinks
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
-D, --devices               transfer character and block device files
-t, --times                 preserve modification times
-p, --perms                 preserve permissions
-r, --recursive             copy directories recursively
-z, --compress              compresses data as it is sent to the destination
-e, --rsh=COMMAND           allows to choose an alternative remote shell program
.
-i, --itemize-changes       show list of changes being made to each file
-L, --copy-links            transform symlink into referent file/dir
-s, --protect-args          no space-splitting; wildcard chars only
-f, --filter=RULE           allows to add rules to exclude certain files

Единственное, чего я не смог понять, так это значения периода "". в середине параметров.

вы наткнулись на довольно сложное взаимодействие между несколькими частями сеанса RSYNC через SSH.

Хотя другие ответы здесь дают некоторое представление о параметрах rsync, эти параметры могут не обязательно применяться к вашей конкретной ситуации, которая может быть уникальной в зависимости от параметров, которые вы отправляете в rsync.

Итак, нет, игнорировать эти параметры нельзя, поскольку в вашем случае они могут сильно отличаться.

Настоящий ключ к этому явно странному набору параметров rsync - это захватить фактическую отправляемую команду в вашем конкретном случае.

Есть по крайней мере несколько способов сделать это. Один из способов - выполнить rsync-резервное копирование файла, достаточно большого, чтобы передача, скажем, 20 секунд, чтобы дать возможность проверить запущенные процессы на удаленном компьютере во время передачи, например, с помощью такой команды, как:

rsync -a -e "ssh -i /Users/myuser/keys/id_test -l test" 192.168.1.101:/home/test/100m.txt /Users/myuser/100m.txt

где /home/test/100m.txt - достаточно большой файл, чтобы у него было время для просмотра процесса во время его передачи.

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

ps auxww|grep rsync

пока файл передается. В моем случае выполнение вышеуказанного дало:

# ps auxww|grep rsync
test     3860  7.5  0.0  13520  2780 ?        Ss   18:49   0:00 rsync --server --sender -logDtpr . /home/test/100m.txt
root      3862  0.0  0.0  12784   968 pts/0    S+   18:49   0:00 grep rsync

это затем дает представление о том, откуда взялись все эти параметры команды rsync, в моем случае "logDtpr" от выполнения "rsync -a", YMMV.

Другой способ найти отправляемую команду - использовать переменную среды SSH_ORIGINAL_COMMAND из man SSH:

SSH_ORIGINAL_COMMAND  This variable contains the original command line if a forced command is executed.  It can be used to extract the original arguments.

затем вы можете использовать параметры authorized_keys (см. запись AUTHORIZED_KEYS FILE FORMAT в man SSHD), чтобы добавить принудительную команду «command = myscript» к ключу, который используется для входа на удаленный сервер, и сделать эту команду сценарием оболочки «myscript» в котором есть пара строк вроде:

echo "$SSH_ORIGINAL_COMMAND" >> /fullpathto/mysshlog
exec $SSH_ORIGINAL_COMMAND   

тогда, когда вы запустите свой rsync, фактическая используемая команда окажется в файле журнала "mysshlog"

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