Сервер резервних копій Raspberry NAS

Сервер резервних копій Raspberry NAS


Щоденне автоматичне інкрементальне резервне копіювання важливих бухгалтерських файлів.

Бекап (backup) 1С7, 1С8, Медок, Мої документи.


На сьогоднішній день процедура резервного копіювання даних є необхідною для безпечного функціонування компанії.

Резервне копіювання дозволяє відновити дані у разі апаратних проблем, чи шифрування файлів криптовірусом. 

Тільки щоденне копіювання важивих даних на сторонній пристрій дозволяє відновити дані після криптовірусної атаки.

Ціна, яку потрібно заплатити зловмисникам коливається в межах 1 біткоїна (6000$) і це ще не гарантія, що вам пощастить і ви отримаєте після оплати крипто ключ.


В цій статті буде розглянуто приклад створення бюджетного сервера резервного копіювання даних на базі мікрокомпютера Raspberry під операційною системою Linux Debian.

Стаття розрахована на системного адміністратора з базовими знаннями Linux & Windows.  

Цей підхід не вимагає платного програмного забезпечення, є гнучким і зрозумілим для сисадміна.


Кінцевою метою статті є створення щоденних автоматичних інкрементальних копій з Windows машини, де розташовані бази даних бухгалтерської звітності Медок (MEDOC) та бази даних 1С бухгалтерії . Період циклічнчності копій становить 1 тиждень і щодня створюється ноий фрейм відмінностей. 


Придбати готовий Raspberry NAS можна в магазині "Остер" (Тернопіль, вул. Руська, 41) або на сайті: Raspberry NAS.

 

  • Частина 1. Створення завантажувального диску 

Мікрокомпютер Raspberry працює на процесорі ARM Cortex, споживає 4Вт потужності  і для нього розроблено декілька дистрибутивів на базі ОС Linux. 

https://www.raspberrypi.org/downloads/raspbian/

Завантажуємо останню версію дистрибутива

wget https://downloads.raspberrypi.org/raspbian_lite_latest -O raspbian-jessie-lite.zip


Розпаковуємо вміст архіву і отримуємо файл, котрий можна записувати на MicroSD
На даний момент файл імідж має назву 2019-09-26-raspbian-buster-lite.img

unzip raspbian-jessie-lite.zip


Перед записом іміджу на носій, його можна при потребі модифікувати.

Якщо в корені завантажувального розділу (boot) створити порожній файл з назвою ssh, то при першому запуску Raspberry буде автоматично активовано службу ssh
Скрипт монтування іміджу MountImg.sh

#!/bin/bash

Img=2019-09-26-raspbian-buster-lite.img
Dir=/mnt/img
Offset=$(fdisk -l $Img | grep img1 | awk '{print $2}')
mkdir -p $Dir 2>/dev/null
mount -o loop,offset=$(($Offset * 512)) $Img $Dir

read -p "make your modification and press enter..."
umount -l $Dir


Файл 2019-09-26-raspbian-buster-lite.img потрібно записати за допомогою карт-рідера на носій
Отримуємо перелік носіїв командою lsblk.У нашому випадку це /dev/mmcblk0 
ВАЖЛИВО переконатись, чи пристрій дійсно є тим, на який ми маємо записати інформацію. Інакше можна затерти інший диск без можливості відновлення!

#lsblk | egrep "sd[b-z]|mmcb"


Записуємо імідж на пристрій. 

Розмір файлу близько 2Гб і запис триватиме декілька хвилин 

#dd conv=fsync if=2019-09-26-raspbian-buster.img of=/dev/mmcblk0 status=progress bs=1M


Після успішного запису на пристрої буде створено два розділи.

/dev/mmcblk01 - розділ завантажувача (boot)

/dev/mmcblk02 - розділ кореневої файлової системи (root)


Деякі дистрибутиви Лінукс можуть автоматично монтувати новостворений носій, то в такому випадку його потрібно коректно відмонтувати.

#umount /dev/mmcblk01
#umount /dev/mmcblk02


Вставляємо MicroSD у Raspberry, підключаємо живлення, мережний кабель, монітор і реєструємось користувачем pi з паролем raspberry

Визначаємо, яку адресу нам видав роутер по протоколу DHCP і в подальшому будемо налаштовувати систему через віддалений доступ по протоколу ssh

#ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.120  netmask 255.255.255.0  broadcast 192.168.2.255


Входимо на Raspberry користувачем pi по протоколу ssh на адресу, яку ми отрисали командою ifconfig

ssh pi@192.168.1.120


  • Частина 2. Підключення завнішнього SSD диску

Рекомендовано в якості зовнішнього носія даних використовувати SSD диск, оскільки він споживає менше струму і напруга на Raspberry в момент включення вінчестера не просідає.
Крім того SSD працює в кілька разів швидще і не боїться поштовхів.
Для збільшення надійності сховища можна обєднати диски в програмний mdadm RAID  і підключити кожен вінчестер через зовнішню USB кишеню. 
В цій статті це опускається.

Підключаємо зовнішній вінчестер до Raspberry і визначаємо його назву в системі.
У нас він визначився як пристрій sda командою lsblk 
#lsblk


Якщо диск не форматовано, то форматуємо як файлову систему EXT4 

ВАЖЛИВО переконатись, чи пристрій дійсно є тим, який ми форматуємо, інше диск затреться без можливості відновлення!
#mkfs -t ext4 /dev/sda
#tune2fs –L nas_data1 /dev/sda

#lsblk -o name,mountpoint,label,size /dev/sda


Підключаємо диск в систему, щоб він автоматично монтувався при запуску Лінукс 

Параметр nofail вказує на те, що система буде завантажуватись далі, навіть при відсутності зовнішнього SSD носія.

Добавляємо запис у файл /etc/fstab

/dev/sda              /mnt/hdd/data1  ext4   defaults,auto,nofail          0       1

Створюємо директорію для монтування, монтуємо диск, перевіряємо наявність в системі
#mkdir -p /mnt/hdd/data1
#mount /mnt/hdd/data1

#df -h /mnt/hdd/data1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda        220G   0G  220G  99% /mnt/hdd/data1


  • Частина 3. Встановлення сервісу синхронізації даних Linux RSYNC

Оновлюємо пакети програмного забезпечення до останнйої версії
#apt update
#apt full-upgrade
#apt clean


Встановлюємо пакет синхронізації та резервного копіювання rsync

#apt install rsync


Створюємо конфігурвційний файл, в якому буде описано параметри віртуального сховища з правами запису 
/etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
transfer logging = true
max connections = 10
motd file = /etc/motd

[BackupWeek]
path = /mnt/hdd/data1/rsync/Week
comment = rsync one week daily backup
read only = false


Створюємо директорію і даємо права доступу службі rsync на запис

#mkdir -p /mnt/hdd/data1/rsync/Week
#chown -R nobody:nogroup /mnt/hdd/data1/rsync/Week
#chmod -R 755 /mnt/hdd/data1/rsync/Week


Перезапускаємо сервіс, щоб зміни вступили в дію

#service rsync restart


Сервіс повинен слухати порт 873

#netstat -lnp | egrep rsync --color=auto
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      31186/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      31186/rsync         


Перевіримо чи працює синхронізація на прикладі локальної директорії /etc/cron.d
Якщо все добре, то ми повинні побачити дані у папці /
mnt/hdd/data1/rsync/Week/test

rsync --archive /etc/cron.d 192.168.1.120::BackupWeek/test


  • Частина 4. Windows RSYNC

Тепер можна переходити до налаштування програмного забезпечення на стороні Windows компютера (клієнт)

Скачуємо rsync для windows в закладці free

Розпаковуємо архів в папку c:\Program Files\Backup\cwRsync

Створюємо в папці c:\Program Files\Backup\cwRsync скрипт-файл копіявання RsyncWeekCore.bat
rem VladVons@gmail.com, UA
rem created 22.01.2020
rem version 1.02

call :RSync
exit /B


rem ========== function()
:RSync

set Msg=Host:%Host%, Section:%Section%, SrcDir:%SrcDir%, Prefix:%Prefix%
call :Log "%Msg%"

rem SET
set _Prefix=%COMPUTERNAME%_%Prefix%
set _User=%User%@
set CurDir=%cd%

rem get day of week (DOW) 
rem https://www.e-learn.cn/topic/2964390
rem for /f "skip=2 tokens=2 delims=," %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /Format:csv') do set "DOW=%%A"
for /f %%d in ('"powershell (Get-Date).DayOfWeek.Value__"') do set DOW=%%d

rem clear remote directory trick 
if not exist %TEMP% mkdir %TEMP%
cd /d %TEMP%
rmdir /s /q %_Prefix%
mkdir %_Prefix%
rsync --archive --delete %_Prefix%/ %_User%%Host%::%Section%/%_Prefix%/%DOW%

