Rsync настройка freenas – Как грамотно организовать создание бэкапов с пользовательских компьютеров на FreeNas 9.3?

FreeNAS (backup) — организация бэкапа

FreeNAS — свободная операционная система для сетевого хранилища (англ. Network-Attached Storage). Сделаем на основе её систему резервного копирования.

[1]
Задача: организовать бэкап используя бесплатное ПО.
Нам понадобится:
1. скачать с сайта freenas.org дистрибутив версии 0.7.2, так как в нём есть rsync. Я использовал FreeNAS-i386-LiveCD-0.7.2.5543.iso
2. Обычный ПК с двумя винтами, один из которых лучше серверного типа. На одном разметим сам FreeNAS, на друром соответственно бэкапы.
После установки появится окно авторизации, по умолчанию используются

логин: admin
пароль: freenas

[2]

Сделаем первоначальные настройки: System > General

[3]

Для безопасности советую сменить имя и протокол.

[4]

После изменений Вас попросят перезагрузиться. Соглашаемся и ждем пару минут, пока FreeNAS заново поднимется. Теперь он будет доступен по адресу:

https://192.168.15.53/

У вас он свой, измениться только http на https
Меняем пароль на свой: System > General > Password

[5]

Добавляем в систему наш второй диск: Disks > Management

[6]

Нажимаем +
В параметре «Disk» выбираем наш диск и в «Description» называем его «backup». Все остальное по умолчанию.
в самом низу жмем «ADD»

[7]

Чтобы применить, жмем: «Apply change»

[8]

Все наши данный будем шифровать. Disks > Encryption > жмём +
Выбираем:
1. диск, у нас он в скобках (backup).
2. Алгоритм шифрования, я выбрал AES
3. Длину ключа, советую побольше 256
Вписываем ключевую фразу
Ставим галочку и жмём «ADD».

[9]

Если все сделали правильно, то ниже будет соответствующая надпись.

Command output:
Encrypting '/dev/ad6'... Please wait!
Calculating number of iterations...
Done, using 82413 iterations.
Metadata value stored on /dev/ad6.
Done.
Attaching provider '/dev/ad6'.
Attached to /dev/ad6.
Done.

[10]

Отформатируем зашифрованный диск: Disks > Format
По умолчанию предлагается в метке тома использовать USF, согласимся.

Жмём «Format disk»

[11]

Если вы соблюдали инструкцию, то увидите процесс форматирования

[12]

Придется подождать, время зависит от объема диска.
По завершении форматирования в самом конце увидите надпись

3904275808, 3904652160, 3905028512, 3905404864, 3905781216, 3906157568,
 3906533920, 3906910272
kern.geom.debugflags: 16 -> 0
Done!

самое главное здесь увидеть «Done!»
Теперь нам надо смонтировать отформатированный диск: Disks > Mount Point > жмём +

[13]

Выбираем диск, указываем файловую систему.

RSYNC Часть 3 - внутри NAS, неочевидные применения

Это окончание про RSYNC, см начало и продолжение
Бекап через RSYNC. Часть 1 - сервер
Бекап через RSYNC. Часть 2 - клиент
Сегодня об использовании rsync для переноса данных внутри NAS. И зачем такие хитрости.

Кроме вкладок "Клиент" и "Сервер" в nas4free реализована вкладка "Локально", Services|Rsync|Local. Очевидно, она предназначена для переноса данных внутри NAS.

Для включения - жмём серый плюс внизу-справа, открывается диалог, его верхняя часть
rsync_local_1
Source share - откуда копируем
Destination share - куда
Who - под каким пользователем
Sync time - cron таблица. У меня задано в 02:02 каждый день недели, каждый день, каждый месяц. Вы можете задать произвольный график - каждый час, если пятница пришлась на 13-е 🙂
Description - необязательная памятка - что это такое.
rsync_local_2
Расширеные опции, значения
Recursive - включая подпапки
Times - сохранять время изменения файлов

Compress - сжимать при пересылке
Archive - архивный режим. Прим. эквивалент -rlptgoD (no -H,-A,-X) - рекурсивно по подпапкам (r), симлинки как симлинки (l), сохранять *nix права доступа (p), сохранять время изменения файлов (t), сохранять информацию о владельце файла (o) и его группе (g), сохранять специальные файлы и файлы-устройства. Не сохранять ACL, хардлинки и расширенные атрибуты.
Delete - стирать на принимающей стороне файлы, которых нет на передающей
Quiet - подавлять сообщения, кроме сообщений об ошибках
Preserve permissions и extra attributes - сохранять права доступа и атрибуты файлов

IMHO по большому счёту главное - не ставить галочку против Delete. Остальное менее важно. Я расставил опции как указано на рисунке.

Кнопки немного особенные - есть обычные Save и Cancel, то есть Сохранить и Отменить. По окончании настройки стоит сохранить. А потом можно войти диалог снова, нажав на гаечный ключ и выполнить немедленно это задание (Execute now)

Ну и, напоследок, зачем такие хитрости - запускать rsync внутри одного NAS, когда можно просто скопировать? Я придумал пока два полезных применения.

Во-первых, я предпочитаю качать контент на выделенный диск, смотреть и большую часть удалять. А существенно меньшую - переносить на raidz массив. Копирование десятков гигабайт данных - процесс небыстрый. Поэтому я организовал папку-источник на диске для скачек и папку-приёмник на массиве. Достойное хранения преносится в папку источник, ночью копируется в папку-приёмник. Потом в удобное время я могу разложить по вкусу файлы из папки-приёмника и не забыть стереть файлы в папке-источнике.

Во-вторых, не все домашние продвинуты в компьютерной области, то есть в принципе могут наломать дров. Поэтому я расшариваю по SMB определённые папки, куда они могут с со смартфонов и пр. кидать картинки-видео. И смотреть тут же на Дюне на большом экране. А ночью в фоновом режиме всё это бекапится. Если исходные файлы ненароком стереть - автоматические копии останутся.

Как установить и настроить Rsync

Wiki : Rsync (англ. Remote Synchronization) — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодирование данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.

Rsync является общепризнанным программным обеспечением, которое работает надежно и быстро. Бэкапленд использует его для оптимального механизма создания резервных копий, а так же по причине его массовой распространенности на серверах, что означает, что вы сможете работать с нашей системой без каких-либо настроек на вашей стороне. Но из каждого правила существуют исключения, поэтому ниже мы предлагаем подробную инструкцию как установить и настроить Rsync на серверах с операционными системами Debian, Ubuntu, Centos и FreeBSD.

Проверка:

Проверьте установлен ли rsync:

выполните команду в ssh: whereis rsync если ответом будет /usr/local/bin/rsync или /usr/bin/rsync то rsync у вас есть, вам его устанавливать не нужно.

Так же можете проверить, просто запустив команду в ssh: rsync или /usr/local/bin/rsync или /usr/bin/rsync если будет ответ, а не ошибка, тогда вам его устанавливать не нужно.

Установка:

Описанные далее установка и настройка rsync возможны, только если у Вас есть права root. Если таких прав нет, напишите Вашему системному администратору или в техническую поддержку хостинга с просьбой установить rsync.

Для FreeBSD:cd /usr/ports/net/rsync
make install

Для Linux Debian и Ubuntu:apt-get install rsync

Для Centos:yum install -y rsync

Настройка:

Настраивать rsync нужно только в одном случае, если Вы хотите, чтобы наша система создавала резервные копии не через SSH, а через демон rsyncd.

Через файл конфигурации настройки rsyncd вы можете:

  • Задать своего пользователя и пароль
  • Разрешить вход к вам только с определенного IP/хоста (наш хост при заказе мы вам высылаем)
  • Разрешить доступ к конкретным директориям и файлам на вашей системе

Настройка rsync для FreeBSD:cd /usr/local/etc/

cоздаем файл приветствия (не обязательно)echo "Hello from rsync server" > rsyncd.motd
echo "Server Adress: My SuperHost 1.1.1.1" >> rsyncd.motd

создаем файл c именем пользователя и паролемecho "backup:ПАРОЛЬ" > rsyncd.scrt
chmod 0600 /usr/local/etc/rsyncd.scrt

где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.

Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.

Далее создаем основной конфиг rsyncd.conf

1) cd /usr/local/etc/

2) mv rsyncd.conf rsync.original

3)
cat << EOF >> /usr/local/etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
motd file = /usr/local/etc/rsyncd.motd

uid = root
gid = wheel
max connection = 4

auth users = backup

secrets file = /usr/local/etc/rsyncd.scrt

[root]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF

4) /usr/local/etc/rc.d/rsyncd restart

Теперь настраиваем так, чтобы после перезагрузки сервера у вас запускался демон rsyncd

Делаем отступ с переносом на следующую строку echo "" >> /etc/rc.conf

Добавлем разрешение запускать при старте echo 'rsyncd_enable="YES"' >> /etc/rc.conf

Настройка rsync для Linux Debian и Ubuntu:

Находите файл /etc/default/rsync
В нем находите строку:
RSYNC_ENABLE=false
и меняете на:
RSYNC_ENABLE=true

Таким образом мы разрешаем при загрузке сервера запустить демон rsyncd

Далее создадим папку для наших файлов:mkdir /etc/rsync/
cd /etc/rsync/

создаем файл приветствия (не обязательно)echo "Hello from rsync server" > rsyncd.motd
echo "Server Adress: My SuperHost 1.1.1.1" >> rsyncd.motd

создаем файл c именем пользователя и паролемecho "backup:ПАРОЛЬ" > rsyncd.scrt
chmod 0600 /etc/rsync/rsyncd.scrt

где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.

Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.

Далее создаем основной конфиг rsyncd.conf cd /etc/ Обратите внимание на то, что файл rsyncd.conf должен быть расположен в папке /etc/

mv rsyncd.conf rsyncd.old делаем так на всякий случай, вдруг файл такой уже есть

cat << EOF >> /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid

motd file = /etc/rsync/rsyncd.motd

uid = root
gid = root
max connection = 4

auth users = backup
secrets file = /etc/rsync/rsyncd.scrt

[root]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF

/etc/init.d/rsyncd restart

Настройка rsync для Centos 6:

Устанавливаем xinetd (нужен для пуска rsync сервера): yum install -y xinetd

Находите файл /etc/xinetd.d/rsync, в нем находите строку:
disable = yes
и меняете на:
disable = no

Перезагружаем сервис xinetd:/etc/init.d/xinetd restart

Добавляем xinetd в автозапуск:chkconfig xinetd on

Конфиг создаем такой же как и для Centos 7 (смотри ниже).

Настройка rsync для Centos 7:

Включаем в автозагрузкуsystemctl enable rsyncd.service

Запускаем rsyncd демонsystemctl start rsyncd.service

Далее создадим папку для наших файлов:mkdir /etc/rsync/
cd /etc/rsync/

создаем файл приветствия (не обязательно)echo "Hello from rsync server" > rsyncd.motd
echo "Server Adress: My SuperHost 1.1.1.1" >> rsyncd.motd

