Rsync: „Швейцарский нож“ для бэкапов и синхронизации. От простого копирования до автоматизации

Хватит копировать «вслепую»

Давайте начистоту. Как вы копируете бэкапы на удаленный сервер? «Админ-пожарный» запускает 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 есть один «секрет», о который спотыкаются все новички. Это слэш в конце пути источника.

  1. rsync -a /source/data /dest — Скопирует саму папку data. Результат: /dest/data
  2. rsync -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 юнита:

  1. backup.service: Опишет, как запустить наш скрипт.
  2. 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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх