Резервное копирование с rsync

Rsync является утилитой для синхронизации файлов и их резервного копирования. Она работает на многих *nix системах).

Ограничение rsync состоит в том, что данные не могут копироваться между 2 удалёнными (remote) системами. В этом случае Вам пришлось бы скопировать данные с одной удалённой системы, а потом перенести на другую.

В aptosid у Вас есть различные возможности запускать процесс синхронизации. Вы можете запускать rsync командой в терминале, или установить дополнительные пакеты из Debian Sid:

Чтобы установить deb пакет:
apt-get install luckybackup

Дополнительную информацию о luckybackup найдете на его веб-странице.

Инструкция по использованию в терминале

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

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

rsync может копировать данные:
* с локальной системы на локальную систему,
* с локальной системы на удалённую (remote) систему,
* с удаленной (remote) системы на локальную систему.

При этом rsync использует клиент ssh (входит в основную установку), либо rsync-daemon, которые работают на исходной и на целевой системе. В manpages rsync говорится, если системы могут связываться по ssh, ssh также может использоваться для rsync.

Ограничение с rsync состоит в том, что данные не могут копироваться между 2 удалёнными (remote) системами. В этом случае Вам придётся скопировать данные с одной удалённой системы, а потом перенести с rsync на другую.

Чтобы пояснить это, рассмотрим следующий пример с 3 компьютерами:

neo – локальная система
morpheus – удаленная система
trinity – удаленная система

Каждый пользователь знает имя другого пользователя, и rsync работает исключительно на neo, локальной системе:

Имя пользователя на neo является cuddles,
Имя пользователя на morpheus является tartie,
Имя пользователя на trinity является taylar.

Целью является синхронизация каталогов /home/$user/Files:

neo:/home/cuddles/данные с morpheus и trinity,
morpheus:/home/tartie/данные с neo и trinity,
trinity:/home/taylar/данные с neo и morpheus.

Теперь возникает проблема, что rsync не может быть применён между 2 удалёнными компьютерами:

neo-> morpheus - с локальной на удалённую, получится
neo-> trinity - с локальной на удалённую, получится
morpheus-> neo - с удаленной на локальную, получится
trinity-> neo - с отдаленной на локальную, получится
morpheus-> trinity - нельзя, с удалённой на удаленную
trinity-> morpheus - нельзя, с удалённой на удаленную

Чтобы обойти это ограничение, поступаем как указано ниже:

morpheus --> trinity - станет: morpheus --> neo и neo --> trinity
trinity --> morpheus - станет: trinity --> neo и neo --> morpheus

Этот дополнительный шаг не изменяет ничего в конечном итоге. Тем не менее, указывает на то, что:

Это ограничение с rsync должно быть учтено при планировании процесса резервного копирования.

Применение имён хоста с именами хоста в rsync.

Применение имён хостов neo, morpheus, и trinity, вместо IP-адресов, может позволить сделать процесс копирования нагляднее и Вам будет легче разобраться.

Для этого Вы должны отредактировать /etc/hosts и вставить имена хостов и ему принадлежащие IP-адреса. Таким образом в нашем примере файл /etc/hosts будет выглядеть так:

192.168.1.15 neo
192.168.1.16 morpheus
192.168.1.17 trinity

Первая строка переводит IP-адрес 192.168.1.15 на “neo”, вторая 192.168.1.16 на “morpheus” и третья 192.168.1.17 на “trinity”. После записи может использоваться дополнительно имя хоста вместо IP-адреса. Этот особенно удобно, если изменяются распределённые IP-адреса, например, у "neo" с 192.168.1.15 на 192.168.1.25 Это облегчает работу со скриптами, так как они в случае изменения IP-адресов не должны изменяться, а только файл /etc/hosts.

Два способа использования rsync.