создаем файл c именем пользователя и паролемecho "backup:ПАРОЛЬ" > rsyncd.scrt
chmod 0600 /etc/rsync/rsyncd.scrt

где ПАРОЛЬ тот, что мы выдаем вам при создании в панели управления задания на резервное копирование. В дальнейшем вы можете изменить пароль на свой в файле rsyncd.scrt и на сервере хранения резервных копий в файле /var/www/rc-******/data/rsyncd.pass, где rc-****** ваш логин на сервер с бэкапами.

Внимание! Если пароли на вашем сервере и сервере с бэкапами не совпадут, резервные копии создаваться не будут.

Далее создаем основной конфиг rsyncd.conf

cd /etc/Обратите внимание на то, что файл rsyncd.conf должен быть расположен в папке /etc/

mv rsyncd.conf rsyncd.oldделаем так на всякий случай, вдруг файл такой уже есть.

cat << EOF >> /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid

motd file = /etc/rsync/rsyncd.motd

uid = root
gid = root
max connection = 4

auth users = backup
secrets file = /etc/rsync/rsyncd.scrt

[bkpl]
path = /
read only = yes
host allow = ssh.bkp177.backupland.com
EOF

Применяем настройки
для Centos 7systemctl restart rsyncd.serviceдля Centos 6service xinetd restart

Если у вас на сервере установлен Firewall вам нужно разрешить входящие соединение на порт 873

Описание полей файла конфигурации rsyncd.conf

Текст конфигурации:
pid file = /var/run/rsyncd.pid#pid файл хранящий ID процесса
motd file = /usr/local/etc/rsyncd.motd#файл приветствия
uid = root#работа под правами этого пользователя*
gid = wheel#работа с правами этой группы*
max connection = 4#кол-во коннектов со стороны сервиса
auth users = backup#логин пользователя для доступа извне
secrets file = /usr/local/etc/rsyncd.scrt#файл с логином и паролем для доступа извне
[bkpl]#секция, в которой описано что можно делать
path = /#Какую папку можно бэкапить
read only = yes#Разрешено только бэкапить, восстановить нельзя будет
host allow = ssh.bkp177.backupland.com#сервер, где будут храниться резервные копии

Внимание! Вместо ssh.bkp177.backupland.com необходимо указать тот хост, который Вы получили при регистрации. Аналогично, путь /usr/local/etc/ зависит от того, какая установлена операционная система.

* Если вы не собираетесь резервировать весь сервер, тогда права root вы можете заменить на права пользователя, файлы которого вы будете бэкапить.

Организация backup-сервера. Linux, ZFS и rsync / Habr

TL;DR:
Статья о настройке бекапа линуксовых серверов. В качестве хранилища используется раздел ZFS с включенными дедубликацией и компрессией. Ежедневно делаются снапшоты, которые сохраняются в течение недели (7 штук). Ежемесячные снапшоты хранятся в течение года (еще 12 штук). В качестве транспорта выступает rsync: на сервере он запущен демоном, на клиентах он запускается из crontab.

Так получилось, что у меня есть пара серверов, на которых под KVM живут виртуальные машины. Хотелось бекапить образы этих машин в сеть, но так, чтобы выполнялись условия:
  • Хранить все бекапы за последнюю неделю.
  • Хранить в течении года ежемесячные бекапы.
  • Никаких сторонних бекап-агентов. На клиентах только стандартное и проверенное поколениями админов ПО.
  • Экономно расходовать место в хранилище. Желательна компрессия и дедубликация данных.
  • Все файлы должны быть доступны без дополнительных инструментов и оболочек. Идеальный вариант: каждый бекап в отдельном каталоге.

Можно ли всё это совместить? Да, и очень просто.

Все компьютеры, о которых идет речь в этой статье, являются серверами. Но как-то глупо и длинно делить их на “сервер, который хранит бекапы” и “сервер, бекапы которого хранит сервер, который хранит бекапы”. Поэтому первый я буду называть просто сервером, а второй уже начал называть клиентом.

1. ZFS с компрессией и дедубликацией

Наиболее привычная для меня ОС – Linux. Всё то же самое без особых изменений должно подойти и к Solaris, и к FreeBSD, в которых ZFS есть давно и что называется “из коробки”. Но Linux мне ближе и роднее, а проект по портированию на него ZFS выглядит уже достаточно зрелым. За год экспериментов у меня не было с ним заметных проблем. Поэтому поставил на сервер Debian Wheezy, подключил официальный репозитарий проекта и установил нужные пакеты.

Создал пул, указав что zfs у меня будет на /dev/md1 и что монтировать эту файловую систему я хочу к каталогу /mnt/backup:

# zpool create backup -m /mnt/backup /dev/md1

По имени устройства /dev/md1 можно заметить, что я использую линуксовый software raid. Да, я знаю, что у ZFS есть свой способ создавать зеркала. Но поскольку на этой машине уже есть одно зеркало (для корневого раздела) и оно сделано штатным mdadm, то и для второго зеркала я предпочту использовать его же.

Включил дедубликацию и компрессию, сделал видимым каталог со снапшотами:

# zfs set dedup=on backup
# zfs set compression=on backup
# zfs set snapdir=visible backup

Положил в /usr/local/bin скрипт для создания снапшотов:

#!/bin/bash

export LANG=C
ZPOOL='backup'

# Храним все снапшоты 7 дней
# снапшот на четвертое число каждого месяца храним год

NOWDATE=`date +20%g-%m-%d` # дата формата ГГГГ-ММ-ДД
OLDDAY=`date -d -7days +%e`

