Уровень сложности конфигурации – 4 из 5. / Время на прочтение и реализацию – 1-2 часа.
Резервное копирование для RaspberryPi описано многократно. Вы знаете, что вместо жесткого диска в Raspberry используется обычная SD карта, которая недолговечна. Поэтому осуществлять резервное копирование имеет самый прямой смысл.
В этой инструкции я раскажу как это делает мой RaspberryPi. Он стоит на даче и является центром "умной дачи". Сама "умная дача" состоит из различных программных систем и оборудования.
Ничего уникального мой Raspberry не делает, однако, кое-какие особенности имеются.
У меня есть.
Таким образом, я имею два типа источников для резервных копий.
- выбранные базы данных MySQL.
- директории с нужными файлами.
Ввиду того, что Интернет-канал на даче у меня не слишком скоростной, да и трафик дорогой, то я выбрал для себя бэкап в два этапа:
- Ежедневно в 3:30. Копирование на USB носитель, включенный в RaspberryPi. Храниться резервные копии будут в течение 7 дней. Все что старше подлежит удалению).
- Еженедельно в 4:00 . В систему VPNKI Space по протоколу FTP. Сохраняться резервные копии на сервере будут в течение 30 дней (то есть 4 копии). Все что старше подлежит удалению.
Увы, услуга VPNKI Space сейчас недоступна. Однако вы можете использовать любой другой FTP сервер для хранения резервных копий по этой инструкции.
Собственно скриптов будет два и они весьма просты. Первый скрипт будет запускаться ежедневно. Второй только - по понедельникам. Начнем с первого.
1.1. Находясь в корне системы мы создадим папку, куда будем собирать ежедневный бэкап. В этой инструкции пропущен раздел по монтированию этой папки на USB устройство. Возможно добавлю позже.
sudo mkdir /backup
1.2. В этой директории создадим файл с названием backup_ed.sh. Здесь ed как напоминание - every day, ежедневно.
sudo touch /backup/backup_ed.sh
1.3. Откроем файл в редакторе.
sudo nano /backup/backup_ed.sh
Прежде чем мы поместим что-то в этот файл необходимо дать некоторые комментарии.
Обратите внимание на комментарии к переменным в самом начале файла. Вы можете изменить их под свои нужды.
В моем случае бэкапить нужно три базы данных MySQL и три директории с файлами.
Поехали! Вставим следующий текст.
#!/bin/bash
#
# backup all data by cron every day.
# Stdout and Stderr redirects to log-file.
#
# Example start - ./backup_ed.sh
#
### Переменные ###
log="/var/log/backup.log" # файл лога.
old="7" # дней хранения бэкапов.
mysql_user="root" # имя пользователя mysql.
mysql_pass="o9djflkzx90k" # пароль пользователя mysql.
db1="params" # имя базы данных1, которую будем сохранять.
db2="joomla" # имя базы данных2, которую будем сохранять.
db3="weewx" # имя базы данных3, которую будем сохранять.
dir1="/media" # папка с файлами, где лежат картинки видеонаблюдения.
dir2="/var/www" # папка со скриптами и веб-сервер.
dir3="/home/pi/.node-red" # папка с данными Node-RED.
echo -e "\n" >> $log 2>&1
echo -e "### Start section BACKUP EVERY DAY ###" >> $log 2>&1
starttime=`date +%s`
echo "Time: $(date)" >> $log 2>&1
### Удаляем старый бэкапы старше 7 дней из папки /backup ###
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'.tar.gz -d "$old day ago"` >> $log 2>&1
### Создаем пустой архив .tar, удаляем неполные файлы бэкапов. ###
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar >> $log 2>&1
sudo rm /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz >> $log 2>&1
sudo tar -cf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar -T /dev/null
### Создаем временную директорию для бэкапа MySQL ###
sudo mkdir -p /backup/mysql >> $log 2>&1
### Выполняем дамп баз данны и сохраняем в папку /backup ###
sudo mysqldump -u $mysql_user -p$mysql_pass $db1 --log-error $log > /backup/mysql/$db1-db.sql
sudo mysqldump -u $mysql_user -p$mysql_pass $db2 --log-error $log > /backup/mysql/$db2-db.sql
sudo mysqldump -u $mysql_user -p$mysql_pass $db3 --log-error $log > /backup/mysql/$db3-db.sql
### Добавляем другие директории к архиву tar ###
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar /backup/mysql/
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir1
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir2
sudo tar rf /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar $dir3
### Сжимаем архив ###
sudo gzip /backup/backup-`hostname`-`date '+%Y-%m-%d'`.tar
echo "Archive size : " >> $log 2>&1
sudo ls -sh backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz >> $log 2>&1
### Удаляем временную папку для MySQL ###
sudo rm -rf /backup/mysql >> $log 2>&1
### Пишем в лог о завершении ###
stoptime=`date +%s`
duration=`expr ${stoptime} - ${starttime}`
echo "Stop time: $(date)" >> $log 2>&1
echo "Duration is `date +%H:%M:%S -ud @${duration}`" >> $log 2>&1
echo -e "### Stop section BACKUP EVERY DAY ###" >> $log 2>&1
Сохраняем файл Ctrl+X.
1.4. Делаем этот файл исполняемым при помощи команды.
sudo chmod 755 /backup/backup_ed.sh
1.5.Осталось добавить автозапуск бэкапа ежедневно в 3:30. Для этого выполните команду.
sudo crontab -e
и вставьте в конец файла следующую строку.
30 3 * * * /backup/backup_ed.sh > /dev/null 2>&1 # Run backup everyday at 3:30
Сохраните Сtrl+X.
Готово. Теперь в нашей директории /backup будет накапливаться архив ежедневного бэкапа. За 7 ночей будет накоплено 7 файлов.
В моем случае, каждый ежедневный архив занимает от 60 до 100 МБ.
В файле /var/log/backup.log сохраняется информация о ежедневном бэкапе. Конечно, лог будет расти, поэтому его необходимо делать rotate, но об этом в другой раз.
Теперь создадим второй файл, который будет запускаться по понедельникам. Он будет сохранять данные на VPNKI Space по протоколу FTP. Для этого.
2.1. Запустите Space и активируйте доступ через FTP по этой инструкции. - НЕДОСТУПНО, ИСПОЛЬЗУЙТЕ ДРУГОЙ FTP СЕРВЕР.
2.2. Зайдите любым ftp клиентом и создайте на Space директорию с названием /my_backups . В этой директории будут сохраняться ваши файлы резервных копий.
2.3. Теперь вернемся к RaspberryPi и поставим утилиту для выгрузки файлов wput (аналог wget). Ее мы будем использовать для передачи файлов по протоколу FTP с докачкой.
sudo apt-get install wput
2.4. Создадим в директории /backup новый файл backup_ew.sh . Как напоминание ew - every week, еженедельно.
sudo touch /backup/backup_ew.sh
2.5. Откроем его в редакторе nano.
sudo nano /backup/backup_ew.sh
Добавим следующий текст, но, по традиции, читаем комментарии к переменным в самом начале файла:
#!/bin/bash
#
# Send backup to VPNKI Space via FTP at 4:00 every Monday
# Stdout and Stderr redirects to log-file
#
# Example run - ./backup_ew.sh
#
### Переменные / Variables ###
log="/var/log/backup.log" # Логфайл.
vpnki_username="aivanov" # Ваше имя VPNKI. (ЛОГИН НА FTP СЕРВЕР).
vpnki_password="$1$90Ikjlkiusori0988777wygew" # Ваш API ключ VPNKI. (ПАРОЛЬ НА FTP СЕРВЕР).
days_to_store="30" # Период в днях хранения резервных копий.
echo -e "\n" >> $log 2>&1
echo -e "### Start section BACKUP EVERY WEEK ###" >> $log 2>&1
starttime=`date +%s` >> $log 2>&1
echo "Start time: $(date)" >> $log 2>&1
cd /backup
### Сохраняем архивированный файл в VPNKI Space ###
today_backup="backup-`hostname`-`date '+%Y-%m-%d'`.tar.gz" >> $log 2>&1
if [ -e $today_backup ]
then
sudo wput --basename=/backup/ /backup/$today_backup ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/ # ИСПОЛЬЗУЙТЕ URL СВОЕГО FTP СЕРВЕРА.
echo "$today_backup sent into VPNKI Space" >> $log 2>&1
### Ищем старые бэкапы старше 30 дней и удаляем их ###
wget -q --no-remove-listing ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/ # ИСПОЛЬЗУЙТЕ URL СВОЕГО FTP СЕРВЕРА.
while read line; do
if echo "$line" | grep -q backup-`hostname`
then
IFS=', ' read -r -a array <<< "$line"
filename="${array[8]}"
fullname=$(echo $filename | cut -f 1 -d '.')
extension1=$(echo $filename | cut -f 2 -d '.')
extension2=$(echo $filename | cut -f 3 -d '.')
name=$(echo $fullname | cut -f1 -d-)
hostname=$(echo $fullname | cut -f2 -d-)
year=$(echo $fullname | cut -f3 -d-)
month=$(echo $fullname | cut -f4 -d-)
day=$(echo $fullname | cut -f5 -d-)
backup_date=`date -d $year$month$day '+%Y-%m-%d'`
last_store_date=`date '+%Y-%m-%d' -d "$days_to_store day ago"`
if [[ $backup_date < $last_store_date ]];
then
old_backup=$name-$hostname-$year-$month-$day.$extension1.$extension2
echo "This backup is old and will be deleted - $old_backup" >> $log 2>&1
sudo wdel -q ftp://$vpnki_username:$Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript./my_backups/$old_backup >> $log 2>&1
fi
fi
done < /backup/.listing
### Удаляем локальные временные файлы ###
sudo rm /backup/index.* >> $log 2>&1
sudo rm /backup/.listing >> $log 2>&1
else
echo "ERROR: $today_backup not found!!!" >> $log 2>&1
fi
stoptime=`date +%s` >> $log 2>&1
duration=`expr ${stoptime} - ${starttime}` >> $log 2>&1
### Пишем в лог о завершении ###
echo "Stop time: $(date)" >> $log 2>&1
echo "Duration is `date +%H:%M:%S -ud @${duration}`" >> $log 2>&1
echo -e "### Stop section BACKUP EVERY WEEK ###" >> $log 2>&1
Сохраните Ctrl+X.
2.6. Делаем этот файл запускающимся при помощи команды.
sudo chmod 755 /backup/backup_ew.sh
2.7. Осталось добавить автозапуск бэкапа по понедельникам в 4:00. Для этого выполните команду.
sudo crontab -e
и вставьте в конец файла следующую строку.
0 4 * * 1 /backup/backup_ew.sh > /dev/null 2>&1 # Run backup every monday at 4:00
Сохраните Ctrl+X.
Вот собственно и все. Теперь у вас есть бэкапы глубиной в 7 дней на локальном USB устройстве. А на удаленном FTP сервере хранятся еще 4 бэкапа глубиной в месяц.
Остались три вопроса, о которых будет в следующий раз.
Если что-то не получилось или что-то неверно описано, то задавайте вопросы на форуме https://vpnki.ru/questions/support-forum/blog-news.
Если вы не планируете передачу видео трафика, то мы рекомендуем вам начинать с выбора тарифа PLAN-MYDEV. Если передача видео будет осуществляться, то стоит сразу начинать с PLAN-VIDEO. Если скорости хватать не будет, то в любое время вы можете изменить тариф на более скоростной.
Если вы используете нашу систему для решения бизнес задач, то начинайте с аналогичных тарифов с приставкой BUSINESS-.
Контролировать объем переданного трафика вы можете на странице с графиками использования.
Узнать реальную скорость своего VPN соединения вы можете утилитой iperf3 на странице "Инструменты". Стоит отметить, что вопрос скорости передачи полезных данных будет зависеть от трех факторов:
Худшим вариантом по скорости окажется вариант, когда в качестве транспортного протокола для VPN соединения используется TCP. При этом ваше устройство размещено далеко от сервера VPNKI. В этом случае, реальная скорость передачи данных будет определяться необходимостью подтверждения передачи каждого пакета в протоколе TCP.
Кроме настройки по этой инструкции вам могут пригодиться другие примеры конфигурации и использования системы.
По ссылкам ниже вы можете ознакомиться с информацией, связанной с темой VPN соединений.