Первый способ - данные “толкают (push)” на целевую машину; другой - данные “вытягиваются (pull)” с источника. Каждый метод имеет свои за и против, которые будут рассмотрены ниже. В нашем примере используются локальная и удаленная системы, чтобы более отчетливо объяснить терминологию.

“push” - локальная система несет исходные каталоги и файлы, целью является удаленная система. Команда rsync запускается на локальной системе и "толкает" данные на целевую систему.

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

Недостатки:
 * Если скрипт используется с синхронизацией через cron, то crontab-ы должны задаваться на каждой системе. При модификации скрипта необходимо вносить соответствующие изменения на каждой системе, при изменениях календарного плана должен изменяться каждый crontab на каждом компьютере. Вследствие этого административное обслуживание становится очень громоздким и запутанным. * Процесс резервного копирования не возможно проверить, был ли целевой раздел смонтирован целевой системой. Если он не смонтирован, резервного копирования не произойдёт.

“pull” - удаленная система несет исходные каталоги и файлы, целью является локальная система. Команда rsync запускается на локальной системе и "вытягивает" данные из исходной системы.

Преимущества:
* Система станет сервером, который управляет всеми процессами резервного копирования всех других систем. Процессы резервного копирования централизуются.
* При применении скрипта, он должен находится только на одной системе, что упрощает любые модификации. При изменении календарного плана должен изменяться только один crontab.
* Скрипт может проверить, смонтирован ли целевой раздел и при случае его смонтирует.

Синтаксис rsync (часть из "man rsync"):
       rsync [OPTION]... SRC [SRC]... DEST

       rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

       rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

       rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

       rsync [OPTION]... SRC

       rsync [OPTION]... [USER@]HOST:SRC [DEST]

       rsync [OPTION]... [USER@]HOST::SRC [DEST]

       rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
Рабочие примеры команд rsync:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home

Объяснение составных частей этой команды:

Источник: (/путь/файл)  morpheus:/home/tartie,   целью является: /media/sda7/SysBackups/morpheus/home

Каталог /home/tartie (включая подкаталоги) будет сохранен в /media/sda7/SysBackups/morpheus/home, что после rsync будет выглядеть таким образом:

/media/sda7/SysBackups/morpheus/home/tartie

Обратите внимание, копируется только каталог /tartie, в путь указанный rsync /media/sda7/SysBackups/morpheus/home. "Источник" выбирает только, откуда прибывают данные, а "Цель" указывает rsync, куда должны копироваться данные из "источника" он воспринимает его уже не как /home/tartie, а просто /tartie, которого он направить в /media/sda7/SysBackups/morpheus/home. Ещё пример:

rsync [...] /home/user/data/files /media/sda7/SysBackups/neo

Здесь будет копироваться исходный каталог /files и все в нём находящиеся каталоги и файлы в целевую папку /media/sda7/SysBackups/neo/  - а не в /media/sda7/SysBackups/neo/home/user/data/files.

На это необходимо обращать внимание при использовании резервного копирования с rsync.

Пояснення опцій (чорновий переклад з англомовного "man rsync"):
-a для способа с архивацией. manpage по этому поводу говорит: “проще говоря, этот метод, для создания рекурсивного резервного копирования и копирования почти всех атрибутов. Не сохраняются только жёсткие ссылки  из-за сложности процесса. Опция -a соответствует: -rlptgoD, что это значит:
  -r = rekursiv - копировать подкаталоги и файлы в них из "исходного места".
  -l = Links - символические ссылки восстанавливаются в пункте назначения.
  -p = права - права идентичны с ними в исходном месте.
  -t = временной штамп - временной штамп в исходном месте идентичен с ним .
  -q = quiet - минимальный вывод информации. Большее количество информации получают с опцией -v после опции -a. Выполнение без какого-либо ответа будет достигнуто без постановки опции -v.
  -o = владелец - если rsync проводится как root, владельцы исходных файлов остаются соответствующим образом сохранёнными.