if [ $OLDDAY -eq '4' ]
then
  OLDDATE=`date  -d -1year-7days +20%g-%m-%d` # получаем дату -1 год и на7 дней
else
  OLDDATE=`date  -d -7days +20%g-%m-%d` # получаем дату -7 дней
fi

/sbin/zfs snapshot [email protected]$NOWDATE
/sbin/zfs destroy [email protected]$OLDDATE 2>/dev/null

Этот скрипт добавил в crontab для ежедневного запуска. Чтобы содержимое снапшота соответствовало его дате, скрипт лучше запускать ближе к концу суток. Например, в 23:55.

Четвертое число месяца выбрано почти случайно. Запускал я всё этого третьего августа и хотелось поскорее сделать бекап, который будет храниться год. Следующий день был четвертым.

Снапшоты будут сохраняться в каталоге /mnt/backup/.zfs/snapshot. Каждый снапшот – отдельный каталог с именем в виде даты на момент создания этого снапшота. Внутри снапшота полная копия каталога /mnt/backup в том виде, в котором он был в этот момент.

2. Rsync на сервере

Традиционно rsync настраивают для работы поверх ssh. На клиентах настраивается авторизация по ключам (и без пароля), а эти ключи складываются на бекап-сервер. Сервер ходит по ssh на клиентов и забирает с них файлы. Преимущество этого подхода – шифрование трафика. Но мне не нравится идея с беспарольным входом по ssh (особенно в свете последних уязвимостей в bash). Так же мне не нравится идея инициировать бекап со стороны сервера: иногда перед бекапом на клиенте хочется выполнить какой-нибудь скрипт (например, сбросить дамп mysql), и только после завершения этого скрипта начинать бекап. Поэтому мой выбор – rsync, запущенный демоном на сервере и запускаемый из crontab на клиентах.

Поставил на сервер rsync (штатный, из репозитария), и чтобы он запускался при старте системы, написал в /etc/default/rsync:

RSYNC_ENABLE=true

Создал на сервере /etc/rsyncd.conf такого содержания:

uid = nobody
gid = nogroup
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid

[kvm01]
path = /mnt/backup/kvm01
comment = KVM01 backups
hosts allow = 192.168.xxx.xxx
hosts deny = *
read only = no

[kvm02]
path = /mnt/backup/kvm02
comment = KVM02 backups
hosts allow = 192.168.xxx.yyy
hosts deny = *
read only = no

192.168.xxx.xxx и 192.168.xxx.yyy – это адреса тех серверов, которые будут бекапиться. Зовут их kvm01 и kvm02. Их файлы будут лежать в /mnt/backup/kvm01 и /mnt/backup/kvm02. Поэтому:

# mkdir /mnt/backup/kvm01
# mkdir /mnt/backup/kvm02
# chown nobody:nogroup /mnt/backup/kvm01
# chown nobody:nogroup /mnt/backup/kvm02

Запустил rsync:

# /etc/init.d/rsync start
3. Rsync на клиентах

Минимально необходимый скрипт для копирования файлов с клиента kvm02 на сервер с адресом 192.168.xxx.zzz будет выглядеть примерно так:
#!/bin/bash

RSYNCBACKUPDIR="rsync://192.168.xxx.zzz/kvm02"
LOCALDIR="/virt/files"
rsync -vrlptD --delete $LOCALDIR $RSYNCBACKUPDIR

Разумется, если речь идет о бекапе виртуальных машин, то этот скрипт стоит пополнить командами создания и удаления LVM-снапшота, монтирования и отмонтирования его содержимого и так далее. Но эта тема уже выходит за рамки данной статьи.

4. Восстановление

Для восстановления файлов из бекапа клиента KVM01 за 4 августа 2014 года достаточно будет на сервере перейти в каталог /mnt/backup/.zfs/snapshot/2014-08-04/kvm01/ и скопировать оттуда файлы любым привычным способом. Каждый конкретный бекап выглядит как обычный каталог, доступный только для чтения. Для поиска определенного файла в этом бекапе можно использовать стандартные утилиты, такие как find или grep.
5. Заключение

Сейчас на сервере 9 снапшотов: 7 ежедневных и 2 ежемесячных. Плюс сегодняшний бекап, снапшот с которого снимется вечером. Размер раздела с бекапами составляет 1.8T. Общий объем файлов — 3.06T. Физически занимают на диске они 318G. Суммарный объем сегодняшнего бекапа — 319G. Да, 10 бекапов на ZFS с компрессией и дедубликацией занимают места меньше, чем один бекап занимал бы на файловой системе без этих полезных свойств.
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
backup  1.80T   310G  1.49T    16%  10.37x  ONLINE  -
# zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
backup   3.06T  1.42T   318G  /mnt/backup

Поскольку сам rsync не занимается шифрованием передаваемых данных, высовывать такую схему без изменений в интернет небезопасно. Добавить шифрование можно, пустив трафик через ipsec или stunnel, например.

Выше я написал, что заметных проблем с ZFS у меня не было. На самом деле, одна проблема была. Однажды ночью, когда оба клиента активно бекапились, сервер дважды сообщил в dmesg, что task rsync blocked for more than 120 seconds. При этом оба бекапа успешно завершились, ничего не зависло, данные не потерялись. Подозреваю, что это проявление знаменитого бага 12309. Разнес бекапы по времени, с тех пор проблема не повторялась.

Rsync настройка бэкапа на CentOS/Debian/Ubuntu