rem create remote directory trick
rsync --archive %_Prefix% %_User%%Host%::%Section%

rem make file list. On a NAS side it used as success marker  
set FileList=.RsyncWeek.lst
dir /a-D /S /B %SrcDir% > %_Prefix%\%FileList%
copy %_Prefix%\%FileList% %SrcDir%\
rsync --archive --recursive %_Prefix%/ %_User%%Host%::%Section%/%_Prefix%/%DOW%

rem get _Excl variable
call :DoExcl cd /d %SrcDir% set Options=--verbose --progress --archive --recursive --delete --force --ignore-errors --backup --backup-dir=/%_Prefix%/%DOW%/ %_Excl% rsync %Options% . %_User%%Host%::%Section%/%_Prefix%/current cd /d %CurDir% call :Log "done" exit /B rem ========== function() :DoExcl rem InL: Excl, ExclExt set _Excl=%Excl% for %%a in ("%ExclExt:,=" "%") do ( call set "_Excl=%%_Excl%% --exclude=*.%%~a" ) rem Clear filters set Excl= set ExclExt= exit /B rem ========== function() :Log set FileName=Report.log set Str=%0, %date%, %time% %1 echo Str: %Str% echo %Str% >> %FileName% exit /B

Створюємо в папці c:\Program Files\Backup\cwRsync скрипт-файл копіювання файлів 1С бухгалтерії RsyncWeek_1C.bat
В цьому файлі прописуємо шлях з якого будуть братись резервні копії і відправлятись на сервер резервних копій.

echo on
rem backup 1c7 (DBF)

rem path=%path%; c:\Program Files\Backup\cwRsync;
  rem set User=Vlad@ set Host=192.168.1.120 set Section=BackupWeek set Prefix=1C set SrcDir=C:\Work\1c7\Main set Excl=--exclude=SYSLOG --exclude=NEW_STRU
set ExclExt=CDX,log,xls call RsyncWeekCore.bat

Синтакс файлу, який відповідає за конкретне завдання:
Host - віддалений сервер, на котрому запущена служба rsync
Section - назва віртуального сховище на віддаленому сервері 
Prefix - назва папки, куди буде зберігатись бекап
SrcDir - локальний шлях звідки буде братись резервна копія
Excl - маски файлів, що виключаються з обробки (через пробіли)
ExclExt - розширення файлів, що виключаються з обробки (через кому)


Для створення резервної копії програми електронної звітності МЕДОК потрібно скопіювати базу даних firebird.
файл RsyncWeek_Medoc.bat може мати такий вигляд.
echo on
rem backup MEDOC

rem path=%path%; c:\Program Files\Backup\cwRsync;
  rem set User=Vlad@ set Host=192.168.1.120 set Section=BackupWeek set Prefix=Medoc set SrcDir=C:\ProgramData\Medoc\Medoc call RsyncWeekCore.bat

Після виконання цього скрипта буде синхронізовано директорію на локальному компютері з віддаленим сервером резервних копій.
При першому запуску буде скопійовано повний вміст директорії і це триватиме деякий час.
При наступному запуску скрипта копіюються тільки нові файли, або файли котрі були змінені.  
Якщо резервне копіювання запускати кожен день, то на віддаленому сервері будуть створюватись папки згідно номерів дня тижня 1,2,3,4,5,6,7

В операційній системі Віндовс є можливість запуску програм по графіку (windows scheduler) 
Для цього потрібно створити завдання, котрі би автоматично запускали в заданий час скрипт RsyncWeek_1С.bat та RsyncWeek_Medoc.bat
З командної стрічки конструктор завдань запускається командою  taskschd.msc

Головними параметрами є
- час запуску 
- періодичність (щодня)
- робочою директорія (c:\Program Files\Backup\cwRsync)
- запуск не залежно від реєстрації користувача

Детальніше про те, як користуватись Scheduler можна знайти в пошуковій системі 
укр: Планувальник завдань» в Windows
англ: How to create a task using Task Scheduler on Windows

Придбати готовий Raspberry NAS можна в магазині "Остер" : Raspberry NAS


Підписуйтесь і будьте в курсі новинок! Ми в соціальних мережах:   Facebook Остер Тернопіль   Telegram Остер Тернопіль - продаж і ремонт комп'ютерної техніки