как копировать файлы при помощи rsync через ssh | 8host.com

Детальное описание ключей rsync

-v, --verbose               увеличение отладочной информации
-u, --update                пропускать обновление файлов, которые новее исходных
-r, --recursive             рекурсия в директориях
-o, --owner                 сохранить владельца (только под root)
-g, --group                 сохранить группу
-h, --human-readable        вывод цифр в читаемом виде (Кб, Мб, Гб)
-t, --times                 сохранить дату изменения
-p, --perms                 сохранить права доступа

--delete-after              удалить после. Если в основном месте был удален какой-то файл, или каталог, 
                            то после синхронизации в backup сервере, в каталоге он тоже будет удален
--password-file             Путь, где находится файл с паролем.

Обязательно включите ключ -v, –verbose, тогда в консоль вам будет выводиться вся информация о процессе. Если у вас настроено отсылка сообщений службой ssmtp, то вы сможете получать письма с информацией о том как отработал cron. И соответственно как прошла синхронизация.

1 . установка публичных ключей ssh

Для начала нужно сгенерировать открытые ключи SSH без пароля на первоначальном сервере:

ssh-keygen -f ~/.ssh/id_rsa -q -P “”cat ~/.ssh/id_rsa.pub

Это открытый SSH-ключ, который можно разместить на других хостах, чтоб получить доступ:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/FGg1NOgM hrDlbrDVStKn/b3Mu65//tuvY5SG9sR4vrINCSQF a YRTGU6Sn4ltKpyj3usHERvBndtFXoDxsYKRCtPfgm1BGTBpoSl2A7lrwnmVSg u11FOa1xSZ393aaBFDSeX8GlJf1SojWYIAbE25Xe3z5L232vZ5acC2PJkvKctzvUttJCP91gbNe5FSwDolE44diYbNYqEtvq2Jt8x45YzgFSVKf6ffnPwnUDwhtvc2f317TKx9l2Eq4aWqXTOMiPFA5ZRM/CF0IJCqeXG6s qVfRjB root@cloudads

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

Поместите этот ключ в файл ~/.ssh/authorized_keys:

Если папки SSH не существует, создайте ее вручную:

mkdir ~/.sshchmod 0700 ~/.sshtouch ~/.ssh/authorized_keyschmod 0644 ~/.ssh/authorized_keys

Generate Keypair

Generate a public and private key pair on the destination server, the server from where you are pulling your backup data. This is the method that we recommend, the push method has a number of security implications that need to be considered.

ssh-keygen

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Copy public key to the server that is the source of your data.

ssh-copy-id -i ~/.ssh/id_rsa.pub ip.of.data.source

or you can manually copy and paste the contents of /root/.ssh/id_rsa.pub that you just generated on the destination server to the /root/.ssh/authorized_keys file on the source server. This may come handy if you do not allow password authentication for SSH on your destination server.

Файлы Rsync

Rsync – очень полезная утилита, так как она, помимо всего прочего, позволяет пользователю рекурсивно копировать файлы по зашифрованному каналу с применением сжатия.

Скопируем файл, находящийся в /root/bigfile.txt  на первоначальном сервере (198.211.117.101), на сервер назначения (IP: 198.211.117.129) и также сохраним его в /root/bigfile.txt.

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

Setup rsync script

The example below sets up Rsync to pull data from a remote server. It synchronizes this data with the local folders that have been configured. Additionally a bandwidth limit has been set and a folder named “backup” on the source folder is ignored and thus not synchronized. Finally a backup log file is generated.

rsync -av --delete --bwlimit=50000 --exclude 'backup*/' --log-file=/home/rsync-backup-log-$(date  "%Y-%m-%d").log -e 'ssh -p 22' [email protected]:/source/folder/ /destination/folder/

Setup a cron job

navigate to the /etc/cron.d/ folder, create a file named backup-cron and paste the contents of the rsync script that we created earlier and with the cron schedule configured.

00 10,20 * * * root rsync -av --delete --bwlimit 50000 --exclude 'exlude/folder/of/choice*/' --log-file=/home/rsync-backup-log-$(date  "%Y-%m-%d").log -e 'ssh -p 22' [email protected]:/source/folder /destination/folder/

Commonly used rsync flags

-aarchive mode; equals -rlptgoD (no -H,-A,-X). Mandatory for backup usage. activates recursion into the folders and preserve all file’s metadata
-cskip based on checksum, not mod-time & size. More trustworthy, but slower. Omit this flag if you want faster backups, but files without changes in modified time or size won’t be detected for include in backup.
-houtput numbers in a human-readable format.
-vincrease verbosity for logging.
-n or –dry-runRsync provides a method for double-checking your arguments before executing an rsync command. The -v flag (for verbose) is also necessary to get the appropriate output: rsync -anv dir1/ dir2
-Rrelative will create the same folder structure on the server
-Pcombines the flags –progress and –partial. The first of these gives you a progress bar for the transfers and the second allows you to resume interrupted transfers
-zcompress file data during the transfer. Less data transmitted, but slower. Omit this flag when backup target is a local device or a machine in local network (or when you have a high bandwidth to a remote machine).
–progressshow progress per file during transfer. Only for interactive usage.
–timeoutset I/O timeout in seconds. If no data is transferred for the specified time, the backup will be aborted.
—deletedelete extraneous files from dest dirs. Mandatory for master-slave backup usage.
–link-desthardlink to files in specified directory when unchanged, to reduce storage usage by duplicated files between backups.
–log-filelog what we’re doing to the specified file. Example: --log-file=$HOME/public_html/rsynclogs/rsync-backup-log-$(date "%Y-%m-%d").log
–chmodaffect file and/or directory permissions.
–excludeexclude files matching pattern.
–exclude-fromsame as –exclude, but getting patterns from specified file.
–bwlimitimitss I/O bandwidth. You need to set bandwidth using KBytes per second. For example, limit I/O banwidth to 10000KB/s (9.7MB/s), enter: # rsync –delete –numeric-ids –relative –delete-excluded –bwlimit=10000

Used only for local backups

-Wignores rsync’s delta-transfer algorithm, so it always transfers whole files. When you have a high bandwidth to target (local filesystem or LAN), backup may be faster.

Used only for remote backups

–no-Wensures that rsync’s delta-transfer algorithm is used, so it never transfers whole files if they are present at target. Omit only when you have a high bandwidth to target, backup may be faster.
–partial-dirput a partially transferred file into specified directory, instead of using a hidden file in the original path of transferred file. Mandatory for allow partial transfers and avoid misleads with incomplete/corrupt files.

Used only for system backups

-A-A: preserve ACLs (implies -p).

Using rsync and ssh

Using Rsync and SSH

Keys, Validating, and Automation

This document covers using cron, ssh, and rsync to backup files over
a local network or the Internet. Part of my goal is to ensure no user
intervention is required when the computer is restarted (for passwords,
keys, or key managers).

First, I’ll define some variables. In my explanation, I will be synchronizing
files (copying only new or changed files) one way, and I will be starting
this process from the host I want to copy things to. In other words, I
will be syncing files from /remote/dir/ on remotehost, as
remoteuser, to /this/dir/ on thishost, as thisuser.

I need to make sure I have the directory and files I need to authorize
connections with this key

[3]

:

$ if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi
$ mv thishost-rsync-key.pub .ssh/
$ cd .ssh/
$ if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
$ cat thishost-rsync-key.pub >> authorized_keys

Now the key can be used to make connections to this host, but these
connections can be from anywhere (that the ssh daemon on

remotehost

allows connections from) and they can do anything (that

remoteuser

can do), and I don’t want that. I edit the ‘authorized_keys’ file
(with vi) and modify the line with ‘thishost-rsync-key.pub’ information
on it. I will only be adding a few things in front of what is
already there, changing the line (and what follows is just one line with
badly similated line wrapping) from this:

ssh-dss AAAAB3NzaC1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap fG8wjlaY/9t4u
A 2qx9JNorgdrWKhHSKHokFFlWRj qk3q lGHS hsXuvta44W0yD0y0sW62wrEVegz JVmntxeYc0nDz
5tVGfZe6ydlgomzj1bhfdpYe BAwop8L EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP
5IaCuYBhuTKQGa oyH3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh
4oyX/aXEf8 HZBrO5vQjDBCfTFQA 35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55
Kk2rAAABAE/bA402VuCsOLg9YS0NKxugT o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK
1/ZIvtl92DLlMhci5c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/ m6ZOLHN28mV
5KLUl7FTL2KZ583KrcWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ QtEa0V2IwUDWS097p3SlLvozw
46 ucWxwTJttCHLzUmNN7w1cIv0w/OHh5IGh wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp NIKr
Y aJz7myu4Unn9de4cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r xrg5pZ5
GjfBCRvHNo2DF4YW9MKdUQiv ILMY8OISduTeu32nyA7dwx7z5M8b DtasRAa1U03EfpvRQps6ovu79m
bt1OE8LS9ql8trx8qyIpYmJxmzIdBQ kzkY 9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn
75Cfzhv65hJkCjbiF7FZxosCRIuYbhEEKu2Z9Dgh ZbsZ 9FETZVzKBs4fySA6dIw6zmGINd KY6umMW
yJNej2Sia70fu3XLHj2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost

to this

[4]

:

from=”10.1.1.1″,command=”/home/remoteuser/cron/validate-rsync” ssh-dss AAAAB3Nza
C1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap fG8wjlaY/9t4uA 2qx9JNorgdrWKhH
SKHokFFlWRj qk3q lGHS hsXuvta44W0yD0y0sW62wrEVegz JVmntxeYc0nDz5tVGfZe6ydlgomzj1
bhfdpYe BAwop8L EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP5IaCuYBhuTKQGa oy
H3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh4oyX/aXEf8 HZBrO5
vQjDBCfTFQA 35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55Kk2rAAABAE/bA402V
uCsOLg9YS0NKxugT o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK1/ZIvtl92DLlMhci5
c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/ m6ZOLHN28mV5KLUl7FTL2KZ583Kr
cWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ QtEa0V2IwUDWS097p3SlLvozw46 ucWxwTJttCHLzU
mNN7w1cIv0w/OHh5IGh wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp NIKrY aJz7myu4Unn9de4
cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r xrg5pZ5GjfBCRvHNo2DF4YW9
MKdUQiv ILMY8OISduTeu32nyA7dwx7z5M8b DtasRAa1U03EfpvRQps6ovu79mbt1OE8LS9ql8trx8q
yIpYmJxmzIdBQ kzkY 9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn75Cfzhv65hJkCjbiF
7FZxosCRIuYbhEEKu2Z9Dgh ZbsZ 9FETZVzKBs4fySA6dIw6zmGINd KY6umMWyJNej2Sia70fu3XLH
j2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost

where “10.1.1.1” is the IP (version 4

[5]

)
address of

thishost

, and
“/home/remoteuser/cron/validate-rsync” (which is just one of a few options

[6]

, including customization

[7]

to enhance security)
is a script that looks something like this

:

If

thishost

has a variable address, or shares its address (via NAT or
something similar) with hosts you do not trust, omit the ‘from=”10.1.1.1″,’
part of the line (including the comma), but leave the ‘command’ portion.
This way, only the ‘rsync’ will be possible from connections using this
key. Make

certain

that the ‘validate-rsync’ script is executable
by

remoteuser

on

remotehost

and test it.