Существует много способов организации backup на CentOS/Debian/Ubuntu серверах — бесплатные утилиты, самописные скрипты с использованием tar, система бэкапа bacula и много другое. Все это в той или иной мере я использовал или использую в своей работе. Сегодня я хочу с вами поделиться своим методом организации простого, удобного и быстрого способа настройки инкрементного backup с использованием популярной утилиты rsync на серверах под управлением CentOS/Debian/Ubuntu. Способ одинаково работает на этих истемах, небольшие отличия только в самой установке rsync, о чем я отдельно упомяну для каждой системы.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .

Установка rsync на CentOS 6

Устанавливаем xinetd для автоматического запуска rsync:

# yum install -y xinetd

Устанавливаем непосредственно rsync:

# yum install -y rsync

Редактируем конфиг rsync для xinetd:

# mcedit /etc/xinetd.d/rsync

В конфиге находим строку disable = yes и меняем на no:

disable = no

Запускаем xinetd:

# /etc/init.d/xinetd start

И добавляем его в автозапуск:

# chkconfig xinetd on

Проверяем, слушает ли xinetd 873 порт rsync:

# netstat -lnpt | grep 873

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1431/xinetd

Все в порядке, можно приступать к настройке rsync.

Установка rsync на CentOS 7

Ставим rsync:

# yum install -y rsync

Добавляем в автозагрузку:

# systemctl enable rsyncd

ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'

Проверяем автозагрузку:

# systemctl list-unit-files --type service | grep rsyncd

rsyncd.service enabled

Запускаем rsync:

# systemctl start rsyncd

Проверяем, как запустился:

# netstat -tulpn | grep rsync

tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2782/rsync

Все в порядке, можно приступать к настройке rsync.

Установка rsync на Debian/Ubuntu

Устанавливаем rsync:

# apt-get install -y rsync

Правим конфиг:

# mcedit /etc/default/rsync

Находим строку RSYNC_ENABLE=false и меняем на true:

RSYNC_ENABLE=true

Запускаем rsync:

# /etc/init.d/rsync start

[ ok ] Starting rsync daemon: rsync.

Проверяем, что работает:

# netstat -tulpn | grep rsync

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1767/rsync

Все в порядке, можно приступать к настройке rsync.

Настройка rsync

Теперь приступаем к настройке. Логика наших бэкапов будет следующая. При первом запуске мы делаем полный бэкап интересующей нас информации в папку current. Потом раз в сутки мы сверяем имеющийся архив с источником и делаем его вновь актуальным, перезаписывая все изменившиеся файлы, но при этом не удаляем их, а складываем в папку increment, где каждый день создается папка с именем в виде даты, в которую складываются все измененные файлы за текущий день. Таким образом, у нас всегда будет полный архив, актуальный на момент последней синхронизации, плюс набор папок за каждый день с изменившимися в этот день файлами. Сколько дней хранить можно выбрать по необходимости.

Получается у нас такая картинка:

rsyncrsync

Приступаем к реализации. В первую очередь настраиваем rsync на серверах источниках информации, с которых мы будем забирать данные для backup.

Создаем файл конфигурации rsync:

# mcedit /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = true
munge symlinks = yes

# папка источник для бэкапа
[data]
path = /data
uid = root
read only = yes
list = yes
comment = Data backup Dir
auth users = backup
secrets file = /etc/rsyncd.scrt

Создаем файл с учетными данными для подключения:

# mcedit /etc/rsyncd.scrt
backup:12345

где backup — имя пользователя, 12345 — пароль.
Делаем права на чтение только root, иначе rsync не запустится:

# chmod 0600 /etc/rsyncd.scrt

После настройки перезапускаем rsync.
На Centos 6:

# /etc/init.d/xinetd restart

На Centos 7:

systemctl restart rsyncd

На Debian/Ubuntu:

# /etc/init.d/rsync restart

Теперь идем на сервер приемник, в котором будут храниться архивные копии с серверов источников. Там создаем скрипт инкрементного бэкапа c использованием rsync:

# mcedit /root/bin/backup-server1.sh
#!/bin/bash
date
# Папка, куда будем складывать архивы
syst_dir=/backup/
# Имя сервера, который архивируем
srv_name=server1
# Адрес сервера, который архивируем
srv_ip=10.10.1.55
# Пользователь rsync на сервере, который архивируем
srv_user=backup
# Ресурс на сервере для бэкапа
srv_dir=data
echo "Start backup ${srv_name}"
# Создаем папку для инкрементных бэкапов
mkdir -p ${syst_dir}${srv_name}/increment/
# Запускаем непосредственно бэкап с параметрами
/usr/bin/rsync -a --delete --password-file=/etc/rsyncd.scrt ${srv_user}@${srv_ip}::${srv_dir} ${syst_dir}${srv_name}/current/ --backup --backup-dir=${syst_dir}${srv_name}/increment/`date +%Y-%m-%d`/
# Чистим папки с инкрементными архивами старше 30-ти дней
/usr/bin/find ${syst_dir}${srv_name}/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
date
echo "Finish backup ${srv_name}"

Делаем скрипт исполняемым:

# chmod 0744 /root/bin/backup-server1.sh

Создаем файл с паролем для авторизации на сервере источнике:

# mcedit /etc/rsyncd.scrt
12345

Делаем права на чтение только root, иначе rsync выдаст ошибку:
ERROR: password file must not be other-accessible
Исправляем это:

# chmod 0600 /etc/rsyncd.scrt

На этом все, теперь можно запускать скрипт и ожидать его выполнения. Осталось добавить его в cron:

# mcedit /etc/crontab
30 23 * * * root /root/bin/backup-server1.sh

