Многоступенчатая Организация Резервного Хранилища Для Самых Маленьких

Совсем недавно по планете прокатились волны WannaCry и его клонов.

А сама проблема программ-вымогателей стоит перед системными администраторами уже более 10 лет. Рано или поздно все реализованные и реализованные меры по защите от программ-вымогателей не помогают, и все же находится пользователь, который открывает письмо, вложение и получает полный «букет».

Системный администратор также получает массу «приятных и увлекательных» часов.

И тогда все отчетливо начинают понимать, что нужны резервные копии (много, разные, в разных местах).

Те.

Настоятельно рекомендуется следовать правилу 3-2-1, придуманному и описанному Питером Крогом.

Данная статья — пример, который помогает реализовать это правило «на коленке» — без приобретения дорогостоящего оборудования (в условиях жесткой экономии).



Итак – условия решаемой задачи:

• Имеется небольшая среда виртуализации от Vmware (парочка ESXi серверов, vCenter, самый дешевый лицензионный пакет — начальный Kit — в общем, для данной статьи это не важно.

Для Hyper-V подойдет та же статья); • Имеется десяток виртуальных машин, содержимое которых не хочется потерять, если их обработает автоматизированный скрипт-вымогатель; • Имеется система резервного копирования от Veeam (бесплатная версия, резервное копирование осуществляется с помощью PowerShell и Task Schedule).



Задания:

• Делать резервные копии сервера один раз в день ночью; • Репликация копий (копирование на NAS-сервер с FreeBSD + ZFS).

Кстати, на ZFS тоже делаются снапшоты, которые автоматически удаляются по заданному расписанию (zfSnap+Cron); • Имейте автономную копию «резервных копий» на съемном носителе.



Выполнение:

Поскольку основной сервер, делающий резервные копии запущенных виртуальных машин, управляется операционной системой Windows Server (в связи с тем, что Veeam Backup на данный момент работает только на этой ОС), для реализации задач было решено использовать PowerShell.

Решение проблемы синхронизации резервных копий между основным сервером (Windows) и NAS-сервером (FreeBSD):

Для решения проблемы требовался скрипт, который запускался бы через Планировщик задач и синхронизировал каталог А с сетевым ресурсом Б, доступным по протоколу SMB. Сначала я попробовал использовать robocopy — но тесты показали очень низкую скорость работы полученного скрипта.

И я решил реализовать этот скрипт на другом инструменте.

Пятиминутный поиск и 10 минут тестирования показали наличие вполне работоспособного и готового решения: powershell-синхронизация-папки Сценарий оказался отличным: • Работает как с локальными дисками, так и с сетевыми ресурсами; • Позволяет исключить определенные файлы из задачи; • Позволяет синхронизировать файлы по заданному шаблону • Работает на максимальной скорости (т. е.

на той скорости, которую могут выдать оборудование и сеть — синхронизация происходит на этой скорости, в отличие от робокопии).

В результате на главном сервере в Task Schedule появился стек задач вида:

  
  
  
  
  
  
  
  
  
   

powershell.exe "C:\Scripts\syncfolder.ps1 -SourceFolder:G:\Backups\WEBAPPS -TargetFolder:\\192.168.0.232\backups$\WEBAPPS"

И решена проблема синхронизации резервных копий после выполнения задач Veeam Backup (2 копии с разницей во времени).



Решение проблемы создания автономных резервных копий:

Сама идея проста: • Подключите внешний жесткий диск USB 3.0 емкостью 2 ТБ к серверу с помощью Veeam Backup. • Большую часть времени мы храним его в автономном режиме (и это защищает нас от автоматических программ-вымогателей); • При выполнении скрипт переводит диск в Online, создает директорию с текущей датой, копирует в нее текущие резервные копии и по завершении выполнения снова переводит диск в Offline. Выполнение: Отправной точкой является команда: Get-Disk — нам нужно понять, какие диски у нас есть в системе и виден ли нам внешний USB-накопитель:

