rsync (Русский)

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

Состояние перевода: На этой странице представлен перевод статьи rsync. Дата последней синхронизации: 6 марта 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Установка

Установите пакет rsync.

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

Графические интерфейсы

  • Grsync GTK-фронтенд.
https://www.opbyte.it/grsync/ || grsync
  • JotaSync графический пользовательский интерфейс Java Swing для rsync со встроенным планировщиком.
https://trixon.se/projects/jotasync/ || jotasyncAUR
  • luckyBackup Qt-фронтенд, написанный на C++.
https://luckybackup.sourceforge.net/index.html || luckybackupAUR

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

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

Примечание: Использование rsync вместо cp/mv эффективно между различными файловыми системами, но не для копирования или перемещения файлов внутри одной файловой системы. Смотрите

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

$ rsync -P источник назначение

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

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

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

$ rsync источник хост:назначение

или

$ rsync хост:источник назначение

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

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

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

  •  : вывод чисел в удобном для чтения виде
  •  : выводит статистику трансфера rsync с уровнем детализации 1. progress2 выводит общий прогресс трансфера, а не по каждому файлу ()
  •  : при сравнении временных меток у файлов, считать их эквивалентными если разница составляет не более 1 секунды.
  •  : удалить файлы из каталога источника после успешной передачи.

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

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

$ rsync -r источник назначение

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

$ rsync -r источник/ назначение

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

$ rsync -r источник/. назначение

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

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

#!/bin/sh
new_args=();
for i in "$@"; do
    case $i in /) i=/;; */) i=${i%/};; esac
    new_args="$new_args $i";
done
exec rsync "${(@)new_args}"

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

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

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

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

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

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

/etc/cron.daily/backup
#!/bin/sh
rsync -a --delete --quiet /каталог/для/резервного/копирования /расположение/резервной/копии
  •  : означает, что файлы должны быть архивированы, то есть большинство их характеристик сохранятся (но не список контроля доступа, жёсткие ссылки или расширенные атрибуты, такие как их возможности)
  •  : означает, что файлы, удалённые в источнике, должны быть удалены и из резервной копии

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

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

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

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

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

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

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

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

/etc/NetworkManager/dispatcher.d/backup
#!/bin/sh

if [ x"$2" = "xup" ] ; then
        rsync --force --ignore-errors -a --delete --bwlimit=2000 --files-from=files.rsync /каталог/для/резервного/копирования /расположение/резервных/копий
fi
  •  : включает опции (рекурсивно, ссылки, разрешения, времена, группы, владелец, устройства)
  •  : считывает относительный путь /каталога/для/резервного/копирования из этого файла
  • --bwlimit : ограничивает пропускную способность ввода/вывода; килобайты в секунду

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

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

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

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

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

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

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

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

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

/etc/cron.daily/backup
#!/bin/sh

DAY=$(date +%A)

if [ -e /расположение/для/инкрементной/копии/$DAY ] ; then
  rm -fr /расположение/для/инкрементной/копии/$DAY
fi

rsync -a --delete --quiet --inplace --backup --backup-dir=/расположение/для/инкрементной/копии/$DAY /каталог/для/резервного/копирования/ /расположение/для/полной/резервной/копии/

Опция автоматически включает и обновляет целевые файлы напрямую.

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

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

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

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

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

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

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

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

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

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

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

# rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /каталог/для/резервного/копирования

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

Опция исключает файлы, подходящие под заданные шаблоны. Каталоги , , /sys, и будут созданы этой командой, однако их содержимое будет исключено из резервной копии. зависит от файловой системы. Команда выше зависит расширения скобок в оболочках bash (англ.) и zsh (англ.). При использовании другой оболочки. шаблоны в должны повторяться вручную. Кавычки в исключаемых шаблонах позволят избежать расширения оболочкой, что важно например при резервном копировании по SSH. Окончание исключаемых путей символом гарантирует, что сами каталоги будут созданы, если они ещё не существуют.

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

  • Если в вашей системе очень мало памяти, может иметь смысл убрать опцию -H; однако это не должно быть проблемой на большинстве современных устройств. Количество жёстких ссылок в файловой системе может быть большим при использовании некоторых программ, например Flatpak. Много жёстких ссылок находится в каталоге .
  • Вы можете захотеть добавить опцию rsync , если запускаете его несколько раз для одного и того же каталога. В этом случае, убедитесь, что каталог источника на заканчивается на , иначе эта опция затронет файлы внутри подкаталогов источника, но не затронет файлы, находящиеся в самом источнике.
  • Если вы используете разреженные файлы, такие как виртуальные диски, образы Docker и т.п., добавьте опцию -S.
  • Опция --numeric-ids отключит сопоставление имён для групп и пользователей; вместо этого передаваться будут цифровые идентификаторы групп и пользователей. Это полезно при резервном копировании через SSH или при использовании live системы для резервного копирования другого системного диска.
  • Выбрав опцию вместо , вы увидите информацию об общем прогрессе и скорости передачи вместо списка передаваемых файлов.
  • Для избежания выхода за пределы файловой системы при рекурсивном обходе, добавьте опцию /. Она предотвратит резервное копирование любых точек монтирования в иерархии.

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

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

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

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

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

rsync -qaHAXS ИСТОЧНИК НАЗНАЧЕНИЕ

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

--hard-links, -H      сохранять жёсткие ссылки
--acls, -A            сохранять списки контроля доступа (вызывает --perms)
--xattrs, -X          сохранять расширенные атрибуты
--sparse, -S          сжимать последовательности нулей в разреженные блоки

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

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

diff -r ИСТОЧНИК НАЗНАЧЕНИЕ

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

Демон rsync

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

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

Примечание: На момент rsync 3.2.0-1 пакет использует файлы модулей systemd rsyncd.service и rsyncd@.service. Изменение ProtectHome было закомментировано, функция безопасности ProtectSystem=full в разделе [Service] до сих пор активна. Это делает каталоги /boot/, /etc/ и /usr/ доступными только для чтения. Если вы хотите, чтобы rsyncd записывал в системные каталоги, отредактируйте модуль и установите ProtectSystem=off в разделе [Service] переопределяемого фрагмента.

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

$ rsync rsync://server/share

передача файла с клиента на сервер:

$ rsync локальный-файл rsync://server/share/

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

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

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

/backup.list
/etc/
/etc/conf.d/
/etc/conf.d/hwclock
/etc/fonts/***

Смотрите также

gollark: Or you can just add more CPU cores by... having swappable CPUs, and skip a ton of extremely difficult and problematic stuff.
gollark: If you have CPU, GPU and RAM in some monolithic device, you cannot really swap out each bit.
gollark: You get expandability out of having discrete stuff, because you can actually swap it out individually.
gollark: Moore's law stopped being accurate a few years ago.
gollark: More so than with existing chips and chiplet designs, because you have even more heat in the same area.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.