Я обычно создаю несколько скриптов для каждого сервера отдельно. Потом объединяю их запуск в одном общем скрипте и уже его добавляю в cron. А потом по мере необходимости редактирую уже его, добавляю или удаляю сервера.

Ротация логов rsync

Мы указали в настройках ведение лога в файл /var/log/rsyncd.log. Необходимо настроить ротацию этого лога, чтобы он не рос до бесконечности. На больших файловых серверах он очень быстро вырастет до сотен мегабайт и более.

Для этого создаем в папке /etc/logrotate.d файл с конфигурацией ротации:

# mcedit /etc/logrotate.d/rsyncd

/var/log/rsyncd.log {
size=500k
compress
rotate 4
missingok
notifempty
}

С такими настройками ротация будет происходить каждый раз, когда файл лога превысит размер в 500 кб. Храниться будут 4 версии лог файла. Эти настройки вы можете сами поменять по своему усмотрению.

Пример бэкапа windows сервера с помощью rsync

Еще один пример из моей практики. Допустим, у нас есть windows сервер с некоторой информацией, которую мы хотим так же бэкапить. Никаких проблем, это делается достаточно просто.

Создаем на windows сервере сетевую шару с информацией. Создаем пользователя и добавляем его в доступ к этой папке. Этого пользователя мы будем использовать для подключения виндовой шары к linux серверу.

Монтируем шару с информацией, которую будем бэкапить:

# mount -t cifs //192.168.0.16/docs /mnt/docs -o user=backup,password=12345,iocharset=utf8,codepage=cp866

192.168.0.16 — адрес виндовой шары
backup и 12345 — пользователь и пароль виндовой машины с доступом к шаре docs.

Все, теперь папку /mnt/docs можно использовать в качестве приемника в нашем скрипте бэкапа с rsync. Если папка примонтирована непосредственно к серверу с бэкапами, то нужно на нем самом настроить конфиг rsyncd на примере серверов источников, запустить на нем rsyncd и в скрипте в качестве ip адреса сервера указывать 127.0.0.1.

Я в таких случаях создаю несколько скриптов: на монтирование шары, бэкап и размонтирование, объединяю их в один и запускаю последовательно. В итоге получается, что подключаем диск, делаем бэкап и отключаем его.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Помогла статья? Есть возможность отблагодарить автора

Бекап через RSYNC. Часть 2 - клиент

В прошлый раз мы настроили RSYNC сервер на nas4free. Теперь нужен клиент на том/тех компьютерах, с которых будем делать бекап.

В английской Википедии на страничке по RSYNC есть табличка "Solutions using Rsync" из которой вы можете попытаться выбрать клиент на свой вкус и платформу. Я посмотрел несколько в поисках варианта под Windows, с графическим интерфейсом (гуем в просторечии) и бесплатного. Мне приглянулся QtdSync. Сразу отмечу - его интерфейс реализован на английском, немецком и французском. Русского на сегодня нет. Пакет включает и сервер и клиент, мы будем настраивать и использовать клиент.

1. Качаем, устанавливаем и запускаем. Жмём Create new backup set (создать новый набор бекапа)

new_bkp_set

2. Прежде всего жмём кнопку Settings
qtd_set
Меняем отмеченное красным - включаем показ экспертных установок и выключаем опцию привязывания файлов-папок. Что такое последнее я толком не разобрался. Похоже сделано на тот случай, если из-за подключения устройств к Windows машине у вас меняются буквы, присвоенные дискам. Если это ваш случай - включите. Жмем кнопку ОК (зеленую круглую с галочкой, внизу справа. А красную с крестиком я буду называть Cancel.)

3. Диалог меняется, внизу появляется строка параметров, которую гуй передаёт rsync
set_1

отсюда надо ОБЯЗАТЕЛЬНО удалить --delete
set2
если этого не сделать, то происходит удаление с сервера того, чего нет на клиенте. А нам такое не надо.
Следите при создании новых наборов бекапа и стирайте ключ --delete. Замечу, что если мы (как рекомендовалось в первой части) создали датасет и включили на нём автоматические снапшоты, то вреда от стирания не так много. Пока жив соответствующий снапшот, удалённое можно легко восстановить.

UPD Курение man rsync показало, что ключи --ignore-errors и --force действуют только вместе с ключём --delete. Без него - смысла в них нет. От греха, стираем эти ключи тоже. Вообще, не очень понятно, зачем автор программы столь деструктивные ключи поставил по умолчанию...

4 Теперь задаём нашему сету имя - там, где по умолчанию написано New backup set. Советую выбирать осмысленные имена из латинских букв и цифр.

5 Жмём справа сбоку зелёную кнопку с +. В открывшемся мини-диалоге выбираем Folder, т.е. Папку. Открывается стандартный диалог выбора папки. Выбираем ту, которую хотим архивировать. Если после этого всё же выскочит диалог с заголовком Bind folder
bind
Я выбираю отмеченное красным - никуда не привязывать, больше не спрашивать. Опция сделана для сменных носителей и, шире, компьютеров, на которых по каким-то причинам диски могут менять буквы, им присвоенные. Если это ваш случай - поэкспериментируйте и выберите подходящий вариант.

Операцию выбора папки надо повторить для всех папок, которые в составе этого набора вы собираетесь архивировать. По одной 🙁

ПРИМ. В качестве папки можно выбрать и диск. Но тут есть особенность. На дисках есть скрытые папки. Их обычно архивировать не стоит. Чтобы не архивировать, следует открыть содержимое диска, нажав на плюсик и снять галочки против системных папок
disk
Для примера - галочки сняты для системных папок.

Конечно, точно также вы можете убирать из набора архивирования подпапки.

