rsync
-резервное копирование
1. Что такое rsync?
rsync
— это мощная утилита командной строки для синхронизации и резервного копирования файлов и каталогов в Unix-подобных операционных системах (Linux, macOS и др.). Это один из самых популярных инструментов для создания локальных и удалённых резервных копий благодаря своей скорости, гибкости и эффективности.
Основные особенности:
- Инкрементное копирование – копируются только изменённые части файлов.
- Сжатие данных – уменьшает объём передаваемых данных.
- Поддержка SSH – безопасная передача через шифрованные соединения.
- Полная поддержка прав доступа, владельцев, временных меток и символьных ссылок.
- Экономия пропускной способности – идеален для сетевых бэкапов.
- Минимальное влияние на производительность системы.
2. Установка rsync
Для большинства Linux-дистрибутивов rsync
установлен по умолчанию.
Если не установлен, установите:
Debian / Ubuntu:
sudo apt update && sudo apt install rsync
CentOS / RHEL:
sudo yum install rsync
или
sudo dnf install rsync
macOS:
Доступен по умолчанию. Если нужна более новая версия:
brew install rsync
3. Базовый синтаксис команды rsync
rsync [опции] источник назначение
4. Примеры использования rsync для резервного копирования
4.1. Локальное резервное копирование каталога
rsync -av /home/user/documents/ /media/backup/documents/
-a
— архивный режим (сохраняет права, символические ссылки, временные метки и т.п.)-v
— выводит информацию о ходе выполнения
4.2. Резервное копирование с удалённого сервера
rsync -avz user@remote:/var/www/html/ /backup/local_html/
-z
— сжатие данных при передаче
4.3. Использование SSH для безопасного подключения
rsync -avz -e ssh user@remote:/etc/nginx/ /backup/nginx/
-e ssh
— указывает использовать SSH для подключения
4.4. Инкрементное резервное копирование с использованием hard links
rsync -av --link-dest=/backup/latest/ /var/www/html/ /backup/$(date +%Y%m%d)/
--link-dest
— создаёт жёсткие ссылки на неизменённые файлы, экономя место
Каждый новый бэкап будет содержать только изменения, но выглядеть как полный.
5. Полезные опции rsync
Опция | Описание |
---|---|
-a |
Архивный режим (сохраняет все атрибуты) |
-v |
Вывод информации о процессе |
-r |
Рекурсивное копирование каталогов |
-z |
Сжатие данных при передаче |
-h |
Человекочитаемый вывод размеров файлов |
--delete |
Удаляет файлы из места назначения, если они были удалены в источнике |
--exclude=PATTERN |
Исключить файлы или папки по маске |
--include=PATTERN |
Включить файлы или папки по маске |
--log-file=FILE |
Записывает лог операции в файл |
--backup |
Сохраняет старые версии изменённых файлов |
--backup-dir |
Указывает каталог для хранения старых версий файлов |
6. Настройка автоматического резервного копирования с помощью cron
Чтобы автоматизировать бэкапы, настройте задание в cron.
Шаг 1: Создайте скрипт резервного копирования
#!/bin/bash
SOURCE="/var/www/html/"
DEST="/backup/$(date +%Y%m%d)"
LOG="/var/log/rsync_backup.log"
rsync -av --link-dest=/backup/latest $SOURCE $DEST >> $LOG 2>&1
# Обновляем ссылку latest
rm -rf /backup/latest
ln -s $DEST /backup/latest
Сохраните как /usr/local/bin/backup.sh
, сделайте исполняемым:
chmod +x /usr/local/bin/backup.sh
Шаг 2: Добавьте задание в crontab
crontab -e
Добавьте строку (например, ежедневно в 02:00):
0 2 * * * /usr/local/bin/backup.sh
7. Как проверить успешность резервного копирования?
Проверьте лог:
cat /var/log/rsync_backup.log
Проверьте структуру бэкапов:
ls -l /backup/
Выполните пробное восстановление:
cp -r /backup/latest/some_file /restore/
8. Безопасность при использовании rsync
Мера | Описание |
---|---|
Шифрование | Используйте SSH или монтируйте зашифрованный диск |
Ограничение прав | Запускайте rsync от пользователя с минимальными привилегиями |
Целостность бэкапов | Регулярно проверяйте возможность восстановления |
Резервные копии бэкапов | Храните хотя бы одну копию вне основного хранилища |
Автоматизация с логами | Отслеживайте ошибки и успехи в логах |
Исключение временных файлов | Не сохраняйте ненужные данные (/tmp , /cache ) |
9. Примеры сценариев резервного копирования
9.1. Резервное копирование сайта и базы данных
# Копируем файлы сайта
rsync -av /var/www/html/ /backup/site/
# Экспортируем базу данных
mysqldump -u root -p database_name > /backup/db/database_$(date +%Y%m%d).sql
# Архивируем всё вместе
tar -czf /backup/full_backup_$(date +%Y%m%d).tar.gz /backup/site/ /backup/db/
9.2. Резервное копирование пользовательских домашних каталогов
rsync -av /home/ /backup/home/
9.3. Резервное копирование конфигурационных файлов
rsync -av /etc/ /backup/etc/
10. Возможные проблемы и их решение
Проблема | Причина | Решение |
---|---|---|
Нет прав на запись | Неправильные разрешения на целевой каталог | Используйте sudo или измените права с помощью chown / chmod |
Не хватает места | Много дубликатов | Используйте --link-dest |
Ошибки при передаче по сети | Плохое соединение | Попробуйте повторить, используйте --partial |
Потеря бэкапа при сбое | Нет второго экземпляра | Реализуйте 3-2-1 правило |
Старые бэкапы не удаляются | Нет политики хранения | Настройте автоматическое удаление старых копий через cron |
11. Альтернативы rsync
Инструмент | Когда использовать |
---|---|
rdiff-backup | Требуется история изменений |
Bacula / Amanda | Корпоративные решения |
Duplicity | Шифрованное резервное копирование в облако |
Timeshift | Простой GUI-инструмент для пользователей Linux |
borgbackup | Поддержка дедупликации и шифрования |
tar + gzip/bzip2/xz | Архивация без сложных зависимостей |