Совсем недавно по планете прокатились волны 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 появился стек задач вида:
И решена проблема синхронизации резервных копий после выполнения задач Veeam Backup (2 копии с разницей во времени).powershell.exe "C:\Scripts\syncfolder.ps1 -SourceFolder:G:\Backups\WEBAPPS -TargetFolder:\\192.168.0.232\backups$\WEBAPPS"
Решение проблемы создания автономных резервных копий:
Сама идея проста: • Подключите внешний жесткий диск 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 #резервное копирование
-
Шпионское По – Виноват Ваш Веб-Браузер!
19 Oct, 24 -
Незаменимый Бесполезный Человек
19 Oct, 24 -
Драгоценный Камень The_Sortable_Tree
19 Oct, 24 -
Альтернатива Itunes Для Пользователей Mac Os
19 Oct, 24 -
Лужков Купил Москва.ру
19 Oct, 24 -
Шпаргалка По Ubuntu
19 Oct, 24 -
Wi-Fi-Радио
19 Oct, 24