Когда закончите, убедитесь, что ключ --delete не вылез, если вылез - убейте его.
В последствии вы можете отредактировать набор, добавить или удалить папки и т.п. Для этого предназначены кнопки справа, желтая и красная. Потренируйтесь.

Под ними кнопка в виде зелёной коробки, она предназначена для восстановления папки из бекапа.

6 Это мы выбрали что архивировать. Осталось - куда. Жмём вкладку Destination
dest
Справа от пустой строки Destination - желтая кнопка, жмём её, выбираем желтый remote rsyc path
В открывшемся диалге (как на картинке) вбиваем IP вашего NAS и, если применяются - логин и пароль. Я обхожусь без них, так что оставил эти поля пустыми.

Зелёная кнопка ОК

dest2
Сервер опознан.

7 Ну и жмём справа внизу зелёную Save & Quit.
Нам предлагают сохранить набор в папку программы.
UPD от 17 сент 2014
Соглашаемся. С версии 0.6.20 работа с наборами, сохранёнными в папку программы стала невозможной. Не знаю, что намудрил автор, но у меня программа просто перестала работать нормально и потребовалось создать наборы заново и сохранить их куда-то, где Windows не возражает против сохранения файлов. /UPD
Главный диалог программы изменился, привожу свой, у меня создано в процессе экспериментов два набора бекапа.
filed_bk_set
Видно, что добавлять можно и локальные и сетевые диски, хоть с того же самого NAS.
UPD Но можно - не значит нужно. Для локальной передачи внутри NAS есть специальный режим Services|Rsync|Local.

8. Теперь стоит задать работу по расписанию. Выбираем один из наборов и жмём желтую Edit selected Backup set
Вверху в меню жмём иконку Schedule (расписание) в виде черного циферблата.
schedule
У меня, к примеру, задано делать начиная с 25 января каждый день в 21-00
Плюс к этому при старте компьютера, если бекап старше одного дня.
При сбое пытаться повторить, но не ранее, чем через 10 мин.
И работать тихо, без выдачи лишних сообщений.

Зелёная кнопка OK

В первый раз появится диалог, говорящий, что в реестр будет записана команда для работы по расписанию. Надо согласиться. В системном трее (справа внизу экрана) появится иконка -чёрный циферблат
sch_tray- вот она, первая слева.

Вроде всё в порядке.

9. Осталось выполнить первый бекап. В первый раз это займет несколько минут. Или десятков минут - в зависимости от объёма.

Для ручного старта надо в диалоге из п 7 отметить желаемые наборы и нажать зелёную Run Checked backup sets. Пойдёт процесс.

Эпилог. Я надеюсь, что вы сначала пробежали глазами эту инструкцию, а потом уже стали жать кнопки. Может и зря надеюсь 😉
Если не зря - совет потренироваться сначала на кошках. Создайте маленькую папку, положите в неё несколько файлов. Сконфигурируйте всё. Назавтра отредактируйте один из файлов в этой папке, другой переименуйте, третий удалите, четвёртый добавьте. И, не запуская вручную бекап, оставьте на послезавтра.

Послезавтра, после того, как пройдет бекап по расписанию, папка на сервере должна содержать все внесённые изменения. Если это так - бинго, можно настраивать для реальных папок. Если нет - ищите где проблема. На кошках это проще и не так напряжно, как на потерянных семейных фото архивах.

PS Замеченные глюки.
a) По странному приколу, если добавить папку, в имени которой есть пробел - на сервере имеем папку с подчёркиванием вместо пробела. Например Дружные спицы стали Дружные_спицы. Эффект проявляется, только если эту папку добавляли в набор. Если так называется подпапка - глюка нет.
б) Если где-то на NAS возникает ошибка и в сообщениях что-то говорится о permissions - проблема с правами доступа.

Простое решение - дать команду
chmod -R 777 <имя папки бекапа>
Имя папки бекапа можно посмотреть через вебгуй, Advanced|File Manager, зайдя в эту папку
bk_folder
я подчеркнул корявой красной линией - в моём случае: /mnt/Pool/Backup/RSYNC

На худой конец -
chmod -R 777 /mnt

Чтобы дать команду - зайти в командную строку (описано здесь, пункты 1 и 2) или через вебгуй Advanced|Execute command

Или через ftp клиент, напрмер Filezilla - заходим на NAS, выбираем нужную папку правой кнопкой мыши, выбираем из меню File Permissions, ставим 777 и рекурсивно
flz_permiss
На сегодня - всё.
Мануал на QtdSync
UPD Совет от камрада Zlong Чтобы QtdSync бэкапил только вложенные каталоги (без каталога верхнего уровня) в расширенных опциях необходимо добавить -O /UPD

Резервное копирование на удаленный сервер / Southbridge corporate blog / Habr

Назрела необходимость замены медленного rdiff-backup на более шустрое решение для инкрементальных бекапов на удаленый сервер. Сперва рассматривался Rsnapshot, но причине того, что он не умеет без костылей делать бекапы именно на удаленные серверы от него отказались. Прочие аналоги нам также не подошли по тем или иным причинам. Искать что-то готовое на просторах github и допиливать под себя мы не захотели, поэтому было решено написать новый скрипт с нуля своими силами. Главная цель сделать решение для инкрементального бекапа на удаленный сервер схожее с rdiff, но с использованием жестких ссылок rsync.

Скрипт выложен в нашем репо на github, будем рады получить отзывы, советы, коммиты!

Инструкция по приминению нашего решения на примере CentOS 6.x

Подготовка сервера бэкапов.

