- Rsync — копирование и синхронизация файлов с удаленным сервером
- Установка и основные параметр rsync
- Локальное копирование/синхронизация каталогов
- Настройка синхронизации с удаленным сервером
- Другие примеры использования rsync
- Резервное копирование в Linux с помощью rsync
- Быстрая настройка резервного копирования под Linux и не только (UrBackup)
- Найти и скопировать один самый новый файл
Rsync — копирование и синхронизация файлов с удаленным сервером
Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.
Чтобы исключить потерю информации при отправке файлов, rsync сначала копирует всю передаваемую информацию во временный файл. Другая важная особенность rsync – файлы передаются в один поток, не создается отдельный поток для каждого файла (что вызывает проблему при передаче большого количества маленьких файлов в других утилитах).
В данной статье мы рассмотрим варианты использования rsync для синхронизации и копирования каталогов и файлов, и приведем примеры его расширенных настроек.
Установка и основные параметр rsync
Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):
rsync уже установлен в системе
Синтаксис команды выглядит следующим образом:
В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.
- -v – вывести подробную информацию о процессе
- -c – проверка контрольных сумм файлов
- -q – минимальная информация
- -a – режим архивирования
- -R – относительные пути
- -y – не перезаписывать более новые файлы
- -b – создание резервной копии
- -l – копировать симлинки
- -L – копировать содержимое ссылок
- -H – копировать жесткие ссылки
- -g – сохранять группу
- -p – сохранять права для файлов
- -t – сохранять время модификаций
- -x – работать только в этой ФС
- -e – использовать другой транспортный протокол (например, ssh)
- -z – сжимать файлы перед передачей
- -delete – удалять файлы которых нет в источнике
- -exclude – исключить файлы
- -recursive – перебирать директории рекурсивно
- -no-recursive – отключить рекурсию
- -progress – выводить прогресс передачи файлов
- -stat – показать статистику передачи
- -max-size – максимальный размер файла для передачи
- -bwlimit — ограничение скорости для передачи файлов
- -version – версия утилиты
Локальное копирование/синхронизация каталогов
Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:
В этом случае файл test.txt был просто скопирован в директорию /root/temp/
Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:
Мы можем использовать rsync для синхронизации содержимого локальных каталогов. Например, rsync удобно использовать, когда вам требуется скопировать файлы из рабочей директории, на хранилище, которое примонтировано к какому-то разделу.
Мы скопировали директорию /root/.config в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.
Чтобы сохранить все атрибуты файлов при копировании, например, дату изменения и дату создания файлов, добавьте ключ -a:
Если вы хотите скопировать только измененные файлы, добавьте опцию -c:
Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.
Настройка синхронизации с удаленным сервером
Чаще всего копирование/синхронизация rsync с удаленным сервером используется для резервного копирования или синхронизации конфигурации нод кластера. Можно выполнять автоматическую синхронизацию данных с рабочего сервера на резервный, и в случае проблем на продуктивном севере быстро все перевести на резервный. Это довольно удобный и простой в настройке вариант.
В современных версиях rsync протокол SSH используется для передачи файлов по-умолчанию. Однако вы можете использовать и демон rsyncd. Для этого клиент rsync должен быть установлен на удаленном компьютере, и его демон добавлен в автозагрузку:
Конфигурационный файл rsync — /etc/rsyncd.conf. В этом файле можно настроить параметры rsync и настройки для синхронизации для разных ресурсов.
Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:
Чтобы скопировать файл на удаленный сервер, используйте команду:
После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.
Скопируем директорию с локального сервера на удаленный:
То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.
Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:
Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):
Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:
Другие примеры использования rsync
Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):
При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:
Если у вас на сервере нужна односторонняя синхронизация и после переноса файлов на удаленный сервер нужно удалить файлы с исходного сервера, воспользуйтесь опцией -remove-source-files:
После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике.
Так же очень удобный опции —include и —exclude, с помощью этих опций, можно делать исключения по копированию директорий или файлов:
В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.
Добавлением опции —include мы смогли задать фильтр по файлам, скопировали только файлы с расширением php.
Резервное копирование в Linux с помощью rsync
В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.
Например, можно добавить в cron команду:
01 30 * * * rsync -zvra root@192.168.1.1:/backup/ /backup
В результате каждый день в 1:30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.
Стоит учесть, что для выполнения команды rsync на удаленном сервер через cron, желательно настроить авторизацию серверов по SSH ключу. Примеры скриптов для бэкапа, мы приводили в статье «Скрипты для бэкапа файлов из Linux в облако», там как раз используется rsync для копирования файлов в подключенные облачные хранилища.
Источник
Быстрая настройка резервного копирования под Linux и не только (UrBackup)
Примерно год назад у меня возникла «острая» необходимость перевести систему резервного копирования данных в корпоративной сети на бесплатные рельсы. До этого использовался платный продукт от Symantec, по нему, конечно, много нареканий, но он работал, хоть и не всегда справлялся. Как обычно, все надо было сделать «вчера», и я приступил к поиску вариантов.
Для начала начал искать решение для резервного копирования файлов, очевидным решением было простая настройка скриптов на Linux по cron, но это не очень удобное и надежное решение, если серверов более одного(а у меня их около 50-ти) и структура достаточно динамична. Тем более если инфраструктура смешанная, Linux + Windows. Хотелось что-нибудь простое в дальнейшем обслуживании и извлечении самих копий, например, переложить восстановление пользовательских файлов на группу поддержки. Порывшись пару часов в интернете, я наткнулся на интересный проект UrBackup, он удовлетворял всем моим условиям.
Как операционную систему я выбрал CentOS 6 в конфигурации minimal, взять можно тут. Подробно на установке и первичной настройке останавливаться не будут, т.к. манулов по этой процедуре уже достаточно на Хабре. Перейдем к установке виновника топика UrBackup.
Предыдущие версии UrBackup приходилось собирать из исходников, но слава разработчикам, для последних версий появились репозитории для большинства популярных систем. Хотя собрать из исходников проблем не составляло, репозиторий сильно упрощает жизнь, особенно при обновлениях.
Тут мы подключаем репозиторий и устанавливаем собственно сервер. Далее, чтобы мы могли подключится к серверу из вне, нам необходимо поправить iptables:
Так же для серверов внутри сети отключаем selinux:
Отключаем selinux без перезагрузки:
Устанавливаем сервис в автозагрузку и запускаем:
Готово. Можно подключаться и настраивать.
Заходим по адресу. При желании выбираем язык и идем в настройки:
Тут для первичной настройки нам необходимо указать только путь для хранения бекапов. Не забываем нажать кнопку «сохранить» и мы можем переходить к настройке клиентов.
Для начала нам необходимо установить клиент на сервер, который мы хотим копировать. Клиент для Windows систем можно скачать с сайта разработчиков, но так как мы в данный момент рассматриваем linux-системы, рассмотрим установку на тот же CentOS 6:
Добавляем правила в iptables:
Не забываем отключить selinux, если, конечно, в нем нет необходимости. И можно добавлять клиента на сервер. Возвращаемся на сервер. Идем в раздел «статус»:
Вбиваем в поле «Имя/IP» IP-адрес сервера, с которого мы хотим бекапить данные, и нажимаем добавить. Ждем пару минут, пока клиент появится в списке.
Для клиента с GUI этого достаточно, настройки папок для копирования можно сделать прямо на клиенте, резервное копирование начнется по расписанию, но у нас минимальный Linux и мы ставили клиент без GUI, его, как впрочем и полноценного клиента, можно настраивать прямо с сервера.
Идем в настройки:
Выбираем наш сервер из списка и настраиваем «каталоги по умолчанию для бекапа».
Готово. Сервер настроен и работает. Во время работы мы видим нечто подобное:
Сервер работает на удивление быстро и очень компактно использует место на диске, используя подобие дедубликации на основе симлинков.
Это минимальная настройка сервера, при желании можно настроить авторизацию, архивацию, создание образов систем (Windows), резервное копирование через интернет и т.д. В дальнейших статьях планирую рассказать, как на этот же сервер настроить резервное копирование MSSQL и Exchange, если это, конечно, будет интересно читателям.
Источник
Найти и скопировать один самый новый файл
Подскажите с такой операцией. Хочу сделать маленький скрипт. Вот имеется каталог, в нем время от времени генерируются новые файлы(там всегда куча файлов), я хотел бы что бы время от времени, по моему запросу, из этого каталога копировать самый новый файл(один) в свой личный каталог.
Пока ничего умнее не придумал: find /место/искомого/файла -type f -cmin -10 | xargs cp -tpv /мой/каталог/
Но эт нифига не то что хотелось бы. Гуглил, не помогло особо.
я хотел бы что бы время от времени, по моему запросу, из этого каталога копировать самый новый файл(один) в свой личный каталог.
На уроки ходи, неуч!
Если на коленке и без каталогов, то ls -t|head -n 1 покажет самый новый файл.
Ох уже эти советчики со звездами.
ТС, НИКОГДА не используй ls, если вывод нужно использовать где-то еще. ls предназначен не для этого.
Чтобы получить самый новый файл используй скрипт
я конечно новичок, но не на столько же))
мне не надо любоваться его названием, мне надо этот файл выхватить к себе в укровное место, так сказать)
Если пошагово делать — понятнее становится.
Что делать пошагово? Пайп не терминал.
Смотреть результат каждой команды.
Запихни имя в переменную и используй.
мне не надо любоваться его названием, мне надо этот файл выхватить к себе в укровное место
Лечи голову, лечи голову:
Я не умею смотреть pipe, это разве что через strace.
А результат ls (во всяком случае GNU) меняется от того, куда направлен вывод, в доке про это написано.
Вывод $ ls -t > /tmp/tmpfile && cat /tmp/tmpfile
в общем случае совпадёт с выводом $ ls -t
Я не умею смотреть pipe, это разве что через strace.
Мы о разном. Но тебе виднее.
-1 list one file per line. Avoid ‘\n’ with -q or -b
Источник