Войти

Показать полную графическую версию : [решено] Как организовать архивацию данных?


Bugs
19-07-2007, 02:09
Необходимо организовать сложную систему архивации штатными или бесплатными средствами.

Что нужно:
Есть ряд ресурсов которые нужно архивировать ежедневно или по другому расписанию, желательно чтоб в архивах применялся инкрементальный метод копирования с заданой "глубиной" (количество дней хранения).

Как это реализовано сейчас
На каждый день недели есть командный файл который архивирует каждый ресурс в отдельный файл с использованием внешнего архиватора. В имени создаваемого файла указывается номер дня недели. В командном файле есть строка удаляющая все файлы предыдущей архивации.

Минусы данного подхода
1) Очень сложно организовать систему инкрементального копирования, хотя уже хочется, т.к. данных большие объёмы(свыше 100Гб)
2) Нет возможности отказаться от привязки к 7 дневной структуре из-за ограничений планировщика Windows
3) Нет возможности организовать контроль выполнения задания по архивации
4) В случае применения инкрементального копирования, приходится всё восстанавливать ручками начиная с первого архива, т.е. нет GUI интерйейса :)

Раньше работал с Veritas NetBackUP, но ввиду перехода к чистому софту отказались от него.
Если будут предложения использовать ntbackup, сразу же попрошу приводить свои реально рабочие конфигурации, если можно с примерами скриптов.

amel27
20-07-2007, 10:00
Минусы данного подхода1. ничего сложного, главное чтобы архиватор понимал архивный атрибут (к примеру WinRAR)
2. планировщик может и ограничен, а скрипт нет
3. не совсем так, как минимум - переменная ERRORLEVEL плюс "If Exist"
4. можно тоже скриптом... от GUI NTBackup Имхо тоже мало толку.Если будут предложения использовать ntbackup, сразу же попрошу приводить свои реально рабочие конфигурации, если можно с примерами скриптов.к сожалению, NTBackup не жмет данные в отличе от архиваторов :(, зато файлов создает меньше... CMD-вариант без привязки к шедулеру, все инкрементные архивы создаются в файле полного архива, любая критика приветствуется:@echo off
SetLocal EnableDelayedExpansion
:: Параметры скрипта:
:: SOURCE - путь к сетевому ресурсу или имя BKS-файла
:: FULLDEPTH - глубина отката в полных архивах
:: INCRDEPTH - инкрементных архивов на один полный
SET SOURCE=\\SERVER\$DIR1
SET FULLDEPTH=5
SET INCRDEPTH=6

Call :CallEx GetState
Call :CallEx DelLogs
Call :CallEx StartCMD
If %ERRORLEVEL% EQU 0 (
Call :CallEx NewState
Call :CallEx SetState
Call :CallEx DelBkf)
Exit
:: Запуск процесса NTBackup
:StartCMD
Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.0.bkf" /l:f /m incremental /a
If %INCREMENT% EQU 0 Set $CMD=ntbackup backup %SOURCE% /f "%~dpn0.bkf" /l:f
Start /WAIT %$CMD%
If %ERRORLEVEL% NEQ 0 (
Call :CallEx CopyLog
Echo При выполнении резервного копирования возникли ошибки,
Echo Смотрите журнал сообщений: "%~n0.log".
Exit /B 1)
Call :CallEx CopyLog
If Exist %~n0.bkf (
If Exist %~n0.0.bkf Call :CallEx ShiftBkf 0 1
Ren %~n0.bkf %~n0.0.bkf
If %ERRORLEVEL% NEQ 0 Exit /B 1
If Exist %~n0.log Ren %~n0.log %~n0.0.log
If %ERRORLEVEL% NEQ 0 Exit /B 2)
GoTo :EOF
:: Чистка старых логов
:DelLogs
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
Del /Q /F "%$BakData%\backup*.log" >nul
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:CopyLog
Set $BakData=%APPDATA:~0,-17%\Local Settings\Application Data\Microsoft\Windows NT\NTbackup\Data
If %INCREMENT% EQU 0 (
Copy "%$BakData%\backup*.log" %~n0.log >nul
) Else (
Copy /B %~n0.0.log+"%$BakData%\backup*.log" %~n0.0.log >nul
)
If %ERRORLEVEL% NEQ 0 Exit /B 1
GoTo :EOF
:: Расчет нового состояния
:NewState
Set /A INCREMENT=%INCREMENT%+1
If %INCREMENT% GTR %INCRDEPTH% Set INCREMENT=0
GoTo :EOF
:: Чтение параметров
:GetState
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If "%INCREMENT%"=="" (
Echo INCREMENT=0 >%~n0.ini
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If Not "!INCREMENT!"=="0" (
Set INCREMENT=0
Exit /B 2
)
)
GoTo :EOF
:: Сохранение параметров
:SetState
Set $bak=%INCREMENT%
Echo INCREMENT=%INCREMENT% >%~n0.ini
For /f "Delims=" %%i in (%~n0.ini) Do Set /A %%i+0
If Not "%INCREMENT%"=="%$bak%" Exit /B 1
GoTo :EOF
:: Переименование архивов
:ShiftBkf
If Exist %~n0.%2.bkf (
Set /A $idx=%2+1
Call :ShiftBkf %2 !$idx!
If !ERRORLEVEL! NEQ 0 Exit /B 1 )
Ren %~n0.%1.bkf %~n0.%2.bkf
If %ERRORLEVEL% NEQ 0 Exit /B 1
If Exist %~n0.%2.log Del %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
If Exist %~n0.%1.log Ren %~n0.%1.log %~n0.%2.log
If %ERRORLEVEL% NEQ 0 Exit /B 2
GoTo :EOF
:: Удаление старых архивов
:DelBkf
For /f "tokens=1,2 delims=." %%i in ('Dir /B %~n0.?.bkf^|FindStr /REC:"\.[0-9]\.bkf"') Do (
If %%j GEQ %FULLDEPTH% (
Del /F/Q %%i.%%j.log
Del /F/Q %%i.%%j.bkf)
If !ERRORLEVEL! NEQ 0 Exit /B 1)
GoTo :EOF
:: Вызов процедур с контролем ошибок
:CallEx
Call :%*
If %ERRORLEVEL% EQU 1 (
Echo.
Echo Модуль "%1" вызвал исключение, работа скрипта прервана!
Exit )
If %ERRORLEVEL% EQU 2 Echo Модуль "%1" вызвал некритичную ошибку, работа скрипта продолжена.
GoTo :EOF

Bugs
21-07-2007, 04:02
amel27
Хороший скрипт!
А можно еще скрипт восстановления нужной информации из конкретного полного архива?
А почему именно такой шаг создания инкрементальных архивов и полных?
Если я правильно понял, то просто запуская скрипт 5 раз, я создам один полный архив и 4 инкрементальных? Если запущу скрит 6 раз, то появится второй полный архив?

amel27
21-07-2007, 06:55
BugsА можно еще скрипт восстановления нужной информации из конкретного полного архива?К сожалению, NTBackup не поддерживает восстановление из командной строки... зато у него куча других преимуществ, например очень детальный лог. Можно автоматизировать восстановление при использовании обычных архиваторов (типа WinRAR, хотя он вроде небесплатный).
Если я правильно понял, то просто запуская скрипт 5 раз, я создам один полный архив и 4 инкрементальных? Если запущу скрит 6 раз, то появится второй полный архив?Нет, на 1 полный будет 6 инкрементальных... причем количество хранимых полных архивов будет не больше 5 - старые будут автоматически удаляться... Все эти параметры можно настроить под себя.А почему именно такой шаг создания инкрементальных архивов и полных?Скажем, в воскресенье - полный архив, а в остальные (6 дней) инкрементальные.

Bugs
21-07-2007, 10:01
amel27
К сожалению, NTBackup не поддерживает восстановление из командной строки... зато у него куча других преимуществ, например очень детальный лог. Можно автоматизировать восстановление при использовании обычных архиваторов (типа WinRAR, хотя он вроде небесплатный).
Т.е. восстановление будет происходить через GUI интерфейс?

Нет, на 1 полный будет 6 инкрементальных... причем количество хранимых полных архивов будет не больше 5 - старые будут автоматически удаляться... Все эти параметры можно настроить под себя.
Каждый полный это отдельный файл, да?
Я прошу прощения но сейчас есть под руками только КПК, на нём сложно проверить как работает этот скрипт, а решение очень понравилось!

amel27
21-07-2007, 14:36
BugsТ.е. восстановление будет происходить через GUI интерфейс?как заказывал ;)
Каждый полный это отдельный файл, да?да, в этот же файл добавляются все инкрементные (до следующего полного)

Bugs
23-07-2007, 05:28
amel27
А почему Вы не используете внешний архиватор для сжатия уже готовых полных архивов?
Т.е. архив в который уже не добавляются инкрементальные бэкапы.
Или у Вас совсем нет проблем с местом? :lol:

amel27
23-07-2007, 12:17
Bugs
использую NTFS-сжатие тома, сильно сжимать тоже чревато - можно не уложиться в отведенное время

Bugs
24-07-2007, 04:10
amel27
Хорошо, про NTFS сжатие я и не подумал :-)
Спасибо большое, за хорошую консультацию!




© OSzone.net 2001-2012