- Задача по настройке инкрементального бэкапа
- 1) Подготовка NAS (DSM)
- 2) Подготовка CentOS
- 3) Список исключений (что не бэкапить)
- 4) Базовая проверка rsync (без снапшотов)
- 5) Инкрементальные снапшоты с —link-dest
- 6) Планирование по cron (CentOS без systemd)
- 7) Дамп БД перед бэкапом (если есть MySQL/MariaDB)
- 8) Как восстановить
- 9) Альтернатива: rsync на NAS без SSH (rsync‑daemon)
- 10) Замечания по безопасности и совместимости
- Готово
Надёжнее и проще всего сделать инкрементальные бэкапы с CentOS 6,7 → Synology DSM 6.2 через rsync по SSH с «снимками» (snapshot) на стороне NAS. Пошаговая инструкция с готовыми командами и скриптом.
Задача по настройке инкрементального бэкапа
- Полный первый бэкап, затем инкрементальные (копируются только изменения).
- На NAS — папка со снапшотами по датам:
…/snapshots/2025-08-27_02-30,…/snapshots/2025-08-28_02-30, и т. д. - Ссылка
latestвсегда указывает на свежий снимок. - Хранение N последних снимков (автоматическая ротация).
1) Подготовка NAS (DSM)
- Создайте общую папку
Панель управления → Общая папка → Создать
Имя:backups(пусть будет/volume1/backups). - Создайте пользователя для бэкапов
Панель управления → Пользователь → Создать
Пользователь:backup(или своё имя), права RW на общую папкуbackups. При желании задайте квоту. - Включите SSH
Панель управления → Терминал & SNMP → Включить службу SSH. Порт по умолчанию 22 оставить. - (Рекомендуется) Включите домашние папки пользователей
Панель управления → Пользователь → Дополнительно → Включить домашнюю папку пользователя. Это упростит вход по SSH‑ключу.
Примечание: на Synology путь к общей папке будет вида
/volume1/backups. Для старых моделей (DS411j) обычно один том —volume1.
2) Подготовка CentOS
- Установите нужные пакеты:
sudo yum install -y rsync openssh-clients
- Сгенерируйте SSH‑ключ (CentOS 6 старый, используем RSA):
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
- Скопируйте ключ на NAS (замените IP NAS):
ssh-copy-id backup@192.168.1.50
Если ssh-copy-id нет:
cat ~/.ssh/id_rsa.pub | ssh backup@192.168.1.50 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
- Проверьте вход по ключу:
ssh backup@192.168.1.50 "echo ok"
- Подготовьте каталог для снимков на NAS (один раз):
ssh backup@192.168.1.50 "mkdir -p /volume1/backups/centos6/snapshots"
3) Список исключений (что не бэкапить)
Создайте на CentOS файл /root/backup/excludes.txt (папку тоже создайте):
sudo mkdir -p /root/backup
sudo tee /root/backup/excludes.txt >/dev/null <<'EOF'
/proc/*
/sys/*
//dev/*
/run/*
/tmp/*
/mnt/*
/media/*
/lost+found
/var/cache/*
/var/tmp/*
/var/run/*
/swapfile
/home/*/.cache/*
EOF
При необходимости добавьте большие/временные каталоги вашего окружения (например, кэши приложений, логи-архивы и т. д.).
Базы данных нельзя надёжно копировать «горячими» файлами — делайте дампы и включайте их в бэкап (пример ниже).
4) Базовая проверка rsync (без снапшотов)
Однократный тест «как есть» (без удаления на стороне назначения, без снапшотов):
rsync -aHAX --numeric-ids --dry-run \
--exclude-from=/root/backup/excludes.txt \
/etc /home /root /var/www /opt \
backup@192.168.1.50:/volume1/backups/centos6/test-run
Уберите --dry-run, если список вас устраивает.
Ключи:
-a— права/время/симлинки/рекурсивно;-H— хардлинки;-A— ACL;-X— xattrs;--numeric-ids— сохранять UID/GID числами.
Если CentOS ругается на-A/-X(редко), временно уберите их.
5) Инкрементальные снапшоты с --link-dest
Создайте скрипт /root/backup/backup_to_nas.sh:
#!/bin/bash
set -e
NAS_IP="192.168.1.50"
DEST_USER="backup"
DEST_BASE="/volume1/backups/centos6"
SNAP_DIR="${DEST_BASE}/snapshots"
STAMP="$(date +%F_%H-%M)" # например, 2025-08-27_02-30
DEST_SNAP="${SNAP_DIR}/${STAMP}"
EXCLUDES="/root/backup/excludes.txt"
# Какие каталоги бэкапим (адаптируйте под себя):
SRC_LIST=(
/etc
/home
/root
/var/www
/opt
# добавьте сюда каталог с дампами БД, если делаете их
)
SSH="ssh -o BatchMode=yes"
# Узнать предыдущий снимок (может отсутствовать на первом запуске)
LAST_SNAP="$($SSH ${DEST_USER}@${NAS_IP} "ls -1d ${SNAP_DIR}/20* 2>/dev/null | sort | tail -n 1" || true)"
# Создать временную папку для текущего снапшота
$SSH ${DEST_USER}@${NAS_IP} "mkdir -p '${DEST_SNAP}.incomplete'"
# Собираем опции rsync
RSYNC_OPTS=(-aHAX --numeric-ids --delete --delete-excluded --partial --human-readable --exclude-from="$EXCLUDES")
if [ -n "$LAST_SNAP" ]; then
RSYNC_OPTS+=("--link-dest=$LAST_SNAP")
fi
# Прогоним rsync
rsync "${RSYNC_OPTS[@]}" "${SRC_LIST[@]}" "${DEST_USER}@${NAS_IP}":"${DEST_SNAP}.incomplete/"
# Атомарно переименуем и обновим ссылку latest
$SSH ${DEST_USER}@${NAS_IP} "mv '${DEST_SNAP}.incomplete' '${DEST_SNAP}' && ln -sfn '${DEST_SNAP}' '${DEST_BASE}/latest'"
# Ротация: хранить 14 последних снимков
KEEP=14
$SSH ${DEST_USER}@${NAS_IP} "cd '${SNAP_DIR}' && ls -1d 20* 2>/dev/null | sort | head -n -${KEEP} | xargs -r rm -rf"
echo "Backup OK: ${DEST_SNAP}"
Разрешения и запуск:
chmod +x /root/backup/backup_to_nas.sh
/root/backup/backup_to_nas.sh
Если всё прошло без ошибок — отлично, у вас появился первый снимок.
6) Планирование по cron (CentOS без systemd)
Откройте crontab от root:
crontab -e
Добавьте, например, ежедневный бэкап в 02:30:
30 2 * * * /root/backup/backup_to_nas.sh >/var/log/backup_to_nas.log 2>&1
7) Дамп БД перед бэкапом (если есть MySQL/MariaDB)
Добавьте в скрипт перед вызовом rsync блок дампа (и включите папку дампов в SRC_LIST):
DUMP_DIR="/var/backups/mysql"
mkdir -p "$DUMP_DIR"
find "$DUMP_DIR" -type f -mtime +7 -delete
mysqldump --all-databases --single-transaction --routines --triggers \
| gzip -c > "${DUMP_DIR}/all-$(date +%F_%H-%M).sql.gz"
8) Как восстановить
- Посмотреть доступные снимки на NAS:
ssh backup@192.168.1.50 "ls -1 /volume1/backups/centos6/snapshots"
- Восстановить, например,
/etcиз конкретного снапшота:
rsync -aHAX --numeric-ids \
backup@192.168.1.50:/volume1/backups/centos6/snapshots/2025-08-27_02-30/etc/ \
/etc/
- Или быстро из последнего:
rsync -aHAX --numeric-ids \
backup@192.168.1.50:/volume1/backups/centos6/latest/etc/ \
/etc/
Для целиком «голого» восстановления системы обычно удобнее загрузиться с LiveCD, смонтировать диск и раскатать нужные каталоги (домашние, конфиги, веб‑проекты и т. п.).
9) Альтернатива: rsync на NAS без SSH (rsync‑daemon)
Если SSH не подходит, можно включить на DSM службу rsync и бэкапить на модуль rsync://…:
- Панель управления → Службы файлов → вкладка rsync → Включить rsync‑службу (и при необходимости «аккаунты rsync»).
- На CentOS команда будет вида:
rsync -aHAX --delete --exclude-from=/root/backup/excludes.txt \
/etc /home /root /var/www /opt \
rsync://backup@192.168.1.50/ИмяМодуля/centos6/
Минусы: без SSH‑шифрования; тоньше настройка на DSM. Плюсы: чуть меньше накладных расходов.
10) Замечания по безопасности и совместимости
- CentOS 6 устарела (EOL). Обновляйте машину как минимум до CentOS 7/Alma/Rocky при первой возможности.
- На старых OpenSSH могут быть нюансы алгоритмов. Используйте RSA‑ключ 4096 (как выше). Если ругается на хост‑ключ, удалите прежнюю запись в
~/.ssh/known_hostsи переподтвердите. - Пользователю
backupна NAS оставьте минимальные права — только RW на папкуbackups. - Можно дополнительно «прибить» ключ в
authorized_keysопциями ограничения (например, по IP и без интерактивной оболочки), если требуется жёсткая политика.
Пример (на NAS, в ~/.ssh/authorized_keys, одна строка перед ключом):
from="192.168.1.10",no-pty,no-agent-forwarding,no-X11-forwarding,no-port-forwarding ssh-rsa AAAA… ваш_публичный_ключ
Готово
После выполнения шагов у вас будет автоматический инкрементальный бэкап CentOS 6 на Synology DS411j (DSM 6.2) с хранением нескольких «снимков» и быстрым восстановлением. Если хотите, могу адаптировать скрипт под ваши каталоги/объёмы и настроить более тонкую ротацию (по дням/неделям/месяцам).