The ‘AllowUsers’, ‘AllowGroups’, ‘DenyUsers’, and ‘DenyGroups’ key words can be used to restrict SSH access to particular users and groups. They are documented in the man page for “sshd_config”, but I will mention that they all can use ‘*’ and ‘?’ as wildcards to allow and deny access to users and groups that match patterns. ‘AllowUsers’ and ‘DenyUsers’ can also restrict by host when the pattern is in USER@HOST form.

Troubleshooting

Now that I have the key with no password in place and configured, I need
to test it out before putting it in a cron job (which has its own small
set of baggage). I exit from the ssh session to

remotehost

and try

[10]

:

$ rsync -avz -e “ssh -i /home/thisuser/cron/thishost-rsync-key” remoteuser@remotehost:/remote/dir /this/dir/

If this doesn’t work, I will take off the “command” restriction on the key
and try again. If it asks for a password, I will check permissions on the
private key file (on

thishost

, should be 600), on ‘authorized_keys’
and (on

remotehost

, should be 600), on the ‘~/.ssh/’ directory
(on both hosts, should be 700), and on the home directory (‘~/’) itself
(on both hosts, should not be writeable by anyone but the user).
If some cryptic ‘rsync’ protocol error occurs mentioning the
‘validate-rsync’ script, I will make sure the permissions on
‘validate-rsync’ (on

remotehost

, may be 755 if every

remotehost

user is trusted) allow

remoteuser

to read and execute it.

If things still aren’t working out, some useful information may be
found in log files. Log files usually found in the

/var/log/

directory on most linux hosts, and in the

/var/log/secure

log file on Red Hat-ish linux hosts.
The most useful logfiles in this instance will be found on

remotehost

, but

localhost

may provide some
client side information in its logs

[11]

.
If you can’t get to the logs, or are just
impatient, you can tell the ‘ssh’ executable to provide some
logging with the ‘verbose’ commands: ‘-v’, ‘-vv’, ‘-vvv’. The
more v’s, the more verbose the output. One is in the command above,
but the one below should provide much more output:

$ rsync -avvvz -e “ssh -i /home/thisuser/cron/thishost-rsync-key” remoteuser@remotehost:/remote/dir /this/dir/

Hopefully, it will always just work flawlessly so I never
have to extend the troubleshooting information listed here

[12]

.

Alright! Except for the everyday “keeping up with patches” thing,
the insidious “hidden configuration flaws” part, and the unforgettable
“total failure of human logic” set of problems, my work here is done.
Enjoy!

Notes:

[3]

If you use a shell other than ‘bash’ (or other bourne compatible shell), like
‘csh’ or ‘tcsh’, the commands listed may not work. Before executing them,
start up a ‘bash’ (or ‘sh’, or ‘ksh’, or ‘zsh’) shell using the ‘bash’
(or ‘sh’, or ‘ksh’, or ‘zsh’) command. After completing the commands,
you will have to exit the ‘bash’ shell, and then exit the shell your
host spawns normally.

Автоматическая синхронизация папок

Автоматическая синхронизация папок выполняется штатным способом — планировщиком заданий (cron). Планировщиком удобнее выполнять скрипт, так будет упрощается управление конфигурацией синхронизации. Создадим скрипт:

vi rsync_to_cron.sh

Бэкап сервера при помощи rsync [rtzra’s hive]

C сервера SS копируем ключ:

$ ssh-copy-id -i /home/rsyncbackup/.ssh/id_rsa [email protected]
The authenticity of host 'MS (XXX.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is .......
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'MS,XXX.XXX.XXX.XXX' (RSA) to the list of known hosts.
[email protected]'s password: 
Now try logging into the machine, with "ssh '[email protected]'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
$

Пробуем подключиться:

$ ssh [email protected]
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

Uptime:  20:35:31 up 147 days, 16:29,  1 user,  load average: 0.12, 0.06, 0.08

0 packages can be updated.
0 updates are security updates.

$ 

Если не задает вопросов о пароле – все получилось и работает.

