Я лично чаще всего для бэкапов использую преимущественно голый rsync, но не всегда и не везде. Если нужно обязательно копировать файлы как есть, без упаковки, сжатия, дедупликации, то в этом случае выберу его. По 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/ и будут там лежать, пока мы их не удалим, к примеру, через find. Глубину хранения сами выбираете, когда настраиваете очистку.Я добавил ключ
--progress, чтобы вывод, сохранённый в файл, содержал в том числе информацию о средней скорости и времени копирования каждого файла. Если у вас много мелких файлов, лучше этот ключ убрать. В логе /var/log/rsync/1Csrv-2025-02-13.log я увижу следующее:2025-02-13_05-29 Start backup 1Csrvreceiving incremental file listdeleting 2025-02-10_05-01-zup.sql.gzdeleting 2025-02-10_05-01-buh.sql.gz2025-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)Будут перечислены все скопированные и удалённые (т.е. перемещённые в backup-dir папку) дампы.
С помощью такого подхода очень удобно отслеживать изменения в хранилищах. Например, взломали у вас в какой-то день сайт и заменили несколько файлов. Все эти файлы будут аккуратно сложены в отдельную папочку во время очередного бэкапа после взлома.
🟡 --ignore-existing
Ключ полезен, когда вам надо из бэкапа накатить в источник файлы, не трогая там те, что уже есть, даже если изменились. Накатываем только то, чего не хватает, без какой-либо перезаписи. То есть кто-то случайно или специально накосячил и удалил несколько нужных файлов, которые нам надо вернуть, не трогая всё остальное.
# /usr/bin/rsync -av --ignore-existing back_user@10.30.7.5:/mnt/backup/www/ /var/www/🟢 --update
Используется для того, чтобы обновлять только те файлы в целевой папке, которые старше соответствующих файлов в источнике.
# /usr/bin/rsync -av --update back_user@10.30.7.5:/mnt/backup/www/ /var/www/Если в целевой папке файлов из источника вообще нет, то они тоже будут скопированы, как и с ключом
--ignore-existing. Ключ удобен, когда ты из разных источников склеиваешь данные и хочешь получить в итоге самые свежие версии одних и тех же файлов.⚫️ --dry-run
Привычное название ключа, который позволяет выполнить команду и посмотреть результат без реального выполнения. То есть выполняется тестовый прогон. Рекомендую использовать, когда отлаживаете команду. Спасёт, если с ключом
--delete перепутаете источник и приёмник. Мигом удалите все файлы в источнике, если приёмник пустой.❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#rsync
