Программирование

rsync

Что такое rsync?

rsync написали Andrew Tridgell и Paul Mackerras. Первый открытый разговор был в 1996 году. Команда сравнивает две папки. Файл, который не менялся, она пропускает. У изменившегося файла может отправить только отличающуюся часть. Поэтому вторая копия большого дерева короче первой. Когда путь идёт на дальнюю машину, его часто несёт SSH. rsync — не сам SSH. Он только везёт файл поверх него. Косая черта в конце строки меняет смысл. Косая после имени папки копирует то, что внутри. Если её не поставить, уходит и сама папка.

Для чего нужен rsync?

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

  • Унести файлы сайта на другой сервер
  • Каждую ночь писать в копию только изменившееся
  • Сравнить две папки
  • Продолжить копирование большого файла, которое осталось на половине

Что можно делать с rsync?

Через rsync папку держат близкой к другому месту. Программу внутри файла он не запускает. Он только везёт байты. --delete удаляет лишний файл на дальней стороне. Запуск этого в неверной папке уносит файлы там. Сначала смотрят с флагом пробного прогона. Если пароль написан внутри команды, он может остаться в истории.

Сложно ли освоить rsync?

Скопировать одну папку легко. Трудность в косой черте и в удалении. Есть косая в конце или нет — пишет в другое место. Когда --delete работает на неверной цели, вернуть трудно. Если путь или пользователь дальней машины неверны, ничего не уходит. Разница часов иногда считает свежий файл старым. Поэтому первый взгляд — без удаления и с пробным прогоном.

Плюсы и ограничения

Плюс: вторая копия короткая, неизменившийся файл не приходит снова, и можно уйти на дальний сервер. Ограничение: неверное удаление трудно вернуть. rsync — не cp и не SSH.

Основные понятия

Источник — откуда файл выходит. Цель — куда он идёт. Разница — часть, которая уже не совпадает.

  • Неизменившийся файл пропускается
  • Косая черта меняет смысл папки
  • --dry-run только показывает
  • --delete удаляет лишний файл на цели

Короткий пример

Эта команда держит содержимое одной папки близким к другой папке. Не удаляет. Пишет только в путь, который ты показываешь.

rsync -a source/ backup/

Частые вопросы

  • rsync и cp — одно и то же? Нет. cp копирует файл как есть. rsync старается пропустить неизменившееся и отправить отличающуюся часть.
  • rsync и SSH — одно и то же? Нет. SSH входит на дальнюю машину. rsync везёт файл, а путь может нести SSH.
  • Косая черта важна? Да. source/ забирает то, что внутри. source забирает и саму папку.