Rsync: копирование и синхронизация файлов с удаленным сервером
Rsync: копирование и синхронизация файлов с удаленным сервером
21.04.2020
VyacheslavK
CentOS, Linux
комментария 4
Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.
Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).
В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.
Опции Rsync
Давайте кратко рассмотрим опции rsync. В данной статье перечислены не все опции. Для более подробной информации смотрите мануал данной утилиты при помощи команды man rsync :
- -v — Выводить информацию о копировании файла;
- -q — Минимум информации;
- -c — Копировать только измененные файлы;
- -a — Сохранять все атрибуты оригинальных файлов;
- -R — Относительные имена пути;
- -b — Создание резервной копии;
- -u — Не перезаписывать файлы, которые являются более новыми на приемном конце;
- -l — Копировать символьные ссылки;
- -L — Копировать содержимое ссылок;
- -H — Копировать жесткие ссылки;
- -p — Сохранять права для файлов;
- —partial — сохранять частично переданные файлы;
- -g — Сохранять группу;
- —no-group — Не сохранять группу;
- -o — Сохранить владельца;
- —no-owner — Не сохранять владельца;
- -t — Сохранять время модификации;
- -x — Работать только в этой файловой системе;
- -e — Использовать другой транспорт, например, ssh;
- -z — Сжимать файлы перед передачей;
- —delete — Удалять файлы которых нет в источнике;
- —exclude — Исключить файлы по шаблону;
- -r — Перебирать директории рекурсивно;
- —no-recursive — Отключить рекурсию;
- —no-links — Отключить копирование символических ссылок;
- -P — Выводить прогресс копирования файла;
- —stat — Показать статистику передачи;
- —version — Версия утилиты;
- —inplace — Обновление файлов назначения налету;
- —existing — Пропустить создание файлов (включая каталоги), которые еще не существуют в месте назначения;
- —ignore-existing — Пропустить обновление файлов, которые существуют в месте назначения.
- —temp-dir — Указываем директорию для временных файлов
Использование Rsync
Каждая команда rsync начинается с rsync , за которой следует опция, в которой вы можете указать различные параметры. Rsync предоставляет ряд опций, которые дают вам возможность управлять спецификациями передачи. Затем есть источник и пункт назначения, который зависит от того, являются ли они удаленным или локальным компьютером.
Основной синтаксис rsync:
Некоторые из общих опций, используемых с командами rsync:
- -v : verbose
- -a : режим архивирования, он позволяет рекурсивно копировать файлы и сохраняет символические ссылки, права доступа к файлам, владение пользователями и группами и временные метки
- -z : сжимает данные
- -h : удобочитаемо, выводит числа в удобочитаемом формате
- –max-size =SIZE, передача файлов с указанным минимальным SIZE
- –min-size =SIZE, передача файлов с указанным максимальным SIZE
Теперь мы объясним некоторые примеры использования rsync с этими параметрами.
Исключить несколько файлов или каталогов на основе шаблона
С rsync вы также можете исключить файлы и каталоги на основе шаблона, соответствующего имени файла или каталога.
Например, чтобы исключить все .jpg файлы, которые вы запускаете:
Немного сложнее исключить все другие файлы и каталоги, кроме тех, которые соответствуют определенному шаблону. Допустим, вы хотите исключить все другие файлы и каталоги, кроме файлов, заканчивающихся на .jpg .
Одним из вариантов является использование следующей команды:
При использовании нескольких параметров включения / исключения применяется первое правило соответствия.
- —include=’*.jpg’ — Сначала мы включаем все .jpg файлы.
- —include=’*/’ — Затем мы включаем все каталоги в src_directory каталоге. Без этого rsync будет копировать только *.jpg файлы в каталоге верхнего уровня.
- -m — Удаляет пустые каталоги.
Другой вариант — перенаправить вывод find команды в rsync:
- -printf %P\0\n — удалит src_directory/ из пути к файлу.
- —files-from=- — означает включать только файлы из стандартного ввода (файлы, переданные из команды find).
Чтобы исключить конкретный каталог (включая его подкаталоги) из источника при синхронизации исходного и целевого каталогов, используйте следующий синтаксис:
Например, чтобы исключить каталог с именем sampledir при синхронизации src_dir и dest_dir, команда будет выглядеть так:
Если вы хотите исключить содержимое каталога, но не сам каталог, используйте имя каталога, за которым следует / *:
Приведенная выше команда скопирует только каталог в место назначения, но не его содержимое.
Обзор полезных примеров команд Rsync SSH для Linux
Мануал
Rsync также известен как remote sync– это инструмент командной строки, используемый для копирования и синхронизации файлов и каталогов как удаленно, так и локально в системах Linux/Unix.
Мы создали список с различными примерами команд Rsync, включающий примеры использования резервного копирования Rsync и другие советы, которые помогут вам извлечь максимум пользы из этого замечательного инструмента.
Зачем вообще использовать команды Rsync?
Думал, что вы спросите, поэтому вот почему:
- Эффективно копирует и синхронизирует файлы на удаленную систему или с нее.
- Поддерживает копирование ссылок, устройств, владельцев, групп и разрешений.
- Он намного быстрее, чем Secure Copy (scp), поскольку использует протокол удаленного обновления, позволяющий передавать данные между двумя наборами файлов. В первый раз он копирует все содержимое файла или каталога из источника в пункт назначения, а в следующий раз копирует только измененные блоки и байты в пункт назначения.
- Он потребляет меньше полосы пропускания, так как использует метод сжатия и декомпрессии при отправке и получении данных на обоих концах.
17 различных команд Rsync
Общие аргументы Rsync
- -r: копирует данные рекурсивно.
- -v: для вывода подробной информации.
- -a: архивный режим, который позволяет копировать файлы рекурсивно. Более того, он также сохраняет символические ссылки, разрешения на файлы, пользователя и группу.
- -z: сжатие данных.
- -h: человекочитаемый формат, выводит числа в формате, читаемом человеком.
Установка Rsync на Linux
Установите его с помощью следующей команды
Копирование и синхронизация файлов или каталога (локально на удаленный сайт)
Это действие синхронизирует директории с локальной машины на удаленную, например, на локальном компьютере есть папка “rpmpkgs”, которая содержит некоторые пакеты RPM, и вы хотите, чтобы содержимое локальных директорий было отправлено на удаленный сервер, используйте следующую команду:
Копирование или синхронизация удаленного каталога с локальным десктопом
Этот пример поможет синхронизировать удаленный каталог с локальным.
В примере, показанном ниже каталог /home/shaheer/rpmpkgs удаленного сервера перенесен в локальную систему в каталог /tmp/myrpms.
Этот пример позволит синхронизировать один файл на локальной машине из одного места в другое.
В примере файл с именем backup.tar нужно скопировать или синхронизировать в папку /tmp/backups/.
Следующая команда должна перенести или синхронизировать все файлы из одного каталога в другой каталог на той же машине.
В примере /root/rpmpkgs содержит некоторые файлы пакетов rpm, и вы хотите скопировать этот каталог в папку /tmp/backups/.
Отображение прогресса передачи данных Rsync
Мы используем опцию -progress для отображения прогресса при передаче данных с одной машины на другую.
Она также отображает файлы и время, оставшееся до завершения передачи.
Rsync через SSH
С помощью этого протокола мы можем использовать SSH (Secure shell) для передачи данных, используя этот протокол при сетевом взаимодействии, мы можем быть уверены, что данные передаются в защищенном соединении с шифрованием, и никто не сможет прочитать данные при их передаче.
Также при использовании этого протокола нам необходимо предоставить пароль пользователя/root пользователя для выполнения определенной задачи, поэтому при использовании этой опции логины передаются в зашифрованном виде, так что пароль остается в безопасности.
Резервное копирование файлов с облачного сервера на локально размещенный сервер через SSH
Чтобы указать протокол, необходимо указать опцию -e с именем протокола, который вы хотите использовать.
В примере мы будем использовать ssh с опцией -e и выполнять передачу данных.
Копирование файла с локального сервера на удаленный сервер с помощью SSH
Rsync -delete
Если какой-либо файл или каталог не существует в источнике, но существует в месте назначения, то вы можете захотеть удалить этот существующий файл или каталог во время синхронизации.
Опция -delete может быть использована для удаления файла, которого нет в каталоге источника.
Источник и цель синхронизированы, теперь создаем новые файлы test.txt на целевом сервере.
Установка максимального размера файлов для первой передачи
Пользователи могут указать максимальный размер файлов для передачи или синхронизации.
Это можно сделать с помощью параметра -max-size.
В примере максимальный размер составляет 200k, поэтому команда будет передавать только те файлы, которые равны или меньше этого размера.
Выполним пробный запуск с помощью Sync
Если вы новичок и не знаете, что будет делать ваша команда, можно использовать “драйран”.
Это может испортить все в папке назначения, а отмена может оказаться довольно утомительным занятием.
Использование этой опции не вносит никаких изменений, а только выполняет пробный запуск команды и показывает вывод команды, если вывод показывает тот же результат, который вы хотите сделать, то вы можете удалить опцию -dry-run из команды и запустить боевую команду в терминале.
Заключение
Remote sync – это отличный инструмент, который облегчил жизнь многим системным администраторам для создания резервных копий и перемещения данных между серверами.
Именно поэтому я поделился своими знаниями о практических примерах команд Rsync, которые вы можете использовать для резервного копирования, использования SSH, перемещения и синхронизации каталогов.
Примеры синхронизации Rsync
Дальше давайте рассмотрим использование rsync, примеры синхронизации.
1. Копирование и синхронизация файлов на локальном компьютере
Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование rsync для синхронизации файла на локальном компьютере:
rsync -zvh file /tmp/backups/
Указав опцию —progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:
rsync -zvh —progress file /tmp/backups/
2. Синхронизация папок на локальной машине
Синхронизация папок rsync выполняется так же просто, как и файлов:
rsync -zvh /home/user/documents /tmp/backups/
Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:
rsync -azvh /home/user/documents /tmp/backups/
3. Синхронизация с удаленным сервером
Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:
rsync -avz /home/sergiy/tmp/ root@192.168.56.102:/home/
По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:
rsync -avz /home/sergiy/tmp/ rsync://192.168.56.102:/share
Точно также можно синхронизировать файлы с rsync из удаленного сервера:
rsync -avz root@192.168.56.102:/home/ /home/sergiy/tmp/
Адрес удаленного сервера записывается в таком формате:
имя_пользователя@ адрес_машины /папка/на/удаленной_машине
Синхронизация папок rsync будет выполняться на стандартном порту.
4. Синхронизация файлов по SSH
Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.
Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так:
rsync -avzhe ssh root@192.168.56.102:/root/install.log /tmp/
Если вы используете другой порт для ssh, то здесь его можно указать:
rsync -avzhe «ssh -p 22» root@192.168.56.102:/root/install.log /tmp/
А теперь передадим данные на тот же сервер:
rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/
5. Просмотр прогресса при синхронизации
Для просмотра прогресса копирования файла с одной машины на другую используется опция progress:
rsync -avzhe ssh —progress /home/user/documents root@192.168.56.102:/root/documents
6. Синхронизация не всех файлов в rsync
Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями.
Например, скопируем все файлы, начинающиеся на букву R:
rsync -avze ssh —include ‘R*’ —exclude ‘*’ root@192.168.56.102:/root/documents/ /root/documents
7. Удаление при синхронизации
Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция —delete.
rsync -avz —delete root@192.168.56.102:/documents/ /tmp/documents/
Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.
8. Максимальный размер файлов
Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:
rsync -avzhe ssh —max-size=’200k’ /user/documents/ root@192.168.56.102:/root/documents
9. Удаление исходных файлов
Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:
rsync —remove-source-files -zvh backup.tar /tmp/backups/
Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.
10. Режим симуляции rsync
Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:
rsync —dry-run —remove-source-files -zvh backup.tar /tmp/backups/
11. Ограничить скорость передачи
Вы можете ограничить использование пропускной способности сети с помощью опции —bwlimit:
rsync —bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.56.102:/root/documents/
Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:
rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
12. Автоматическая синхронизация папок rsync
Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.
ssh-keygen -t rsa
Загружаем ключ на сервер к с которым собираемся синхронизироваться:
ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250
Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:
00 05 * * * rsync -azvre ssh /home/user/Downloads/ 192.168.56.102:/share
rsync синхронизация каталогов будет выполняться каждый день в пять утра. Подробнее о настройке расписаний Cron можно почитать в отдельной статье.