Что такое rsync linux

Утилита rsync, синхронизация файлов в Linux

Введение

Rsync, что означает «remote sync«, в переводе “удаленная синхронизация” — средство синхронизации удаленных и локальных файлов. Утилита использует алгоритм, минимизирующий объем копируемых данных за счёт перемещения только тех участков файлов, которые были изменены. В данном руководстве мы рассмотрим основы использования этой мощной утилиты. В примерах используется Ubuntu 12.04 VPS, но вы можете работать в любом современном дистрибутиве Linux.

Что такое Rsync?

Rsync — очень гибкий инструмент сетевой синхронизации. Это название может также означать сетевой протокол, созданный для его работы. В данном руководстве под rsync мы будем понимать утилиту, а не протокол. Благодаря своей повсеместной распространенности в Linux и Unix-подобных системах и популярности в качестве инструмента для системных скриптов, rsync по умолчанию включена в большинство дистрибутивов Linux.

Опции rsync

  • -v — Выводить подробную информацию о процессе копирования
  • -q — Минимум информации
  • -c — Проверка контрольных сумм для файлов
  • -a — Режим архивирования
  • -R — относительные пути
  • -b — создание резервной копии
  • -u — не перезаписывать более новые файлы
  • -l — копировать символьные ссылки
  • -L — копировать содержимое ссылок
  • -H — копировать жесткие ссылки
  • -p — сохранять права для файлов
  • -g — сохранять группу
  • -t — сохранять время модификации
  • -x — работать только в этой файловой системе
  • -e — использовать другой порт для ssh пример rsync -e «ssh -p 1234»
  • -z — сжимать файлы перед передачей
  • —delete — удалять файлы которых нет в источнике
  • —exclude — исключить файлы по шаблону
  • -r —recursive — перебирать директории рекурсивно
  • —no-recursive — отключить рекурсию
  • —progress — выводить прогресс передачи файла
  • —stat — показать статистику передачи
  • —version — версия утилиты

Базовый синтаксис

Базовый синтаксис rsync очень прост и аналогичен ssh, scp и cp. Дли синхронизации содержимого директории dir1 в dir2 на той же системе введите команду:

Опция -r означает рекурсивную синхронизацию и обязательна для синхронизации директорий.

Вместо нее можно было воспользоваться флагом -a:

Опция -a — это комбинированный флаг. Она означает архивную синхронизацию и осуществляет рекурсивную синхронизацию с сохранением символических ссылок, специальных файлов, файлов устройств, времени изменения, группы, владельца и прав доступа. Она используется чаще чем -r, и обычно требуются именно ее функции.

Важное замечание: В конце первого аргумента в рассмотренных выше командах указан слэш (/):

Он нужен для того, чтобы определить аргумент как “содержимое dir1”. Без слэша в dir2 была бы помещена сама директория со всеми файлами внутри:

Всегда внимательно проверяйте аргументы при выполнении команды rsync. Специально для этого существуют опции -n или —dry-run (тестовый прогон без фактической синхронизации). Флаг -v (verbose, подробная информация) также полезен для полноценного просмотра выходных данных:

Удалим слэш в конце аргумента и сравним результаты:

Видно, что была передана сама директория.

Использование rsync для синхронизации с удаленной системой

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

Такая операция называется «push» (“толчок”), потому что директория “толкается” из локальной системы в удаленную. Противоположная операция — “pull” (“извлечение”), она применяется для синхронизации с удаленной системы в локальную. Если бы директория dir1 была в удаленной системе, синтаксис был бы следующим:

Как и в случае с cp и подобными командами, источник всегда является первым аргументом, а место назначения — вторым.

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

Читайте также:  Отключить режим планшета windows 10 cmd

Полезные опции

У rsync есть множество опций, которые изменяют заданное по умолчанию функционирование. Мы уже рассмотрели некоторые из них выше. Если вы передаёте несжатые файлы, например, текстовые, можно снизить объем сетевого трафика при помощи опции -z, которая выполняет компрессию:

Очень полезной опцией является -P: она объединяет флаги —progress и —partial. Первый из них показывает ход выполнения передачи, а второй позволяет возобновлять прерванные передачи:

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

Если обновить время модификации некоторых файлов, rsync скопирует только их:

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

Это можно изменить при помощи опции —delete. Прежде чем воспользоваться ей, проведите тестирование с опцией -n, чтобы исключить потерю данных.

Если требуется исключить из синхронизации определенные файлы, их можно указать в разделенном запятыми списке после опции —exclude=:

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

Наконец, опция —backup может использоваться для сохранения резервных копий важных файлов. Она используется совместно с опцией —backup-dir, которая указывает директорию для сохранения резервных копий.

Заключение

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

Владение rsync позволяет выполнять сложные операции резервного копирования и точно контролировать, что и как передаётся.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

rsync (Русский)

rsync — утилита с открытым исходным кодом для быстрого инкрементного перемещения файлов.

Contents

Установка

rsync должен быть установлен как на устройстве-отправителе, так и на устройстве-получателе.

Фронтенды

  • Grsync — GTK-фронтенд.

https://www.opbyte.it/grsync/ || grsync

  • gutback — обёртка над rsync, написанная на Shell.

https://github.com/gutenye/gutbackup || gutbackupAUR

  • JotaSync — графический пользовательский интерфейс Java Swing для rsync со встроенным планировщиком.

https://trixon.se/projects/jotasync/ || jotasyncAUR

  • luckyBackup — Qt-фронтенд, написанный на C++.

http://luckybackup.sourceforge.net/index.html || luckybackupAUR

Другие утилиты, использующие rsync: rdiff-backup и osync AUR .

Как альтернатива cp/mv

rsync может использоваться как продвинутая альтернатива команде cp или mv , особенно при копировании больших файлов.

Опция -P эквивалентна —partial —progress , которая оставляет частично перемещённые файлы и показывает шкалу прогресса во время перемещения.

Используйте опцию -r / —recursive для рекурсивного обхода каталогов.

Файлы могут копироваться локально, как при помощи cp, но rsync интересна прежде всего возможностью удалённого копирования файлов, то есть между двумя разными хостами. Удалённые расположения могут быть указаны при помощи синтаксиса хост-двоеточие:

Передача файлов по сети по умолчанию использует протокол SSH и хост может быть как реальным именем хоста, так и предопределённым профилем/псевдонимом из .ssh/config .

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

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

Предостережение о замыкающем слэше

По умолчанию Arch использует GNU cp (часть GNU coreutils ). Однако rsync следует соглашениям BSD cp, которые особо обрабатывают каталоги источника с замыкающим слэшем «/». Несмотря на то, что

создаёт каталог «назначение/источник» с содержимым «источника», команда

копирует все файлы из «источник/» напрямую в «назначение», без промежуточного каталога — так же, как при вызове

Это поведение отличается от такового в GNU cp, которая одинаково обрабатывает «источник» и «источник/» (но не «источник/.»). Кроме того, некоторые оболочки автоматически добавляют замыкающий слэш при tab-дополнении имён каталогов. В виду этих обстоятельств, новые или нечастые пользователи rsync могут зачастую забывать про разное поведение rsync и случайно создавать беспорядок или даже перезаписывать важные файлы, оставляя замыкающий слэш в командной строке.

Поэтому имеет смысл использовать сценарий-обёртку, чтобы автоматически удалять замыкающий слэш перед вызовом rsync:

Читайте также:  Windows 10 размер системы после установки

Этот сценарий может быть размещён где-нибудь в $PATH и назначен псевдонимом для rsync в файле инициализации оболочки.

Как утилита для резервного копирования

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

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

В этом примере сценарий будет создан в каталоге /etc/cron.daily и будет запускаться ежедневно, если демон cron должным образом установлен и настроен. Настройка и использование cron выходит за рамки этой статьи.

Сперва создайте сценарий, содержащий подходящие опции команды:

-a означает, что файлы должны быть архивированы, то есть большинство их характеристик сохранятся (но не список контроля доступа, жёсткие ссылки или расширенные атрибуты, такие как их возможности) —delete означает, что файлы, удалённые в источнике должны быть удалены и из резервной копии

Здесь /каталог/для/резервного/копирования следует заменить на каталог, нуждающийся в резервной копии (например /home ), а /расположение/резервной/копии на каталог, куда следует сохранять резервную копию (например /media/disk ).

В конце надо сделать сценарий исполняемым:

Автоматическое резервное копирование по SSH

Для резервного копирования на удалённый хост при помощи SSH, используйте следующий сценарий:

-e ssh указывает rsync использовать SSH пользователь пользователь на хост -a включает опции -rlptgoD (рекурсивно, ссылки, разрешения, времена, группы, владелец, устройства)

Автоматическое резервное копирование с помощью NetworkManager

Этот сценарий запускает резервное копирование при установлении сетевого соединения.

Сперва создайте сценарий, содержащий подходящие опции команды:

-a включает опции -rlptgoD (рекурсивно, ссылки, разрешения, времена, группы, владелец, устройства) —files-from считывает относительный путь /каталога/для/резервного/копирования из этого файла —bwlimit ограничивает пропускную способность ввода/вывода; КБайт в секунду

Root должен владеть сценарием (для изучения подробностей см. NetworkManager#Network services with NetworkManager dispatcher (англ.))

Автоматическое резервное копирование с помощью systemd и inotify

Вместо запуска резервного копирования по расписанию, например при помощи cron, можно запускать резервное копирование каждый раз, когда в один из файлов, подлежащих резервному копированию, вносятся изменения. Модули systemd.path используют inotify для мониторинга файловой системы, и могут быть использованы в связке с файлами systemd.service для запуска любого процесса (в данном случае резервного копирования при помощи rsync) на основе события файловой системы.

Сперва, создайте файл systemd.path , который будет отслеживать файлы для резервного копирования:

Затем создайте файл systemd.service , который будет активирован при обнаружении изменений. По умолчанию будет запущен файл службы, названный так же, как и модуль пути (в данном случае backup.path ), за исключением расширения .service вместо .path (в данном случае backup.service ).

Теперь запустите/включите backup.path , как обычную службу systemd и она начнёт отслеживать изменения в файлах и автоматически запускать backup.service .

Дифференциальное резервное копирование в течение недели

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

Сперва создайте сценарий, содержащий подходящие командные опции:

—inplace заставляет —partial обновлять целевые файлы напрямую.

Резервное копирование при помощи создания снимков

Эта же идея может использоваться для поддержания дерева снимков ваших файлов. Другими словами, каталога с копиями файлов, упорядоченных по дате. Копии создаются при помощи жёстких ссылок, то есть только изменённые файлы будут занимать пространство. В общих чертах, эта идея лежит в основе TimeMachine от Apple.

Этот легко реализуемый базовый сценарий создаёт быстрые инкрементные снимки, используя опцию —link-dest для создания жёстких ссылок на неизменённые файлы:

Символическая ссылка должна уже существовать в качестве назначения —link-dest . Если предыдущий снимок удаляется, то символическая ссылка должна быть пересоздана на наиболее недавний снимок. Если —link-dest не найдёт работающей символической ссылки, rsync продолжит копировать все исходные файла вместо копирования только изменений.

Более продвинутая версия поддерживает актуальную полную резервную копию $SNAP/latest и в случае изменения определённого количества файлов с прошлой полной резервной копии, создаёт снимок $SNAP/$DATETAG текущей полной резервной копии, используя cp -al для создания жёстких ссылок на неизменённые файлы:

Чтобы сделать всё намного проще, этот сценарий можно запускать как модуль systemd/Timers.

Полная резервная копия системы

Этот раздел об использовании rsync для перемещения копии полного дерева / , исключая несколько выбранных каталогов. Этот подход считается лучше, чем клонирование диска с помощью dd т.к. он позволяет использовать различные размеры, таблицы разделов и файловые системы и лучше, чем копирование с помощью cp -a , т.к. предоставляет больший контроль над разрешениями, атрибутами файлов, списками контроля доступа и расширенными атрибутами (англ.).

Читайте также:  Проигрыватель windows media для windows 10 не воспроизводит

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

Этот подход хорошо подходит для переноса существующей установки на новый жёсткий диск или SSD.

Запустите следующую команду с правами root, чтобы удостовериться, что rsync имеет доступ ко всем системным файлам и может сохранять владельцев:

При использовании набора опций -aAX , файлы перемещаются в режиме архива, что гарантирует сохранность символических ссылок, устройств, разрешений, владельцев, времени изменения, списков контроля доступа и расширенных атрибутов, в предположении, что целевая файловая система поддерживает соответствующие функции. Опция -H сохраняет жёсткие ссылки, но использует больше памяти.

Опция —exclude исключает файлы, подходящие под заданные шаблоны. Содержимое каталогов /dev , /proc , /sys , /tmp и /run исключено в команде выше т.к. они заполняются при загрузке, несмотря на то, что сами каталоги не создаются. /lost+found зависит от файловой системы. Команда выше зависит расширения скобок в оболочках bash (англ.) и zsh (англ.). При использовании другой оболочки. шаблоны в —exclude должны повторяться вручную. Кавычки в исключаемых шаблонах позволят избежать расширения оболочкой, что важно например при резервном копировании по SSH. Окончание исключаемых путей символом * гарантирует, что сами каталоги будут созданы, если они ещё не существуют.

Возможно вы захотите добавить или убрать некоторые опции rsync, например следующие. См. rsync(1) для полного списка.

  • Если в вашей системе очень мало памяти, может иметь смысл убрать опцию <; однако это не должно быть проблемой на большинстве современных устройств. Количество жёстких ссылок в файловой системе может быть большим при использовании некоторых программ, например Flatpak. Много жёстких ссылок находится в каталоге /usr/ .
  • Вы можете захотеть добавить опцию rsync —delete , если запускаете его несколько раз для одного и того же каталога. В этом случае, убедитесь, что каталог источника на заканчивается на /* , иначе эта опция затронет файлы внутри подкаталогов источника, но не затронет файлы, находящиеся в самом источнике.
  • Если вы используете разреженные файлы, такие как виртуальные диски, образы Docker и т.п., добавьте опцию -S .
  • Опция —numeric-ids отключит сопоставление имён для групп и пользователей; вместо этого передаваться будут цифровые идентификаторы групп и пользователей. Это полезно при резервном копировании через SSH или при использовании live системы для резервного копирования другого системного диска.
  • Выбрав опцию —info=progress2 вместо -v , вы увидите информацию об общем прогрессе и скорости передачи вместо списка передаваемых файлов.
  • Для избежания выхода за пределы файловой системы при рекурсивном обходе, добавьте опцию -x / —one-file-system . Она предотвратит резервное копирование любых точек монтирования в иерархии.

Восстановление резервной копии

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

Клонирование файловой системы

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

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

Их значение (из справочной страницы):

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

Полученная копия может быть легко прочитана заново и проверена (например после попытки восстановления файлов) на уровне файловой системы с помощью рекурсивной опции diff :

Возможно осуществить успешный переход на другую файловую систему, используя rsync как описано в этой статье и обновив fstab и загрузчик, как описано в Перенос установки на новое оборудование (англ.). Это в сущности позволяет поменять любую корневую файловую систему на любую другую.

Демон rsync

rsync можно запускать на сервере в качестве демона, слушающего порт 873 .

Отредактируйте шаблон /etc/rsyncd.conf , настройте общий доступ и запустите rsyncd.service .

Использование на клиенте, например перечисление содержимого сервера:

перемещение файла с клиента на сервер:

Подумайте об использовании iptables для открытия порта 873 и аутентификации пользователей.

Пример конфигурации

Раздача файлов по списку

Все промежуточные пути необходимы в списке файлов, если не используется шаблон *** :

Источник

Оцените статью