-D = соответствует этим обеим командам: --devices --specials
 --devices = символьные файлы и файлы блочного устройства будут копироваться в удаленную систему, чтобы затем восстанавливаться. Нужно обратить внимание, что без опции --super , опция --devices не работает.
 --specials = rsync копирует специальные файлы как sockets и fifos.
--g: группы сохраняются соответственно исходным файлам.
-E: сохраняется атрибут "выполнимо".
-v: для подробного вывода. Если подробности не важны, эта опция может быть опущена. Тем не менее, если необходимо видеть, что происходит, эта опция очень полезна.
-z: копируемые данные архивируются, что ускоряет копировальный процесс, так как перемещённый объем данных будет меньше.
--delete-after= целевые каталоги или целевые файлы, которых больше нет в источнике, удаляются после перемещения, а не перед этим. В случае проблем или катастроф будет “after” использован , "delete” предотвращает использование лишнего пространства больше ненужными файлами и каталогами в пункте назначения.
-- exclude = указывает на файлы или каталоги исключаемые из копировального процесса. В примере, --exclude = “*~” были бы ВСЕ файлы с окончанием “~” из процесса резервного копирования исключены. С одной опцией --exclude может передаваться только один аргумент, при большем количестве аргументов исключения необходимо использовать несколько опций --exclude.
Дополнительные команды:
-c - проводит дальнейшие сравнительные проверки, что требует большого времени. Так как rsync уже проводит сравнительные проверки, эта команда не была интегрирована в --a из-за её избыточности, а также для экономии времени. В этой опции, как правило, нет нужды.
--super - целевая система попытается проводить действия суперпользователя (root) (смотрите manpage)
--dry-run - тестовый запуск: просто показывает, что должно копироваться. Никакие файлы не копируются.

И напоследок, варианты указания исходных и целевых каталогов.

Примерные команды:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home

Эта команда копирует все каталоги и файлы ниже от /home/tartie на систему "morpheus" и размещает их в этот каталог /media/sda7/SysBackups/morpheus/home. Структура каталога tartie сохраняется.

rsync -agEvz --delete-after --exclude=”*~” /home/tartie neo:/media/sda7/SysBackups/morpheus/home

Это - противоположная команда первого примера. Она "двигает" каталог /home/tartie и его содержание в указанный каталог системы "neo" - отметим, что систему рассматривают как "удаленную (remote)", если ставится “:” двоеточие перед путем.

rsync -agEvz --delete-after --exclude=”*~” /home/cuddles /media/sda7/SysBackups/neo/home

Это - процесс резервного копирования на локальном компьютере. Здесь нужно обращать внимание на то, что никакое двоеточие не установлено. Локальный каталог /home/cuddles копируется на /media/sda7/SysBackups/neo/home на том же самом локальном компьютере.

rsync с многими опциями --exclude:
rsync -agEvz --delete-after --exclude=”*~” --exclude=”*.c” --exclude=”*.o” "/*" /media/sda7/SysBackups/neo

Эта команда копирует все из каталога root локальной системы (все каталоги и файлы) на /media/sda7/SysBackups/neo - исключенными из этого являются все файлы и каталоги, которые кончаются на “~”, “.c” или “.o”.

Замена имени хоста IP-адресом:

Первая команда установлена с методом имени хоста, второй с методом IP-адресов. Обе команды идентичны в своём выполнении:

rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home
rsync -agEvz --delete-after --exclude=”*~” 192.168.1.16:/home/tartie /media/sda7/SysBackups/morpheus/home

Метод имён хоста не должен применяться, но по нашему мнению он упрощает резервное копирование с rsync в сетях.

class="highlight-2">Невозможная команда:

rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie trinity:/home

Как было уже сказано, ограничение rsync в том, что этой командой нельзя копировать между 2 удаленными компьютерами. На это мы бы хотели еще раз обратить внимание.

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

Содержание, последний раз пересмотрено 14/08/2010 0100 UTC