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 | Архивация без сложных зависимостей |