Резервное копирование Redmine

Создадим скрипт (в текстовом редакторе nano Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/cron.daily/redmine

Пример содержимого скрипта:

#!/bin/sh
/usr/bin/mysqldump -u root -p<password> redmine_default | gzip > /path/to/backups/redmine_db_`date +%y_%m_%d`.gz
rsync -a /var/lib/redmine/default/files /path/to/backups/files

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

chmod +x /etc/cron.daily/redmine

В скрипте можно также добавить команду удаления старых файлов или директории, чтобы не возникло переполнения диска, подробнее смотрите мою статью — Скрипт удаления старых файлов

Смотрите также прочие мои статьи о резервном копировании — Резервное копирование

Установка и настройка Bacula-Web

Bacula-Web — веб-инструмент для создания отчетов и мониторинга Bacula.

Установим необходимые компоненты:

sudo apt-get install apache2 libapache2-mod-php5 php5-mysql php5-gd
sudo a2enmod php5
sudo a2enmod rewrite

Откроем в редакторе файл конфигурации PHP и укажем временную зону:

sudo nano /etc/php5/apache2/php.ini
date.timezone = Europe/Kiev

А также для директории с Bacula-Web укажем опцию:

sudo nano /etc/apache2/sites-enabled/000-default.conf
<Directory /var/www/html/bacula-web>
AllowOverride All
</Directory>

Перезапустим apache2 чтобы применить изменения:

sudo service apache2 restart

Перейдем в директорию веб-сервера, скачаем архив с последней версией Bacula-web и распакуем его:

cd /var/www/html
curl -O http://www.bacula-web.org/files/bacula-web.org/downloads/bacula-web-latest.tgz
mkdir -v /var/www/html/bacula-web
tar -xzf bacula-web-latest.tgz -C /var/www/html/bacula-web

Сделаем копию примера файла конфигурации и откроем его например в текстовом редакторе nano:

cd /var/www/html/bacula-web/application/config
cp -v config.php.sample config.php
sudo nano /var/www/html/bacula-web/application/config/config.php

Раскомментируем и настроим MySQL параметры:

$config[0]['label'] = 'Backup Server';
$config[0]['host'] = 'localhost';
$config[0]['login'] = 'bacula';
$config[0]['password'] = 'test';
$config[0]['db_name'] = 'bacula';
$config[0]['db_type'] = 'mysql';
$config[0]['db_port'] = '3306';

Так как некоторые команды выполняли через sudo, то укажем правильного владельца файлам:

sudo chown -R www-data:www-data /var/www/html/bacula-web

На этом установка завершена, можно открывать Bacula-Web по ссылке http://SERVER/bacula-web, а также желательно посмотреть тестовую страницу http://SERVER/bacula-web/test.php которая сообщит все ли необходимые компоненты установлены и настроены.

Установка и настройка Bacula

Bacula — набор программ клиент-сервер для управления резервным копированием.
Состоит из компонентов Director Daemon (DD), Storage Daemon (SD), File Daemon (FD) и консоли администратора Bacula Console (BC).

Для установки в Ubuntu/Debian выполним:

sudo apt-get install bacula

В процессе установки будет запрошен пароль root пользователя MySQL и создана база данных, а также установлен Postfix.

Создадим директории и установим права:

sudo mkdir -p /bacula/backup /bacula/restore
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula

Откроем файл конфигурации DD, например в текстовом редакторе nano:

sudo nano /etc/bacula/bacula-dir.conf

Найдем «Standard Restore template» и там где Where изменим путь:

Job {
Name = "RestoreFiles"
Type = Restore
Client=Blank-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula/restore
}

Далее найдем «List of files to be backed up» и чуть ниже где «File =» укажем что именно нужно копировать в резервную копию.

Ненужные директории можно исключить, добавив например:

Exclude {
File = /bacula
File = /proc
File = /tmp
}

Откроем файл конфигурации SD:

sudo nano /etc/bacula/bacula-sd.conf

Найдем «Devices supported by this Storage daemon» и укажем в «Archive Device =» где хранить резервные копии, например:

Archive Device = /bacula/backup

Протестируем правильность конфигурации:

sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
sudo bacula-sd -tc /etc/bacula/bacula-sd.conf

Если команды ничего не сообщили, значит все хорошо и ошибок нет.

Перезапустим сервисы bacula чтобы применить изменения в конфигурации:

sudo service bacula-sd restart
sudo service bacula-director restart

Проверим все ли три сервиса запущено:

netstat -nlpt | grep [b]acula

Откроем консоль bacula:

sudo bconsole

Проверим статус:

status

Наберем команду:

label

и укажем имя резервной копии, потом укажем 2 что это файл.

Запустим наш настроенный процесс резервного копирования (выберем 1 и yes):

run

Посмотреть сообщения о успешном выполнении:

messages

Выйдем из консоли bacula:

quit

В директории /bacula/backup должен появится файл с резервной копией.

Смотрите также:
Установка и настройка Bacula-Web

Резервное копирование конфигурации TP-Link коммутаторов

Набросал скрипт для резервного копирования конфигурации TP-Link коммутаторов.
Скрипт выполняется на Linux где запущен TFTP сервер, он подключается по telnet к коммутатору и специальной командой конфигурация отправляется на указанный TFTP, по закрытию telnet соединения, файл перемещается в нужную директорию, а также последняя команда удаляет файлы которым больше 30 дней, так как больше их хранить мне не нужно.
Также можно ежемесячно делать например копию всех файлов в облако.
Как видно, перед вводом пароля в скрипте ставить паузу нельзя.

#!/bin/bash
{
echo "ПАРОЛЬ";
echo "enable";
echo "ПАРОЛЬ";
echo "copy startup-config tftp ip-address 192.168.0.5 filename tplink";
sleep 2;
echo "exit";
sleep 1;
echo "exit";
} | telnet 192.168.0.110

mv /srv/tftp/tplink.cfg /backups/devices/tplink/`date +%Y-%m-%d`_tplink.cfg
find /backups/devices/tplink/ -type f -mtime +30 -exec rm {} \;

Резервное копирование Linux в архив и восстановление из него

На тесте приведу пример примитивного копирования Ubuntu Server системы в архив и восстановление на той же системе либо на чистой новой.

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

sudo tar cvpzf /backup.tgz --exclude=/media --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

Для восстановления на той же или чистой только установленной системе проверим достаточно ли свободного пространства:

df -h

Если сервер другой с чистой системой, создадим директорию и скопируем в неё копию директории /boot с загрузчиком и файл /etc/fstab:

sudo mkdir /OLD
sudo cp -R /boot/ /OLD/
sudo cp /etc/fstab /OLD/

Находясь в директории с архивом распакуем его с сохранением прав на файлы поверх системы:

sudo tar xvpfz backup.tgz -C /

Возвращаем директорию /boot и файл fstab:

sudo cp -R /OLD/boot/ /boot/
sudo cp /OLD/fstab /etc/fstab

Убедимся что копирование прошло успешно и в файлах /boot/grub/grub.cfg и /etc/fstab указан верный UUID, посмотреть UUID разделов в текущей системе можно командой:

lsblk -o NAME,UUID

Перезагружаем систему:

sudo reboot

При таком восстановлении на другой сервер возможно придется чуть изменить конфигурацию системы, например если на новом сервере сетевые интерфейса другого типа и имеют иное имя и т.д.

Смотрите также:
Перенос работающей системы Ubuntu на другой диск

Резервное копирование конфигурации Cisco Catalyst 6500

Для теста набросал скрипт автоматического резервного копирования конфигурации Cisco Catalyst 6509-E.

Собственно сам скрипт:

#!/bin/bash
# Backup CISCO config
(
sleep 5
echo "user"
sleep 4
echo "password"
sleep 4
echo "copy running-config tftp:"
sleep 2
echo "192.168.1.4"
sleep 2
echo "cisco.cfg"
sleep 6

echo "exit"
) | telnet 192.168.1.5
mv /srv/tftp/cisco.cfg /backups/devices/cisco/`date +%Y-%m-%d`_cisco.cfg

find /backups/devices/cisco/ -type f -mtime +30 -exec rm {} \;

Содержимое скрипта добавим например в файл backup_cisco.sh и добавим его в cron, добавив указанную ниже строку в файл /etc/crontab:

0 2 * * * root /backups/scripts/backup_cisco.sh > /dev/null 2>&1

Файл можно открыть например в текстовом редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/crontab

Скрипт выполняет подключение по telnet к 192.168.1.5 и копирует конфигурацию на tftp сервер 192.168.1.4, потом файл перемещается в удобную директорию для хранения.
Последняя строчка в скрипте удаляет файлы старее 30 дней.
Как запустить tftp сервер смотрите в моих статьях: Установка и настройка TFTP сервера в Ubuntu или Запуск TFTP сервера на Windows.
Смотрите также: Использование и настройка CRON.

Резервное копирование на Yandex диск

Приведу пример скрипта для копирования резервных копий на Yandex диск

На тесте работаю в системе Ubuntu и выполняю команды от root пользователя через sudo.

В системе должен быть установлен curl или установим его командой:

sudo apt-get install curl

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

sudo touch backup_to_yandex.sh

Укажем минимальные права доступа к файлу, чтобы другие пользователи не могли открыть, ведь в файле будет хранится пароль к yandex:

sudo chmod 0700 backup_to_yandex.sh

Откроем файл в каком нибудь текстовом редакторе, например nano (клавиши Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano backup_to_yandex.sh

И добавим следующее содержимое в файл (если работать через putty, то можно вставить содержимое буфера обмена кликнув правой кнопкой мыши):

#!/bin/bash

Путь к файлам присвоим переменным чтобы в дальнейшем их было проще указывать по несколько раз
$FILE1=/tmp/etc_`date +%Y-%b`.tar.gz
$FILE2=/tmp/sql_`date +%Y-%b`.sql.gz

# Например сначала запакуем в архив директорию /etc
tar -czf $FILE1 /etc

# Сделаем дамп всех mysql баз
mysqldump -u ПОЛЬЗОВАТЕЛЬ --password=ПАРОЛЬ --all-databases | gzip > $FILE2

# Теперь отправим эти два файла на Yandex диск (файлы указываем через запятые)
curl --user ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ -T "{$FILE1,$FILE2}" https://webdav.yandex.ru/

# Теперь удалим их, так как они уже на Yandex диске
unlink $FILE1
unlink $FILE2 

Можно также при архивировании устанавливать пароль на архив, смотрите мои более подробные статьи на эту тему:
RAR и ZIP архивирование в Linux
RAR архивы в Linux Ubuntu

Скрипт можно добавить в планировщик Cron для автоматического запуска — Использование и настройка CRON