Итак, Вы системный администратор. У вас в хозяйстве есть некоторое количество разнообразного оборудования и серверов с произвольным набором данных. Вы отвечаете за работоспособность инфраструктуры, целостность данных и за очень многие вещи, о которых умалчивают должностные инструкции.
Как создать систему резервного копирования за очень дешево, а лучше всего вообще бесплатно?
Не буду заниматься рассмотрением теории, а просто поделюсь личным опытом.
Имеем типичную ситуацию: бюджетное учреждение, скромные зарплаты, старенькая техника, запланированного бюджета на ИТ нет совсем, покупки оборудования и программного обеспечения происходят от случая к случаю, когда в организации появляются какие-то деньги или когда прижимает уже окончательно. Необходимо обеспечить надежную и простую систему резервирования важных данных, попутно не разорив организацию, закупая самое лучшее программное и аппаратное обеспечение для решения этой проблемы. Отсутствие средств не избавляет от соблюдения уголовного законодательства и проверок соответствующих органов, поэтому все программное обеспечение, используемое в организации строго лицензионное. Решение проблемы резервного копирования с помощью «пиратского» программного обеспечения исключается.
Что хочется получить от системы резервного копирования?
Конечно же – получение резервных копий, желательно простым и понятным способом, гибкую настройку под потребности, простоту извлечения файлов и вменяемую цену за эти удовольствия.
Так уж исторически сложилось, что основной платформой на серверах и рабочих станциях нашей организации является Microsoft Windows различных версий. Поискав различные решения под эту платформу, попробовав разные программы, мы пришли к неутешительному выводу: купить удобное и надежное решение по резервному копированию мы пока не в состоянии. Бесплатные решения по тем или иным причинам нам не подошли. Был или неудобный формат хранения копий или неудобство настройки под наши нужды или что-то еще. Пробовали решения на Linux системах, но опыта эксплуатации этой операционной системы мало, хотя это конечно нас не оправдывает.
Обдумав сложившуюся ситуацию, решили пойти своим путем.
Еще до поиска подходящего решения была проведена полная ревизия того, что вообще следует резервировать. При этом попытались сами для себя ответить на следующие вопросы:
какие важные данные есть в организации?
где они располагаются?
как часто нужно делать резервную копию данных?
как долго ее нужно хранить?
После этого первого этапа у нас получилась небольшая таблица, содержащая обобщенную информацию о том, какие данные нужно хранить, где их собирать и краткое описание этих копий:
Определив наборы данных для резервного копирования можно двигаться дальше. Попутно стало ясно, что все данные разные, многие требуют своего индивидуального подхода к сохранению. Если обычные файлы можно просто поместить в архив и его уже хранить как резервную копию, то с базой данных так поступить уже сложнее, нужно предварительно выгрузить данные и только потом помещать их архивную копию, или же предварительно остановить сервис конкретной базы данных и затем ее поместить в архив. Таким образом, требуется предварительная индивидуальная подготовка каждой резервной копии.
Резервные копии, как и куриные яйца, храниться в одной корзине не должны. Даже если эта корзина поддерживает RAID.
Было решено создавать многоуровневую систему резервирования – в нашем случае получилось 4 уровня.
Первый уровень – это копия данных, которая хранится в виде архива на том же сервере, где хранятся сами данные, но желательно это делать на разных дисковых массивах. При этом формируется архив, который потом передается на все остальные уровни хранения. Считаем что знание, какие данные извлечь и как это сделать - привилегия сервера, который является источником этих данных.
Второй уровень – данные копируются на другой физический сервер, назовем его основным хранилищем резервных копий. Это может быть специально выделенный сервер для резервных копий или любой другой компьютер, где есть свободное место. Мы решили создать выделенный сервер, обладающий достаточным количеством дискового пространства.
Таким образом, в пределах одной серверной комнаты было получено уже две копии данных. Но этого недостаточно для надежного хранения данных. Ситуации бывают в жизни разные, в том числе самые неприятные. Серверная может быть уничтожена на физическом уровне: пожар, затопление и прочие неприятности. Нужно хранилище за пределами данного помещения.
Третий уровень - был подготовлен еще один сервер, назовем его удаленное хранилище резервных копий. В нашем здании присутствует подвал с разной степени заброшенности помещениями и одна комнатка была размером ровно таким, чтобы установить туда 19 дюймовую стойку. Присутствовала система вентиляции, укрепленные стены и толстая металлическая дверь толщиной в сантиметр. Для чего она была предназначена изначально, истории не сохранилось, но под наши нужды подходила идеально. В комнату была установлена стойка с одним сервером и блоком бесперебойного питания. Если основная серверная комната будет уничтожена, то эта бронированная комнатка способна пережить даже обрушение здания. Помимо физической удаленности основной серверной от импровизированной, был предпринят еще один шаг – удаленный сервер выведен из рабочего домена, и в домене не осталось никаких учетных записей, которые бы имели доступ к ресурсам этого сервера. Таким образом, если учетная запись, под которой происходит резервирование данных, скомпрометирована (например, под ней будет запущен вредоносный код), то у нее не будет возможности попасть к третьей копии данных. Данные на этот выделенный сервер могут попасть только тогда, когда этот сервер сам заберет данные. Никаких открытых ресурсов для доступа снаружи, на этом сервере так же не осталось, только доступ удаленного рабочего стола с учетной записью самого сервера.
Четвертый уровень – для последнего уровня защиты было решено выделить несколько жестких дисков, на которые раз в несколько месяцев будут копироваться данные. Диски хранятся в сейфе и для копирования подключаются к одному из серверов с помощью док-станции. После копирования убираются обратно в сейф. Также эти диски можно хранить дома у одного из сотрудников, чтобы обеспечить большую территориальную изоляцию этих копий.
На каждом из этих уровней хранится не одна копия данных, а многодневные копии, которые накапливаются и удаляются по мере устаревания.
Перейдем к этапу реализации.
В качестве основного средства для создания резервных копий был выбран архиватор «7-zip». Программа довольно универсальная, обладающая огромными возможностями и совершенно бесплатная. Одной из возможностей является функция работы с файлами списками. Это обычный текстовый файл, в котором в виде текстовых строк перечисляются каталоги или файлы, для добавления в архив. Это дает возможность создания универсального скрипта для архивации, который никак не связан с самими данными, нужна только ссылка на текстовый файл с перечислениями нужных ресурсов.
Как уже упоминалось, данные на серверах самые разнообразные. Значит на сервере источнике данных нужен небольшой скрипт, который предварительно подготовит данные для архивации, а затем передаст управление универсальному скрипту, который и произведет действия по созданию архива, а также его передачу в соответствии с прописанными правилами на сервер основного хранения. Помимо всего, нам как «администраторам-параноикам» желательно бы знать, а все ли прошло хорошо в ходе архивации, т.е. нужна функция ведения логов процесса и отправка извещений об ошибках. Это тоже можно возложить на универсальный скрипт.
«Да будет скрипт!»
Основным хранилищем резервных копий назначен специально собранный сервер из второго уровня нашей градации, который также будет основным владельцем универсального скрипта, и именно на него будут поступать резервные копии с остальных рабочих серверов.
Окно для создания резервных копий для нашей организации приходится на ночные часы и выходные дни.
На сервере источнике данных, с помощью встроенного в операционную систему планировщика ночью запускается задание, которое сперва подготавливает данные к архивации (если это необходимо), а затем вызывает универсальный скрипт. Пример такого файла приведен ниже:
@echo off
set pBData=C:\Backup_Data
set pNet=\\Server-3\Backup_all
set pDate=%date%
rem Обновление клиентского скрипта, если оно существует
xcopy %pNet%\#_client\*.* %pBData%\*.* /D /Y /R /E
call %pBData%\backup.bat Budget %pBData% %pNet% %pDate%
В первую очередь задаются параметры запуска универсального скрипта:
pBData – каталог, куда будут размещены копии необходимых скриптов, файл список с перечислением архивируемых ресурсов, а также подкаталоги с результатами резервного копирования и логи выполнения.
pNet – доступный сетевой ресурс на основном сервере резервного копирования, где хранятся резервные копии и универсальные скрипты.
pDate – дата формирования резервной копии, она будет присутствовать в имени формируемой копии и лог файлах.
Затем выполняется контроль версии универсального скрипта, если файл на клиенте не совпадает с расположенным на основном сервере резервного копирования, то файл будет обновлен. Скрипт копируется на сервер источник данных для того, чтобы если вдруг будет разорвана связь с основным сервером резервного копирования, сам процесс создания копии все равно был бы начат, вне зависимости от того, работает ли второй сервер в данный момент или нет.
После этих действий выполняется универсальный скрипт, при этом первым параметром передается «имя копии», в приведенном примере это «Budget».
Еще немного про структуру папок на сервере источнике данных. По адресу указанному в переменной pBData, должны быть созданы следующие подкаталоги:
- #_time_log – здесь будет создан файл с логами результатов выполнения резервного копирования.
- «имя копии» – каталог с именем создаваемой резервной копии, это же имя идет в качестве параметра при вызове универсального скрипта.
Также в этом каталоге должен быть файл «имя копии.ls». В нем в виде текстовых строк перечисляются каталоги, в которых расположены данные подлежащие резервированию.
На основном сервере резервного копирования по адресу из переменной pNet должны быть следующие файлы и подкаталоги:
- #_client – каталог, содержащий в себе файл универсального скрипта, а также еще несколько скриптов вызываемых в процессе работы универсального скрипта. Все файлы из этого каталога копируются на сервер источник данных и запускаются именно оттуда. Для обновления скрипта на всех клиентах – необходимо обновить его в данной папке. Во избежание ненужных проблем желательно к этой папке сделать доступ для клиентов только на чтение.
- #_time_log – каталог, в котором собираются логи о времени и результате выполнения резервного копирования со всех задействованных клиентов. Файл с логом называется по имени копии «имя копии.log». Также в этом каталоге располагается обобщенный лог «total_mail.log», на его основе формируется электронное письмо для отправки системному администратору.
Рассмотрим содержимое универсального скрипта «backup.bat»
@echo off
rem Системное имя резервной копии
set cName=%1
rem Каталог для резервного копирования на клиенте
set pBData=%2
rem Расположение в сети папки с копиями и скриптами
set pNet=%3
rem Дата запуска процедуры резервного копирования
set pDate=%4
rem Файл с информацией о времени выполнения архивации
rem и ее размере
set fTime=%pBData%\#_time_log\%cName%.log
rem Обобщенный лог для отправки администратору
rem на электронную почту
set fMail=%pNet%\#_time_log\total_mail.log
set dStart=%date%
set tStart=%time%
rem Количество дней хранения архивов
set KOL_DAY_COPY=5
В первой части файла определяются основные переменные. Если какое-то значение используется по тексту несколько раз, то совершенно логично сохранить это в виде переменной, это легче понимать и сопровождать.
Время хранения архивов на основном сервере резервного копирования прописано в универсальном скрипте в переменной «KOL_DAY_COPY», по умолчанию 5 дней.
Продолжаем:
rem Если каталога для хранений копии нет,
rem то его нужно создать
if not exist "%pBData%\%cName%" ( mkdir %pBData%\%cName% )
rem Параметры архива:
rem –r Просматривать подкаталоги
rem –p Пароль
rem -ssw Архивировать файлы открытые на запись
rem -y Отключить интерактивные запросы пользователю,
rem на все вопросы отвечается ДА
rem -t7z Формат файла 7z
rem -mx=7 Степень сжатия 7 - maximum (по умолчанию 5)
rem -mmt=on Использовать паралельную обработку
rem -myx=7 Использовать анализ exe файлов,
rem на возможность дополнительного сжатия
rem Определяем архиватор
set aName="%ProgramFiles%\7-Zip\7z.exe"
rem Задаем параметры архивации
set param="a -r -pPassword -ssw -y -t7z -mmt=on"
rem Формируем имя файла архива
set pFName="%pBData%\%cName%\%pDate%-%cName%.7z"
%aName% %param% %pFName% @%pBData%\%cName%.ls
rem Получаем размер файла, для последующего анализа
if exist %pFName% ^
for %%i in (%pFName%) do (set fLen=%%~zi) else (set fLen=0)
rem Копируем полученный архив на сервер хранения
robocopy %pBData%\%cName%\ %pNet%\%cName%\ %pDate%-%cName%.7z
set dEnd=%date%
set tEnd=%time%
Описание используемых параметров архиватора в виде комментариев также поместим в скрипт, это очень помогает при отладке, да и в дальнейшем будет понятно, что к чему без обращения к документации.
После формирования архива, получаем его размер в переменную fLen, для последующего анализа.
В переменных dStart, dEnd, tStart, tEnd запоминаем дату и время до и после архивации. Это поможет оценить время, затраченное на создание архива, что в дальнейшем помогает правильно составить расписание для запуска процедуры.
Для передачи архива с сервера источника данных на сервер основного хранилища резервных копий используется утилита «robocopy.exe». Если в системе данная утилита отсутствует, то нужно установить Microsoft Resource Kit 2003. Местоположение утилиты нужно прописать с помощью системной переменной PATH. Стандартная команда «xcopy» на больших файлах и по сети работает не стабильно.
К сожалению, пароль на создаваемый архив прописан в открытом виде внутри скрипта, но при грамотном разграничении доступа это не так страшно.
И третья часть универсального скрипта, уже заключительная – это сохранение логов и обработка архивов:
echo %cName% %dStart% %tStart%-%dEnd% %tEnd%:%fLen%>>%fTime%
rem Формирование статистики для отправки администратору
echo %cName% %dStart% %tStart% %dEnd% %tEnd% %fLen%>>%fMail%
rem Если файл с архивом меньше килобайта, то что-то не так!
if %fLen% LSS 1024 (
echo WARNING: Size %cName% too small ! >> %fTime%
cscript "%pBData%\sendMail.js" "admin@a.ru" ^
"error@a.ru" "Error backup %cName% %dStart%" ^
"The size of the copy %cName%, is too small (%fLen%)."
)
rem Удаление старых копий на источнике данных
cd /D %pBData%\%cName%
wscript %pBData%\del_old.vbs %KOL_DAY_COPY%
rem Удаляем старые копии файлов на основном сервере.
net use b: /delete /y
net use b: %pNet%
cd /D b:\%cName%\
wscript %pBData%\del_old.vbs %KOL_DAY_COPY%
net use b: /delete /y
cd /D %pBData%\
rem Отправляем итоговый лог файл на сервер хранения
copy /y %fTime% %pNet%\#_time_log\*.*
В ходе создания резервной копии создаются два файла с логами.
Первый файл это просто накопительный лог, в котором каждый день появляется новая строка, содержащая имя копии, дату и время начала, а также конца операции резервного копирования. В конце этой строки записывается размер копии.
Второй файл содержит строки с той же информацией, но по всем копиям подряд, в конце всех операций он попадает в почтовый ящик к системному администратору. Его по расписанию отправляет еще один скрипт, который здесь не описывается.
Один раз в неделю происходит копирование данных с основного хранилища резервных копий на удаленное хранилище резервных копий, которое расположено в изолированном помещении. Количество дней хранения на этом сервере ограничено размером дискового пространства. Если файл уже присутствует на удаленном сервере, он уже не копируется. Скрипт, который этим занимается, не приводится, он построен на основе предыдущего.
Для полноты картины осталось привести еще два файла, которые располагаются в каталоге «#_client» основного хранилища резервных копий.
Процедура отправки письма администратору оформлена в виде скрипта на Microsoft JScript «sendMail.js»:
var arg = WScript.Arguments;
var sTo = arg(0); // адресат
var sFrom = arg(1); // от кого
var sSubject = arg(2); // тема письма
var sBodyFile = arg(3); // файл с текстом для отправки
var refMsg = WScript.CreateObject("CDO.Message");
refMsg.To = sTo;
refMsg.From = sFrom;
refMsg.Subject = sSubject;
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var ts = FSO.OpenTextFile(sBodyFile, 1, false);
refMsg.Textbody = ts.ReadAll();
ts.Close();
refMsg.BodyPart.Charset ="windows-1251";
var strA="http://schemas.microsoft.com/cdo/configuration/";
refMsg.Configuration.Fields.Item(strA+"sendusing")=2;
refMsg.Configuration.Fields.Item(strA+"smtpserver")="a.ru";
refMsg.Configuration.Fields.Item(strA+"smtpserverport")=25;
refMsg.Configuration.Fields.Update();
refMsg.Send();
Процедура удаления устаревших архивных файлов реализована на Microsoft VBScript (в данном случае этот язык выбран из-за более простой работы с датами), скрипт просматривает текущий каталог и удаляет все «*.7Z» файлы старше указанного количества дней.
Файл «del_old.vbs»:
Dim fs, i, fc, ArgObj, days
Set ArgObj = WScript.Arguments
if(ArgObj.Count > 0) then
days = ArgObj.Item(0)
else
days = 5
end if
daylimit = now - days
Set fs = CreateObject("Scripting.FileSystemObject")
Set fc = fs.GetFolder(".").Files
For Each i in fc
if (Ucase(right(i.name,2)) = "7Z") then
if i.DateCreated < daylimit then
fs.DeleteFile i.name, true
end if
end if
Next
Еще одним желательным пунктом ко всей проделанной работе станет небольшая табличка с расписанием запуска создания резервных копий на разных серверах. С помощью нее можно грамотно распределить время запуска так, чтобы они не мешались друг другу при копировании, поскольку все копии конечным своим пунктом должны попасть на основной сервер резервного копирования.
Пример расписания запуска процессов на серверах источниках данных приведено в следующей таблице:
Подведем итог.
Не считая затраты на аппаратное обеспечение (которое у вас уже наверняка есть), программная часть системы резервного копирования обошлась бесплатно. Мы получаем набор из полных ежедневных копий, глубиной столько дней, сколько укажем в настройках скрипта и насколько хватит доступного дискового пространства. Копии хранятся на нескольких серверах в сети. Их легко посмотреть и извлечь содержимое, для этого не нужно какого-то специализированного программного обеспечения, кроме архиватора. Копии защищены паролями.
Главный минус этого подхода в том, что копии полные и для больших, редко меняющихся данных этот способ неудобен. Механизм разностных копий реализуется чуть-чуть по-другому и эта тема уже другой статьи.
Комментарии (23)
Akina
01.03.2022 14:10+1Как показывает опыт, наиболее часто теряемая и повреждаемая информация (которая иногда оказывается к тому же достаточно критичной) располагается не на сервере, а на рабочих столах (угу, даже не в папке Документы) компьютеров пользователей... особенно когда
бюджетное учреждение, скромные зарплаты, старенькая техника, запланированного бюджета на ИТ нет совсем
imotorin
01.03.2022 15:37+4вот и выросло поколение, которое даже не подозревает про ленты и offline хранение бэкапов
NAI
01.03.2022 16:51Давайте будем откровенны, ленты - дорого. В свое время (это было 3-4 года назад), для 1 Тб данных у меня вышло что-то около 200к. Не считая ручного труда по замене кассет и проблем с их хранением (сейф, другое помещение и пр.).
А вот оффлайн, да, с этим попроще, чем кстати и воспользовался. Удаленная площадка, "PLC" который включал корзину по SNMP и, после завершения бэкапа, отключал ее от питания. Но это было прям совсем решение для бедных, сейчас бы выбивал какой-ндь простейший Synology с WoL.
arwa Автор
01.03.2022 18:41Ленты когда-то были, но хранение на обычном жестком диске, в настоящий момент самый дешевый вариант, когда общий размер важных копий не превышает 2 терабайта. Что и используется.
NAI
01.03.2022 17:03+1Microsoft JScript...
robocopy ...
2022 год, 13 лет как Powershell идет в составе ОС Windows...
В Server 2012 уже был Windows Image Backup, который из коробки умеет бэкапиться в шару и слать уведомления, работать с shadow copy и еще много чего в том числе ротацию и проверку...
Если в системе данная утилита отсутствует, то нужно установить Microsoft Resource Kit 2003.
Если у вас до сих пор стоит 2003 сервер, то, боюсь, бэкапы это меньшая из ваших проблем. Ребят, так то системе 20 лет скоро, я конечно понимаю, что совершенство не нуждается в изменениях, но... блин, серьезно 2003?
arwa Автор
01.03.2022 18:52Нет, 2003 конечно не используется, но "ноги" растут примерно с тех времен.
Естественно были попытки снимать копии встроенным средством, но по разным причинам это оказалось менее удобно, чем "самописный" скрипт.
Я прекрасно понимаю слишком сильную простоту реализации, в которую можно добавить кучу возможностей, но во главу угла здесь ставилось возможность доступа к данным этого бэкапа лишь с помощью архиватора, с любого рабочего места. Открыл, достал файл, закрыл.
Приведенный здесь вариант не конечная итерация этой "поделки". Сейчас это немного более сложное средство, с разностным копированием и более сильным контролем. Частично реализованное на Python для работы и в Linux среде.
Первоначально скрипт был сделан, кстати, на PowerShell, но не понравился он по скорости работы и "монстрообразности" самого языка. Понимаю это вкусовщина, но PowerShell визуально некрасивый язык. CMD, VBS, JSCRIPT тоже не красавцы, но визуально в них быстрее поймешь что происходит.
vic_ol
01.03.2022 18:07Для подобных задач резервного копирования и автоматизации вообще, много лет использую бесплатную программу xStarter. Такое же резервирование и отправка по FTP на внешний сервер в xStarter-е делается примерно в двадцать строчек скрипта. И попробую предложить вариант команды удаления старых копий старше 5 дней в cmd "forfiles /p E:\BACKUP /m *.7z /s /d -5 /c "cmd /c del @file" "
homeles
01.03.2022 20:13Автор наверное забыл написать, что бэкапы баз SQL совершаются штатными средствами SQL ?!?: Ибо "копи-пастом" файлы баз сбэкапить "некомильфо" - за целостность (и доступность) никто не ручается. А насчет стратегии бэкапов - так это классика, самый последний по очереди бэкап должен лежать за 100500 километров от серверной.
arwa Автор
02.03.2022 04:17Я в статье указал - что процедура снятия бэкапа - прерогатива сервера владельца данных. Скрипт уже забирает то, что сервер ему предложил в качестве копии. Естественно MS SQL снимается стандартными средствами и полученные *.bak файлы уже объединяются в один архив этим скриптом. Лезть архиватором к файлам работающей базы, было бы верхом глупости.
Akina
02.03.2022 08:20Лезть архиватором к файлам работающей базы, было бы верхом глупости.
Как обычно, не без исключений. Например, для резервирования базы Firebird проще и быстрее остановить процесс сервера и выполнить файловое копирование файла БД, чем заморачиваться на штатные средства изготовления бэкапа. Я уж не говорю об SQLite.
arwa Автор
02.03.2022 10:47Ключевая фраза здесь "к файлам работающей базы". Естественно можно остановить любой сервер и забрать что нужно. Так, например, поступаем с Лотусом.
TimoshkinVlad
02.03.2022 08:47У меня такая же фигня с домашним резервированием. Стоит nas на него копируются файлы раз в период. Одни реже, другие чаще. Но есть проблема с сеткой. Точнее с WiFi. Гигабайты прокачиваются не очень то и быстро. Нужно оптимизировать. Но руки не доходят.
13werwolf13
02.03.2022 10:52<joke>
ну тут оптимизаций то на две копйки:
1) нафиг wifi
2) добавить к scp флаг -C</joke>
ruraic
02.03.2022 11:43@arwa, а почему не рассматривали специализированные решения? Ну например тот же Urbackup - забирает бэкапы своим клиентом, может снимать образы дисков, умеет копировать БД при помощи ShadowCopy - решает все прочие проблемы, которые вы тут описываете. Есть веб-интерфейс, уведомления на почту и пр.
От себя добавлю, что неплохо показал себя подход - сервер бэкапов + локальные бэкапы на отдельный массив (или даже просто hdd), скрытый от системы при помощи встроенной системы бэкапов Windows. Насколько мне известно, пока нет известных случаев, когда бы шифровальщики добрались до таких скрытых томов. Но даже если это и случится - есть копия на сервере бэкапов.
fpir
03.03.2022 11:03Не, с точки зрения администрирования - это всё очень интересно, особенно это обсуждать. А с точки зрения "по жизни".... Блин, если админу нечем заняться. Всё это решил бы какой-нить Акронис в 5 кликов. Сколько он там сейчас стоит? 20 за сервер? А если это дорого, сколько админ поучает? Тех же 20? Так может проще в майкор пойти, или в деливери, там поболе, чем в майкоре.
arwa Автор
03.03.2022 18:23Acrоnis конечно решил бы. Продукт хороший и рассматривался, даже коммерческие предложения запрашивались. Но итоговая цена на тот момент оказалось такая, что бюджет отдела съедала не подавившись.
Сейчас он бессрочный стоит почти 50 000 за сервер, 20 000 по подписке, т.е. или 500 000 за раз, до того как после очередных обновлений все перестанет работать и станет просить более свежую версию, или 200 000 выкладывать каждый год. Именно поэтому и было придумано такое решение, которое покрывало наши потребности на то время, на 90%.
maledog
Дешево? Да. Без лишних затрат - не сказал бы. Все может рухнуть в тот момент когда что-то слетит и понадобятся резервные копии. А дальше выяснится что их нет. Такая вещь как архивация требует ставить проверки везде где только можно. Я за 14 лет работы системным администратором на всякое насмотрелся. По вашему скрипту - проверяйте результаты выполнения команд. (при этом xcopy/robocopy часто возвращают 0 даже если файл не скопирован, особенно при копировании на сетевую шару). Проверяйте размеры файлов(не просто, что он больше нуля) и контрольные суммы. Проверяйте наличие свободного места на диске. Удаляйте старые копии только если новые скопированы успешно. Используйте нестандартные расширения для имен архивов(частично убережет вас от шифровальщиков). Архивируйте в несколько хранилищ. Выбирайте надежные и быстрые протоколы при копирования по сети. Следите за тем чтобы ваши скрипты не мог дописать злоумышленник....
Akina
И дополнительно - неплохо бы проверять, что из созданной копии можно что-то вменяемое извлечь.
maledog
Возможно. Тут скорее помимо создания и реализации плана по архивации, нужен план по восстановлению и его проверка. Теоретически, если архиватор не выдал ошибок при архивации(тот же 7zip или tar предупреждают когда архивируемый файл начал кто-то перезаписывать в процессе архивации), и мы удостоверились что файл помещенный в хранилище байт в байт совпадает с локальным, то вероятность что архив можно будет распаковать будет очень велика.
Kelv13
Я бы сказал, что не помимо, а в первую очередь нужен план по восстановлению, включающий в себя проверку работающего восстановления из бекапа. А план бекапа нужен лишь, как обеспечивающий возможность этого восстановления.
В конце-концов, никого не будет интересовать, как там что бекапилось.
Это я говорю, как человек, у которого на заре карьеры в нужный момент выяснилось, что бекап красиво работал, но неделю не создавал восстанавливаемые копии...