Хватит копировать «вслепую»
Давайте начистоту. Как вы копируете бэкапы на удаленный сервер? «Админ-пожарный» запускает scp -r /data user@backup-server:/backup/ и уходит. Он не знает, скопировалось ли все. Он не может возобновить передачу, если она оборвется. И, что самое страшное, он каждый раз копирует всё заново, тратя время и забивая канал.
«Архитектор будущего» так не делает. Он использует rsync.
rsync (Remote Sync) — это утилита, которая изменила правила игры. Ее суперсила — дельта-алгоритм. Вместо того чтобы слепо копировать 100 ГБ, rsync сначала «спрашивает» у целевого сервера: «Какие у тебя уже есть части этих файлов?». И передает только измененные куски (дельту). Это не просто копирование; это интеллектуальная синхронизация.
Этот гайд — не просто список команд. Это пошаговый план по превращению rsync из «улучшенного cp» в полностью автоматизированную и пуленепробиваемую систему бэкапирования.
Анатомия «Архитекторского» Rsync
Забудьте о десятках флагов. Для 99% задач вам нужен всего один «магический» набор.
H3: Команда, которую нужно знать: -avzP
Вот как выглядит «золотой стандарт» команды rsync для локальной или удаленной синхронизации:
Bash
# rsync [ФЛАГИ] [ИСТОЧНИК] [НАЗНАЧЕНИЕ]
# Пример: синхронизация локальной папки /var/log
# на удаленный сервер backup.example.com в папку /mnt/backups/logs
rsync -avzP /var/log/ user@backup.example.com:/mnt/backups/logs/
Давайте разберем эти «магические» флаги. Это не просто буквы, это ваша страховка.
a(archive, архив): Это главный флаг. Он заменяет собой 7 других (-rlptgoD) и говоритrsync:r: рекурсивно копировать директории.l: копировать символические ссылки (symlinks).p: сохранять права доступа (permissions). (Критически важно!)t: сохранять время модификации.g: сохранять группу.o: сохранять владельца (owner).D: сохранять файлы устройств и специальные файлы.
-aваш бэкап будет «испорчен». Файлы потеряют своих владельцев и права, и при восстановлении превратятся в нерабочую «кашу».v(verbose, подробно): Показывает, что именно сейчас происходит. Необходим для отладки и чтобы просто быть в курсе процесса.z(compress, сжатие): Включает сжатие данных «на лету» перед отправкой по сети. Если у вас много текстовых файлов (логи, конфиги, код), это значительно ускорит передачу по медленному каналу.P(Progress + partial, прогресс + части): Это любимый флаг «архитектора». Он состоит из двух:--progress: Показывает удобный индикатор выполнения для каждого файла (сколько %, какая скорость).--partial: Это ваш спасатель. Если связь оборвется во время копирования 10 ГБ файла,rsyncне удалит недокачанный кусок. При следующем запуске он «увидит» этот частичный файл и продолжит копирование с места обрыва.scpтак не умеет.
H3: Важный нюанс: Слэш (/) имеет значение!
В rsync есть один «секрет», о который спотыкаются все новички. Это слэш в конце пути источника.
rsync -a /source/data /dest— Скопирует саму папкуdata. Результат:/dest/datarsync -a /source/data/ /dest— Скопирует содержимое папкиdata. Результат:/dest/file1,/dest/file2(внутриdata)
Простое правило: Нужно скопировать содержимое? Ставь слэш в конце источника.
Практика: Автоматизация. От админа к архитектору
«Админ» вводит команду rsync руками. «Архитектор» настраивает ее один раз и забывает. Для этого нам нужен беспарольный доступ.
Шаг 1. Настройка SSH-ключей (Основа всей автоматизации)
Чтобы ваш скрипт бэкапирования мог подключиться к серверу без запроса пароля, мы настроим аутентификацию по SSH-ключам.
На сервере-ИСТОЧНИКЕ (откуда делаем бэкап):
Bash
# 1. Генерируем новую пару ключей (public/private)
# -t ed25519 - это современный и быстрый тип ключа
# Просто нажимайте Enter на все вопросы (не ставьте пароль на ключ для скрипта!)
ssh-keygen -t ed25519
# 2. Копируем наш НОВЫЙ публичный ключ на сервер-НАЗНАЧЕНИЕ
# Эта команда сама найдет нужный файл и безопасно добавит ключ
# в ~/.ssh/authorized_keys на удаленном сервере.
ssh-copy-id user@backup.example.com
Проверка: Попробуйте подключиться к серверу: ssh user@backup.example.com. Если вас пустило в консоль без запроса пароля — вы готовы к автоматизации.
Шаг 2. «Пуленепробиваемый» скрипт бэкапа
Создадим backup.sh на нашем сервере-источнике.
Bash
#!/bin/bash
#
# backup.sh
# Скрипт инкрементального бэкапа с помощью rsync
#
# --- Настройки ---
# Папки, которые нужно забэкапить (через пробел)
SOURCE_DIRS="/etc /var/www /home/user/projects"
# Куда бэкапить
DEST_HOST="user@backup.example.com"
DEST_DIR="/mnt/backups/my-server/"
# Файл лога
LOG_FILE="/var/log/rsync_backup.log"
# --- Конец настроек ---
# Добавляем в лог метку времени начала
echo "---" >> $LOG_FILE
echo "Backup started at: $(date)" >> $LOG_FILE
# Запускаем rsync для каждой папки
for DIR in $SOURCE_DIRS
do
echo "Syncing $DIR..." >> $LOG_FILE
rsync -avzP \
--delete \
-e "ssh" \
$DIR \
${DEST_HOST}:${DEST_DIR} >> $LOG_FILE 2>&1
# 2>&1 - перенаправляет и STDOUT, и STDERR в наш лог-файл
done
echo "Backup finished at: $(date)" >> $LOG_FILE
echo "---" >> $LOG_FILE
Разбор опций в скрипте:
-e "ssh": Явно указываем, что нужно использовать SSH (хотя это и так по умолчанию).--delete: ОПАСНЫЙ, НО ВАЖНЫЙ ФЛАГ! Он говоритrsync: «Если файл был удален в источнике, удали его и в бэкапе«. Это создает зеркало. Используйте с осторожностью! Если вы хотите хранить все версии, просто удалите этот флаг.
Шаг 3. Планирование (Забудьте про Cron)
Скрипт готов (chmod +x backup.sh). «Админ» добавил бы его в crontab -e. «Архитектор» (который читал наши прошлые статьи) создаст два systemd юнита:
backup.service: Опишет, как запустить наш скрипт.backup.timer: Опишет, когда его запускать (например,OnCalendar=daily).
Это даст вам полное логирование через journalctl -u backup.service, управление зависимостями и надежный запуск пропущенных задач.
Вы не просто «копируете», вы «синхронизируете»
Мы прошли путь от хаотичного scp до интеллектуальной, автоматизированной системы бэкапирования. rsync — это не просто команда. Это философия.
Философия экономии ресурсов, надежности (с ssh-ключами) и возобновляемости (с флагом -P). Освоив rsync, вы экономите не только трафик и место на диске. Вы экономите свое время — самый ценный ресурс «архитектора».
Теги: #rsync #linux #bash #automation #backup #sysadmin #ssh #scripting
Хотите стать архитектором будущего, а не просто админом? Эта статья — лишь верхушка айсберга. В нашем Telegram-канале «Admin Future» мы каждый день публикуем системные гайды, готовые скрипты, AI-лайфхаки и чеклисты, которые не найти в Google. Мы не просто постим команды — мы строим библиотеку знаний для тех, кто хочет расти от админа до архитектора. Подписывайтесь и становитесь экспертом: Admin Future