Щоденне автоматичне інкрементальне резервне копіювання важливих бухгалтерських файлів.
Бекап (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