Если спрашивает пароль – проверяем настройки сервера MS, следующие директивы в файле /etc/ssh/sshd_config должны быть установлены так:

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeyFile %h/.ssh/authorized_keys

и проверить следующие директивы в файле /etc/ssh/ssh_config:

# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa

Возможности rsync

Ключевое преимущество утилиты — синхронизация структуры директорий целиком или файлов по-отдельности. Можно синхронизировать данные между узлами сети, сетевыми хранилищами, дисками и каталогами.

При первой синхронизации данные файлов копируются целиком. При повторной, Rsync проверяет наличие изменений в исходном файле и передает лишь измененные блоки и байты.

Rsync использует алгоритм сжатия данных Deflate c помощью модифицированной библиотеки zlib, поэтому пропускная способность каналов связи используется экономичнее в сравнении с утилитой SCP.

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

Заметки

  • rsync потребляет примерно 100 байт на каждый файл в списке, поэтому при передаче огромного числа файлов к памяти нужно относиться аккуратно;
  • Шаблон начинающийся с ‘/’ проверяется с начала строки, иначе с конца;
  • Для задания шаблона только для директорий нужно указать в конце ‘/’;
  • Если необходимо исключить все поддиректории в /dir, кроме /dir/best, в список исключений нужно поместить:
        /dir/best/
      - /dir/*

Использование rsync как сервер

Реализация Rsync-сервера построена следующим образом. Есть отдельный сервер куда будут складываться все бэкапы. С этого сервера запускается по крону команда rsync с параметрами, которая реализует коннект к удаленным машинам в сети. На всех машинах работает Rsync-служба, в конфиге которой прописано какие именно каталоги нужно синхронизировать.

Как установить, настроить и выполнить запуск rsync на centos 8

Установка Rsync на Centos 8 выполняется из репозитория операционной системы, стандартным пакетным менеджером dnf:

dnf -y install rsync rsync-daemon

Эта команда установит саму утилиту rsync (клиентскую часть) и демон rsync (серверную часть). Серверная часть нужна для приема входящих обращений на синхронизацию через rsync без использования SSH. Позже покажем как обратиться к ней с внешнего сервера.

Перед началом работы необходимо выполнить настройку. Конфигурация выполняется в файле /etc/rsyncd.conf:

vi /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[share]
path = /tmp/share/
hosts allow = localhost 192.168.56.1
hosts deny = *
list = true
uid = nonroot
gid = nonroot
read only = false
comment = Shared folder

В файле конфигурации указываются следующие переменные:

  • pid file — файл, в котором будет храниться номер процесса демона Rsync;
  • lock file — файл блокировки для защиты от повторного запуска Rsync;
  • log file — журнал сообщений, генерируемых демоном Rsync в процессе работы;
  • path — путь до каталога, для которого выполняется синхронизация или копирование;
  • hosts allow — хосты, которым явно разрешено подключаться к демону Rsync для передачи файлов;
  • hosts deny — хосты, которым явно запрещено подключаться к демону Rsync для передачи файлов (в примере выше со всех, кроме разрешенных);
  • list — флаг разрешения/запрета чтения каталога;
  • uid — пользователь, от имени которого будет выполняться синхронизация для конкретного ресурса;
  • gid — группа, от имени которой будет выполняться синхронизация для конкретного ресурса;
  • read only — флаг для защиты имеющихся данных от изменения или удаления;
  • comment — описание конфигурации.

Рекомендуем использовать для переменных uid и gid непривилегированные учетные записи.

Перед запуском утилиты, нужно также создать указанную в конфигурации директорию:

mkdir /tmp/share

На этом настройка Rsync в Linux завершена и можно запускать утилиту:

systemctl enable --now rsyncd

Теперь выполним настройки безопасности. Чтобы Rsync работал корректно, важно настроить SELinux и сетевой экран:

setsebool -P rsync_full_access on
firewall-cmd --add-service=rsyncd --permanent
firewall-cmd --reload

Проверим статус сервиса rsyncd:

Копирование и синхронизация файлов с rsync (локально и удаленно)

При локальном режиме работы достаточно задать каталог/файл-источник и каталог/файл-приемник:

rsync -avzhHl /path/of/source/folder /path/to/destination/folder

Если копирование нужно выполнить с удаленным узлом, добавляется имя пользователя и IP-адрес или имя узла:

rsync -avzhHl /path/of/source/folder [email protected]:/path/to/destination/folder

Для корректной работы с удаленным узлами необходимо настроить доступ по ключам. Rsync этот метода подключения также поддерживает. Об использовании ключей для подключения к серверу мы рассказывали в предыдущей статье.

Настройка rsync – скрипта, на backup – сервере

На Нашем BackUp – сервере создаем директории, куда будут складываться все наши резервные копии.

Настройка rsync – службы, на удаленных серверах

Правим конфиг Rsync-сервера. Где искать в разных дистрибутивах:

FreeBSD
/usr/local/etc/rsyncd.conf

Gentoo
/etc/rsyncd.conf

HP-UX 11.xx
/etc/rsyncd.conf

rsyncd.conf:

Ограничение максимального размера и скорости передачи

Rsync также имеет встроенную возможность ограничения максимального размера синхронизируемого файла. Для этого нужно использовать опцию —max-size:

rsync -avzhHl --max-size=’100M’ /path/of/source/folder [email protected]:/path/to/destination/folder

Для ограничения скорости передачи предназначена опция —bwlimit (значение указывается в Кбит/с):

rsync -avzhHl --bwlimit=’100’ /path/of/source/folder [email protected]:/path/to/destination/folder

Опции include и exclude

Специальные опции —include и —exclude позволяют включать или исключать из синхронизации файлы с определенными именами:

rsync -avzhHl --include='.txt' --exclude='' /path/of/source/folder [email protected]:/path/to/destination/folder

Есть возможность перечислить включаемые или исключаемые имена в файле, для этого используются опции —include-from и —exclude-from соответственно:

rsync -avzhHl --include-from='/root/rsync_include.conf' --exclude='/root/rsync_exclude.conf' /path/of/source/folder [email protected]:/path/to/destination/folder

Преимущества и недостатки

Преимущества такого вида резервной синхронизации я вижу в полной автоматизации процесса. Так же письменное уведомление, о том как проходит процесс. (При условии что настроена служба ssmtp). Так же к преимужествам можно отнести что мы имеем полную рабочую версию каталогов, с правами доступа.

Это дает нам преимущества быстрого переключения на резервный сервер служб, которые постоянно работают. К примеру svn-репозиторий, web-хостинг. Мы не тратим время на разархивирование, копирование и прочее. Переключаем на шлюзе порты, и работаем над восстановлением упавшего сервака.

К недостаткам можно отнести какую-то несовместимость rsync с svn-базами. Кто знает подробности, можете описать.

Просмотр прогресса синхронизации

Для просмотра прогресса синхронизации, вместе с запуском утилиты необходимо использовать ключ —progress:

rsync -avzhHl --progress /path/of/source/folder [email protected]:/path/to/destination/folder

Простое использование rsync

  rsync -vaHx --progress --numeric-ids --delete 
    --exclude-from=asylum_backup.excludes --delete-excluded 
    root@asylum:/home/asylum/ /backup/rsync/asylum/_home_asylum.demo/
  • Опции
    • -v, –verbose – говорливость, выводит имена обрабатываемых файлов;
    • -a, –archive – работа в режиме архивирования, сохраняются права доступа и информация о владельцах;
    • -H, –hard-links – сохранять жесткие ссылки, оставляя их на другом конце бэкапа;
    • -x, –one-file-system – не выходить за пределы текущей точки монтирования;
    • –progress – показывать сколько процентов осталось до завершения и скорость передачи;
    • –numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удаленной стороне номера как есть;
    • –delete – удалять из бэкапа файлы, которых уже нет на стороне источника;
    • –exclude-from=asylum_backup.excludes – список файлов исключенных из бэкапа, допускается использование масок, напирмер “htdocs/*/*.jpg”;
    • –delete-excluded – удалять части которые уже есть на стороне бэкапа, но появились в списке исключения;
    • root@ – под каким пользоателем осущестляются подключение;
    • asylum – имя хоста к которому производится подключение;
    • /home/asylum/ – директория источник, которую нужно бэкапить;
    • /backup/rsync/asylum/_home_asylum.demo/ – куда сохранять бэкап;
  • Для определения транспорта нужно задать переменную
