Rsync – это мощная консольная утилита и служба, предназначенная для быстрого копирования и синхронизации файлов. Её главное преимущество – высокая скорость сравнения директорий, даже если они содержат огромное количество файлов. Например, если вам нужно синхронизировать два удалённых хранилища с миллионами файлов, rsync справится с этой задачей лучше многих других инструментов. Однако у него есть один существенный недостаток – он работает в однопоточном режиме.
Лично я часто использую rsync для создания бэкапов, особенно когда нужно копировать файлы “как есть”, без упаковки, сжатия или дедупликации. В этой статье я хочу поделиться некоторыми полезными ключами rsync, которые, возможно, не все знают и используют.
🔴 Ключи --backup
и --backup-dir
При синхронизации источника и приёмника rsync может привести приёмник в точное соответствие с источником. Однако в случае с бэкапами часто требуется сохранить изменённые файлы, а не просто перезаписать их. Для этого можно использовать ключи --backup
и --backup-dir
.
Пример команды:
/usr/bin/rsync -av --progress --delete back_user@10.20.5.22:/var/lib/pgpro/backup/ /mnt/data/backup/bases --backup --backup-dir=/mnt/data/backup/bases_increment/`date +%Y-%m-%d`/ >> /var/log/rsync/1Csrv-`date +%Y-%m-%d`.log
Что происходит:
- Все свежие дампы базы из папки
/var/lib/pgpro/backup/
сервера10.20.5.22
копируются в папку с бэкапами/mnt/data/backup/bases
. - Старые дампы, которые были скопированы ранее, перемещаются в папку
/mnt/data/backup/bases_increment/2025-02-13/
(дата автоматически подставляется). - Лог выполнения команды сохраняется в файл
/var/log/rsync/1Csrv-2025-02-13.log
.
Пример лога:
2025-02-13_05-29 Start backup 1Csrv
receiving incremental file list
deleting 2025-02-10_05-01-zup.sql.gz
deleting 2025-02-10_05-01-buh.sql.gz
2025-02-13_05-01-buh.sql.gz
1,380,560,010 100% 1.03MB/s 0:21:22 (xfr#1, to-chk=20/62)
2025-02-13_05-01-zup.sql.gz
444,272,983 100% 1.63MB/s 0:04:19 (xfr#2, to-chk=19/62)
Преимущества:
- Все изменения фиксируются, и старые файлы не теряются.
- Удобно отслеживать изменения в хранилищах. Например, если файлы были изменены или удалены, они сохраняются в отдельной папке.
🟡 Ключ --ignore-existing
Этот ключ полезен, когда нужно восстановить файлы из бэкапа, не перезаписывая существующие файлы в источнике. Например, если кто-то случайно удалил несколько файлов, их можно восстановить, не затрагивая остальные.
Пример команды:
/usr/bin/rsync -av --ignore-existing back_user@10.30.7.5:/mnt/backup/www/ /var/www/
Что происходит:
- Восстанавливаются только те файлы, которых нет в целевой папке
/var/www/
. - Существующие файлы остаются без изменений.
🟢 Ключ --update
Этот ключ позволяет обновлять только те файлы в целевой папке, которые старше соответствующих файлов в источнике.
Пример команды:
/usr/bin/rsync -av --update back_user@10.30.7.5:/mnt/backup/www/ /var/www/
Что происходит:
- Файлы в целевой папке обновляются только в том случае, если они старше файлов в источнике.
- Если файлы отсутствуют в целевой папке, они копируются из источника.
Преимущества:
- Удобно использовать, когда нужно собрать самые свежие версии файлов из разных источников.
⚫️ Ключ --dry-run
Этот ключ позволяет выполнить тестовый прогон команды без реального копирования или удаления файлов. Он полезен для отладки и проверки команд перед их выполнением.
Пример команды:
/usr/bin/rsync -av --dry-run --delete back_user@10.30.7.5:/mnt/backup/www/ /var/www/
Что происходит:
- Команда выполняется в тестовом режиме, показывая, какие файлы будут скопированы или удалены.
- Реальные изменения не вносятся.
Преимущества:
- Позволяет избежать ошибок, особенно при использовании ключа
--delete
.
Заключение
Rsync – это мощный инструмент для синхронизации и резервного копирования файлов. Его гибкость и широкие возможности делают его незаменимым в арсенале системного администратора. Использование ключей, таких как --backup
, --ignore-existing
, --update
и --dry-run
, позволяет адаптировать rsync под конкретные задачи и минимизировать риски потери данных.
Если вы нашли эту статью полезной, не забудьте сохранить её в закладки и поставить лайк! 😊