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 забирает и саму папку.