RSYNC_RSH "ssh -c arcfour -o Compression=no -x"
  • ssh – транспорт ssh (можно задать через “-e ssh”);
  • -c arcfour – тип шифрования;
  • -o Compression=no – отключить сжатие средствами ssh, rsync сам сжимает данные;
  • -x – отключаем X туннелинг;
  • Другие полезные опции:
    • -n, –dry-run – режим тестирования, реально никаких действий по копированию не производится, только эмуляция;
    • -W, –whole-file – передает файлы целиком, а не блоками, как задумано в оригинальном алгоритме rsync;
    • -c, –checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру;
    • -S, –sparse – допускает оптимизацию дискового пространства через создание “дырявых” файлов;
    • –delete отличается от –delete-after тем, что удаление производится вначале, а не на завершающей стадии процесса бэкапа. –delete-after работает быстрее, так как не требует лишней стадии обхода списка файлов, но требует использования опции –force для обработки таких ситуаций как удаление файла и появление диретории с тем же именем;
    • -T, –temp-dir=DIR – сохранять временные файлы в отдельной диретории, а не в текущей;
    • –compare-dest=DIR – сохранять новые и измененные файлы в отдельной директории, не трогая на время коприрования основную директорию назначения, в конце – разом, путем переименования, обновить содержимое бэкапа;
    • –link-dest=DIR – использовать жесткие ссылки на файлы в DIR, например, для создания подобия снапшотов;
    • –bwlimit – ограничение пропускной способности, чтобы не забивать канал;
    • –ignore-errors – продолжать копирование и удаление после появления ошибок;
    • –max-delete – ограничение максимально числа удаляемых за один раз файлов и каталогов;
    • -z, –compress – включить сжатие передаваемых данных;
    • -A, –acls – сохранять не только права доступа, но и ACL;
    • -D – сохранять файлы устройств
    • –files-from=FILE – задать список директорий и файлов для бэкапа в файле;
    • –times – синхронизировать время модификации файлов;
    • –backup – старые измененные или удаленные файлы не теряются а переименовываются или перемещаются в заданную чере –backup-dir=DIR директорию. Пример инкрементального бэкапа:
      rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file 
        --backup --backup-dir=`date  %Y-%m-%d` -av

Синхронизация по ssh и rsync-демон

По умолчанию синхронизация выполняется по протоколу SSH (cм. примеры выше), дополнительные параметры для этого указывать не требуется. Чтобы обращаться напрямую к Rsync, минуя SSH, на сервере-приемнике должен быть запущен демон Rsync. В предыдущем разделе мы как раз уже это сделали, поэтому можем обратиться с удаленного сервера:

rsync -avz /tmp/share rsync://192.168.56.101:/tmp/share

Удаление при синхронизации

В процессе синхронизации можно удалять файлы на сервере-приемнике, которых уже нет на сервере-источнике. Для этого используется опция —delete:

rsync -avzhHl --delete /path/of/source/folder [email protected]:/path/to/destination/folder

Заключение

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

Used only for log sending

-rrecurse into directories
–remove-source-filessender removes synchronized files (non-dir).
Похожее:  Лекция №20 — YZTM.RU

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *