Что такое Rsync и как его использовать для резервного копирования

{title}

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

Мы увидим от основ до более сложных примеров со сценариями и примерами, которые вы можете применять в своей рабочей среде.

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

Что такое rsync?

Это инструмент с открытым исходным кодом для передачи файлов и каталогов между одним местом и другим . Его преимущества в основном основаны на сжатии передаваемой информации, он позволяет осуществлять передачу по каналу SSH и передает только те файлы и фрагменты файлов, которые были изменены, вместо того, чтобы снова передавать весь файл, что-то похожее на что происходит при передаче различий в файле под контроль версий Git.

Среди различных вариантов использования rsync :

  • Автоматическое резервное копирование на диски или удаленные серверы.
  • Синхронизация удаленных файлов и каталогов.
  • Общая передача файлов.

Преимущества Rsync

1. Это быстрее, чем scp (Secure Copy), потому что rsync использует протокол загрузки, который позволяет передавать только разницу между файлами, при первой передаче всего файла во второй раз только те изменения, которые могут произойти.
2. Он предназначен для удаленного резервного копирования.
3. Поддерживает копирование всей разрешающей способности файлов, например, владельца, программных и жестких групп ссылок.
4. Используйте меньшую пропускную способность при использовании сжатия при отправке файлов.

Учимся использовать Rsync


Мы полностью вписываемся в обработку команды и наиболее полезные опции.

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

 # rsync параметры источника назначения 

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

 -v: verbose ---> Показывает больше информации об операции. -r: recursive ---> В операции будут использоваться подпапки. -a: архив ---> Скопируйте его как есть, сохранив разрешения, символические ссылки, пользователей и группы и сохранив время модификации. -z: compress ---> включает сжатие во время передачи. -h: человекочитаемый ----> Единицы хранятся в мегабайтах для удобства чтения. 

Установить Rsync
Он установлен практически во всех дистрибутивах, однако вы можете установить его из репозитория.

 # Red Hat / Centos yum install rsync # Debian / Ubuntu / Linux Mint apt-get установить rsync 
Переходим к его использованию.

Использование Rsync для локального резервного копирования


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

Подготовка системы
Начнем с проверки, что rsync установлен.

 [ ~] $ which rsync / usr / bin / rsync 
Мы создадим 2 папки для источника и места назначения файлов.
 mkdir {backup1, backup2} 
В этом случае мы создаем несколько файлов в папке backup1 независимо от размера файлов.
 [ ~] $ touch backup1 / file {1..75} 
В каталоге должно быть 75 файлов.
 [ ~] $ ls резервная копия1 / файл1 файл14 файл19 файл23 файл28 файл32 файл37 файл41 файл46 файл50 файл55 файл6 файл64 файл69 файл73 файл10 файл15 файл2 файл24 файл29 файл33 файл38 файл38 файл42 файл47 файл51 файл51 файл56 файл60 файл65 файл7 файл74 файл11 файл16 файл20 файл25 файл3 файл34 файл39 файл39 файл43 файл48 файл52 файл57 файл61 файл66 файл70 файл75 файл12 файл17 файл21 файл26 файл30 файл35 файл4 файл44 файл49 файл53 файл58 файл62 файл67 файл67 файл71 файл8 файл13 файл18 файл22 файл27 файл31 файл36 файл36 файл40 файл45 файл5 файл5 файл54 файл59 файл63 файл68 файл72 файл9 
Мы делаем резервную копию.

Файлы поддержки и каталоги
Для резервного копирования файлов в backup2 мы используем:

 rsync -r backup1 / backup2 
Источник должен заканчиваться на / иначе копировать вашу папку, а не содержимое.

Если мы введем резервную копию2, мы увидим 75 файлов, которые мы можем даже проверить, что они являются 2 одинаковыми каталогами, используя diff .

 [ ~] $ diff backup1 backup2 
Если вы создаете программную ссылку из файла в каталоге 1
 ln -s file30 file100 
Использование rsync с -r не будет синхронизировать программную ссылку, в этом случае мы используем:
 rsync -a backup1 / backup2 
Если мы посмотрим на этот раз, у нас будет синхронизированная программная ссылка.

Использование пробного прогона в Rsync


Если мы не уверены, что будем поддерживать, мы можем использовать симуляцию с -ny в сочетании с -v, что может быть очень полезно.
 [ ~] $ rsync -anv backup1 / backup2 отправка пошагового списка отправленных файлов, 606 байт, получено 12 байт, 1236, 00 байт / с, общий размер 6, ускорение составляет 0, 01 (DRY RUN) 

Копировать файлы на удаленный сервер


Возможно создание резервных копий на внешние серверы, в этом случае мы должны иметь SSH-доступ к целевому серверу, не забудьте включить сжатие для гораздо более быстрой передачи. Мы должны использовать адрес доступа, за которым следует каталог, в котором будет сохранена резервная копия.
 [ ~] $ rsync -avz backup1 / : / home / user / Невозможно установить подлинность хоста «172.31.17.163 (172.31.17.163)». Отпечаток ключа ECDSA: 0d: 0c: b1: 1d: e1: cf: 6d: 9f: 51: bf: 0f: dc: 60: 82: a1: 73. Вы уверены, что хотите продолжить подключение (да / нет)? да Предупреждение: навсегда добавлен '172.31.17.163' (ECDSA) в список известных хостов. пароль: отправка инкрементного списка файлов ./ файл1 файл10 файл100 -> файл30 файл11 файл12 файл13 файл14 файл15 файл16

$config[ads_text5] not found ...

, отправлено 3312 байт получено 1443 байт 559, 41 байт / сек общий размер 6 ускорение составляет 0, 00

Мы запросим пароль другого сервера, если у нас его нет с открытыми ключами, в конце у нас будет копия папки backup1 на сервере B.

Копировать файлы с удаленного сервера на локальный сервер


Если вы хотите загрузить файлы на локальный компьютер, мы используем ту же команду, но изменение порядка отправления и назначения в соответствии с предыдущим примером будет выглядеть следующим образом.
 [ ~] $ rsync -avz : / home / user / backup1 / home / backup1 

Резервное копирование с использованием SSH для зашифрованных данных


Безопасность очень важна в производственных средах, информация о клиентах не может быть скомпрометирована, и мы можем зашифровать данные, пока они резервируются с использованием SSH, еще одно преимущество заключается в том, что учетные данные могут быть защищены в случае, если мы не используем открытые ключи. Его недостатком является то, что он может потреблять больше системных ресурсов, и передача может быть не такой быстрой.

SSH гид

Чтобы использовать протокол с rsync, мы используем опцию -e, за которой следует используемый протокол, в этом мы будем использовать ssh, и команда будет такой.

 [ ~] $ rsync -avzhe ssh : / home / user / / home / backup1 

Показать прогресс с Rsync