Общая настройка.

Устанавливаем rsync и xinetd:
yum -y install rsync xinetd

Добавляем в атозагрузку сервис xinetd:
chkconfig --add xinetd

Разрешаем rsync
vi /etc/xinetd.d/rsync

Меняем disable = yes на disable = no
и создаем файл конфигурации /etc/rsyncd.conf

И добавляем в него:
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log

На этом общую настройку заканчиваем и переходим к настройке бэкапа под конкретный сервер.

Настройка окружения для бэкапа сервера.

Добавляем пользователя если он не еще не добавлен:

usernames=backup
useradd -g backups $usernames
rm -f /home/$usernames/.bash*
mkdir /home/$usernames/.ssh /home/$usernames/rsyncbackups
chown -R $usernames:backups /home/$usernames
chown -R root:root /home/$usernames/.ssh
touch /home/$usernames/.ssh/authorized_keys

Блок с ключом необходимо заменить на сгенерированные данные id_rsa.pub:
no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa ---your-ssh-key-here--- [email protected]

Добавляем в /etc/rsyncd.conf

cat << EOF >> /etc/rsyncd.conf
[$usernames]
comment = backups for $usernames
path = /home/$usernames/rsyncbackups
use chroot = true
uid = root
gid = root
log file = /var/log/rsyncd/$usernames.log
read only = false
write only = false
hosts allow = 1.2.3.4
hosts deny = *
transfer logging = false
EOF

где:
path = /home/$usernames/rsyncbackups - путь где будут лежать бэкапы
log file = /var/log/rsyncd/$usernames.log - путь к логам
hosts allow = 1.2.3.4 - IP с которого разрешен доступ к данному окружению
На этом, настройка серверной части завершена.

Настройка сервера клиента.

Для изменения параметров сервера бэкапов, исключений контейнеров из бэкапа, локальной папки (или ее отсутствия) достаточно внести изменения в файл
rsync-backup.local.conf

Исключения

Для исключений существуют файлы со списком исключений, указанных с каждой новой строки без первичного слеша (правила исключений для rsync).

srv/southbridge/etc/rsync-backup.exclude.dist - файл с общими исключениями
srv/southbridge/etc/rsync-backup.exclude.local.example - пример названия исключений для локального бэкапа
srv/southbridge/etc/rsync-backup.exclude.remote.example - пример название исключений для удаленного бэкапа

Cкрипт бэкапа проверяет наличие файлов srv/southbridge/etc/rsync-backup.exclude.local и srv/southbridge/etc/rsync-backup.exclude.remote и при их наличии добавляет исключения при бэкапах. Если локальный бэкап отменили — локальные исключения добавляются в удаленные.

Включения

Особенностью этого скрипта является возможность включения определенных файлов или каталогов из исключенной директории выше иерархией. Для этого нужно создать файлы
/srv/southbridge/etc/rsync-backup.include.local
/srv/southbridge/etc/rsync-backup.include.remote
соотвественно для локальных и удаленных включений.
Если нужно включить конкретный файл, то необходимо указать его путь без первичного слеша, к примеру:
var/log/nginx/server.log
Если же нужно рекурсивно включить директорию, то нужно указать включение так:
var/log/nginx/**
Каждое новое включение с новой строки без первичного слеша.

При работе включений будет бэкапиться вся иерархия директорий контейнера, даже если раннее было добавлено исключение определенных директорий, но бэкапиться будет именно директории без файлов.
Это особенность работы rsync, к сожалению другого пути пока не нашли.
Часть скрипта для работы включений:

     if [ -f "$LOCAL_INCLUDE" ]; then
          e "sync include" 
          e "rsync -ax --include=*/ --include-from=$LOCAL_INCLUDE --exclude=* --link-dest=../../Latest $VZ_PRIVATE/$VEID $LOCAL_DIR/$VEID/$WHICH/Processing$DATE" 
          LLOG=`rsync -ax --include=*/ --include-from=$LOCAL_INCLUDE --exclude=* --link-dest=../../Latest $VZ_PRIVATE/$VEID $LOCAL_DIR/$VEID/$WHICH/Processing$DATE 2>&1`
      fi

Дальнейшая работа с бэкапами

По умолчанию скрипт будет создавать бэкапы: 7 дневных, 4 недельных и 1 месячный для изменения этого в
/srv/centos-admin.ru/etc/rsync-backup.local.conf можно вписать иные цифры следующих параметров

DAILY=7
WEEKLY=4
MONTHLY=1

Инкрементальные бэкапы производятся с использованием хардлинков. Поэтому, чтобы сократить объем дискового пространства занимаемого бэкапом, при добавлении исключений, и при чистке бэкапов от этих исключений нужно будет удалить соответствующие директории в каждой папке бэкапов. Конечно можно написать скрипт для автоматизации этой рутины, это в планах.

В заключение, какой выйгрыш по времени мы все-таки получили:

Cравнительный тест rdiff vs. rsync:

Сравнение времени выполнения бэкапа:
1. Первичный бэкап контейнера в 5Gb (локальный и удаленный)
rdiff-backup — 6 минут 30 секунд
rsync-backup — 1 минута 34 секунды

2. Вторичный бэкап, изменения в контейнерах не было
rdiff-backup — 30 секунд
rsync-backup — 2 секунды

3. Вторичный бэкап, в контейнер добавлена папка c дистрибутивом debian (не iso) в 4.7Gb
rdiff-backup — 11 минут 32 секунды
rsync-backup — 2 минуты 15 секунд

И на графиках, первый скачек — rdiff, второй — rsync

Добавить комментарий

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