 
						Щоденне автоматичне інкрементальне резервне копіювання важливих бухгалтерських файлів.
Бекап (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 $Dirread -p "make your modification and press enter..."
umount -l $Dir
Файл 2019-09-26-raspbian-buster-lite.img потрібно записати за допомогою карт-рідера на носій
#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 працює в кілька разів швидще і не боїться поштовхів.
У нас він визначився як пристрій 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
#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
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
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
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
англ: How to create a task using Task Scheduler on Windows