PS C:\Windows\system32> Get-Disk Number Friendly Name OperationalStatus Total Size Partition Style ------ ------------- ----------------- ---------- --------------- 1 WDC WD30PURX-64P6ZY0 Online 2.73 TB GPT 0 WDC WD10EZEX-60M2NA0 Online 931.51 GB GPT 2 WD Elements 25A3 USB Device Offline 1.82 TB GPT

Теперь нам нужно поместить ссылку на USB-накопитель в переменную.

Для его идентификации предлагается использовать атрибут «Дружественное имя».

Если вы предпочитаете использовать другие атрибуты, распечатайте полный список (get-disk | select *).

Или посмотрите список доступных свойств и методов (get-disk | get-member).

Итого первая часть скрипта:

# Find USB disk by FriendlyName $mybackupdisk = get-disk | where {$_.FriendlyName -like 'WD Elements 25A3 USB Device'}

Далее необходимо перевести диск из Оффлайн в Онлайн, а также убедиться, что диск находится в режиме Чтение-Запись (иногда по неизвестной причине после перехода в Онлайн диск становился доступным только для чтения.

Чтобы узнать диск номер, используйте свойство Number ($mybackupdisk.Number).

Получаем кусок:

# Make disk Online Set-Disk -Number $mybackupdisk.Number -IsOffline $False Start-Sleep -s 5 # Make disk Writeable (some times it ReadOnly after online - shit happens.) Set-Disk –Number $mybackupdisk.Number -IsReadonly $False Start-Sleep -s 5

Для определения буквы диска проделаем следующий трюк — поставим на USB-накопитель метку (имя): VMUSBBACKUPS (либо через Диспетчер дисков, либо с помощью команды Set-Volume).

Далее командой Get-Volume определяем букву подключенного USB-накопителя (предварительно переведя его в Online):

# Find Disk Volume $usbvolumename = Get-Volume | where {$_.FileSystemLabel -like 'VMUSBBACKUPS'}

И собственно копирование необходимых данных на диск: Создайте каталог с текущей датой в имени:

$date = Get-Date $newbackupfolder = $date.ToString("yyyy-MM-dd") # Full Backup Fath $createdirfullpath = $usbvolumename.DriveLetter + ":\" + $newbackupfolder # Create Backup Directory New-Item -ItemType directory -Path $createdirfullpath -Force -Confirm:$false Start-Sleep -s 2

Копирование резервных копий:

# Source Backup Dir (with backups) $sourcebackup = "F:\Backups\VCENTER\" # Copy to USB from Disk Copy-Item $sourcebackup -Destination $createdirfullpath -Recurse Start-Sleep -s 5

Другой вариант, когда нам не нужно каждый раз создавать новые каталоги и копии, а перезаписывать файлы новыми версиями, тогда мы используем ранее найденный скрипт для синхронизации каталога А с Б:

# Sync from HDD to USB: C:\Scripts\syncfolder.ps1 -SourceFolder:F:\Backups\ -TargetFolder:$usbvolumename.DriveLetter:\VMs\ Start-Sleep -s 5

В любом случае, когда вы закончите копирование или синхронизацию, крайне желательно сбросить кэш операций (из ОЗУ на HDD/USB) командой:

# Write USB Disk Cache before offline Write-VolumeCache $usbvolumename.DriveLetter Start-Sleep -s 5

И не забудьте еще раз перевести диск из Online в Offline:

# Place USB to Offline Set-Disk -Number $mybackupdisk.Number -IsOffline $True



Полученные результаты:

• Получены резервные копии в трех местах (сервер Windows, сервер FreeBSD, USB-диск); • Два типа хранения (в шарах и на диске); • Один перевозчик другого типа является судьей.

Можно вообще иметь пару дисков - и просто менять их 1-2 раза в месяц (один на сейф).

Поскольку 95% времени USB-накопитель находится в автономном режиме, его всегда можно безопасно удалить с сервера.



Моя статистика:

• данная схема работает 6 месяцев без сбоев; • объем синхронизируемых данных (сжатые и дедуплицированные резервные копии – от 500 до 700 ГБ); • Время синхронизации с USB-накопителем – в среднем 1 час 20 минут (1 раз в неделю по выходным).

Полные сценарии можно скачать с Google Disk: Примеры резервного копирования Теги: #Резервное копирование #PowerShell #резервное копирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.