Создание одной резервной копии может занять некоторое время. Вы можете получить прогресс из консоли, используя опцию --progress. Я не рекомендую использовать эту опцию со скриптами, она может дать вам очень обширный журнал.
 [ ~] $ rsync -avzhe ssh --progress : / home / user / / home / backup1 отправка инкрементного списка файлов, созданного каталога / root / rpmpkgs rpmpkgs / rpmpkgs / httpd-2.2.3-82 .el5.centos.i386.rpm 1.02M 100% 2.72MB / s 0:00:00 (xfer # 1, to-check = 3/5) rpmpkgs / mod_ssl-2.2.3-82.el5.centos.i386. rpm 99.04K 100% 241.19kB / s 0:00:00 (xfer # 2, to-check = 2/5) rpmpkgs / nagios-3.5.0.tar.gz 1.79M 100% 1.56MB / s 0:00: 01 (xfer # 3, to-check = 1/5) rpmpkgs / nagios-plugins-1.4.16.tar.gz 2, 09M 100% 1, 47 МБ / с 0:00:01 (xfer # 4, to-check = 0 / 5) отправлено 4, 99M байт, получено 92 байта, 475, 56K байт / с, общий размер - 4, 99M, ускорение - 1, 00 

$config[ads_text6] not found

Используйте -include и -exclude с Rsync


Можно использовать списки доступа с Rsync с опциями include и exclude, нам просто нужно создать текстовые файлы и поместить имена файлов или папок, которые должны быть включены в резервную копию, или добавить список того, что следует игнорировать, в Сделайте перевод.

Мы создадим файл с именем include, а другой - с именем exclude.

 [ ~] $ touch {include, exclude} 
Мы добавляем то, что хотим, в каждый файл и затем включаем файл с помощью rsync.
 [ ~] $ rsync -avze ssh --include 'include' --exclude 'exclude' : / home / user / backup1 / / home / media / backup2 

Удалить файлы с помощью Rsync


По умолчанию мы не можем удалять файлы между источником и местом назначения, если не используем опцию -delete, при ее использовании, если в месте назначения есть файл, который не находится в источнике, он будет удален, так что 2 каталога будут равны.
Если мы создадим файл в backup2.
 [ ~] $ touch backup2 / solvetic 
Потом синхронизируемся из бэкапа1
 rsync -avz - удалить резервную копию 1 / резервную копию 2 
Мы видим, как решающий файл удаляется.

Максимальная квота файлов для передачи


Мы можем установить максимальный размер файлов для передачи или синхронизации, используя параметр -max-size. Например, если мы хотим передавать только файлы размером не более 200 МБ, мы используем -max-size '200 МБ'. Это может быть очень полезно, когда мы создаем резервную копию сайта, но хотим пропустить его базу данных.
 [ ~] $ rsync -avzhe ssh --max-size'200mb '/ var / www / * : / root / backupweb 

Удалить файлы автоматически после передачи или синхронизации


Предположим, у нас есть веб-сервер и сервер резервного копирования, и у нас ежедневно записывается резервная копия, и мы не хотим сохранять содержимое резервной копии на веб-сервере. rsync не нужно удалять файлы вручную. Я могу удалить их автоматически с помощью опции -remove-source-files.

$config[ads_text6] not found

Когда передача будет завершена, файлы будут немедленно удалены с веб-сервера.

 [ ~] $ rsync --remove-source-files -zvh backup.tar / tmp / backups / backup.tar 
 отправлено 14.71M байт, получено 31 байт 4.20M bytes / sec общий размер 16.18M ускорение составляет 1.10 В конце мы видим, что файл tar не найден на исходном сервере. [ ~] ll backup.tar ls: backup.tar: такого файла или каталога нет 

Ограничить пропускную способность при передаче файлов с помощью rsync


Как правило, резервное копирование выполняется на производственных серверах. Чтобы предотвратить сокращение обслуживания клиентов cba. Из-за низкой пропускной способности рекомендуется ограничить резервное копирование, используя параметр -bwlimit, мы ограничим пропускную способность ввода-вывода.
 [ ~] rsync --bwlimit = 100 -avzhe ssh / var / lib / rpm / : / root / tmprpm / пароль : отправка списка добавленных файлов отправлена ​​324 полученных байта 12 байт 61.09 байт / сек общий размер 38.08M ускорение 113347.05 
Мы ограничили скорость резервного копирования до 100 кбит / с.

$config[ads_text5] not found

Rsync и Cron для автоматического инкрементного резервного копирования


В этом разделе предполагается, что вы уже знаете, как указать время в crontab, для получения дополнительной информации об этом вы можете проверить мою предыдущую публикацию Использование cronjobs для автоматизации задач.

Если бы мы делали полное ежедневное резервное копирование, мы могли бы использовать следующий crontab:

 rsync -au - удалить резервную копию 1 / резервную копию 2 
Это синхронизирует исходный каталог с каталогом назначения, и у нас будет полная резервная копия в месте назначения. Тем не менее, у нас будут только файлы в том же состоянии, в каком они были с момента последней копии. Мы не могли вернуться в любой другой момент времени. Чтобы оставить копию файлов, как они были до того, как мы использовали файлы, то есть инкрементную резервную копию, мы должны использовать:
 rsync -ab --backup-dir = old_`date +% F` --delete --exclude = old_ * origin / destination / 
Теперь у нас будет полная резервная копия в целевом каталоге и резервная копия файлов, которые были до последней резервной копии в каталоге. Если это резервное копирование произошло 25 февраля 2015 года, каталог будет называться viejo_2015-02-25. Конечно, это будет создавать разные каталоги резервных копий для каждого дня его запуска, и чтобы восстановить файлы до их состояния в определенный день, нам нужно будет последовательно копировать файлы с самого последнего дня, который мы хотим восстановить, на Создайте полную резервную копию папки и удалите все новые файлы, созданные после этого дня.

$config[ads_text6] not found

Инкрементное резервное копирование с помощью rsync и cron


Инкрементное резервное копирование относится к тому факту, что мы повторно используем определенное количество папок для инкрементных резервных копий . Например, вместо добавления полной даты к имени каталога, когда мы выполняем ежедневное резервное копирование, мы можем использовать только день недели. Это создаст каталоги old_0, old_1 ... old_6, а затем я снова буду использовать папку old_0 в начале следующей недели. Мы удалили бы эту папку, если она существует, и заново создали бы ее для новой резервной копии. Таким образом, мы могли бы вернуться в срок до 7 дней. Очевидным преимуществом этого является то, что у нас не будет большого количества папок резервных копий (и большого количества старых данных), поскольку мы будем повторно использовать пространство и имена папок. Семь дней могут быть очень короткими, мы можем использовать номер дня в месяце, чтобы иметь возможность вернуться около 30 дней во времени, или номер дня в году, чтобы иметь возможность вернуться до 365 дней во времени.

Образец скрипта
Мы можем использовать базовый сценарий для ежедневного или еженедельного инкрементного резервного копирования, все зависит от того, как вы настроили его в cron, я оставлю пример инкрементного резервного копирования.

 #! / bin / sh SUFFIX = $ (date +% j) # Удалить каталог на удаленном сервере через SSH # ssh remote_support 'ls Backups / my_work / backup _' $ SUFFIX '&& rm -r Резервные копии / my_work / backup _' $ SUFFIX # Удалить каталог на удаленном сервере через SFTP sftp -b / dev / fd / 0 remote_backup <  Не забудьте добавить скрипт в crontab или в одну из папок cron. 
 crontab -e 
И добавьте место, где у нас есть скрипт.
 /home/user/bin/respaldo_auto.sh 

выводы

Мы увидели, как использовать rsync с наиболее полезными опциями, вместе с такими инструментами, как cron и скрипты в bash, python. У нас будет все необходимое для создания наших резервных копий без использования сторонних инструментов, в другой статье я расскажу о типах резервных копий и о том, как их использовать. С дополнительным rsync добавьте гораздо более сложные скрипты.

  • 0

СТАТЬЯ ПО ТЕМЕ Как найти потерянный или украденный Xiaomi Redmi 6