пятница, 9 мая 2008 г.

Консольный бэкап

не про SEO, но тоже нужно

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

Работая в свою бытность админом на одном из беларуских предприятиях, сопровождал я одну программулину производственного значения, на которой ежедневно сидело 2 отдела. Так вот, база данных этой программулины за 2 года обильного юзания разрослась до необъятного и важность информации, хранящейся в данной системе представителями отделов возносилась как грандиознейшая работа всех их жизней взятых вместе и сразу.

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

Я же был не таким легкомысленным и беспечным в отношении к своим органам и мне пришлось напрячь свой моск и придумать чего-нить этакого.

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

Лениво было разбираться во всем этом зоопарке утилит для резервного копирования и я в виду тривиальности задачи решил обойтись простым консольным решением в виде обыкновенного bat-ника, используя стандартные команды интерпретатора (cmd.exe), штатную команду копирования винды (xcopy.exe) и консольный вариант самого популярного архиватора от Евгения Рошаля (rar.exe).

Посидев немного с ключами перечисленных утилит, у меня получился вот такой батничег:

>backup.bat


@echo off
rem Выводим текущее время
echo %TIME%
rem Создаю директорию вида DD.MM.YYYY
md "%DATE%"
rem Перехожу в созданную директорию
cd "%DATE%"
echo Копирую и сохраняю результат копирования в лог ...
xcopy d:\programulinа\* /s /f /z /c /exclude:..\exclude.txt > backup.log
rem /s - копирует все папки и подпапки, кроме пустых;
rem /f - отображает имена исходных и конечных файлов во время копирования;
rem /z - копирует сетевые файлы с возобновлением;
rem /c - продолжает копирование, даже если произошла ошибка;
rem /exclude: file1[+file2][+file3]... - указывает список файлов, содержащих строки.
rem Каждая строка должна находиться в отдельной линии в файлах. Если одна из строк
rem совпадает с любой частью абсолютного пути копируемого файла, то такой файл
rem копироваться не будет. Например, указывание таких строк, как \\obj\\ или .obj,
rem исключает из копирования все файлы в папке obj и, соответственно, все файлы с
rem расширением .obj;
rem Перехожу на папку выше
cd ..
echo %CD%
echo Архивирую...
rar a -df -r -ag+YYYY-MM-DD backup/b "%DATE%"
rem a - добавить файлы в архив;
rem -df - удалить файлы после архивации;
rem -r - рекурсивно с подкаталогами;
rem -ag[формат] -добавить к имени архива текущие дату и время;
echo Усё ý парадке, шеý.
echo %TIME%


В следующем файле перечислил все те части абсолютного пути, которые необходимо проигнорировать при копировании

>exclude.txt

\mr
\xz
\Recycled
\tmp
.wbk

при запуске батника производиться копирование файловой структуры из места источника (d:\programulinа\) в место назначение, в данном случае в директорию, где находиться сам батник.

Теперь необходимо сделать так, чтобы все это чудо технической мысли запускалось глубокой ночью, скажем в часика 3 ночи, когда все буду дрыхнуть без задних ног и видеть десятые сны. Для этого нам потребуется запустить, если она вдруг ещё не запущена, службу расписаний

>net start schedule

и с помощью консольного планировщика заданий (at.exe) сделать намеченое.

>at 03:03 /every:M,T,W,Th,F d:/backup/backup.bat

Проверим создалось ли расписание, для этого запустим at.exe без параметров

Статус Код  Дата                    Время         Командная строка
-------------------------------------------------------------------------------
1 Каждый M T W Th F 3:03 d:/backup/backup.bat

Вот в принципе и все. Как говориться, "зачем платить больше" и все такое.

Главное преимущество моего метода резервного копирования, заключается в том, что весь необходимый функционал, не считая планировщика задач, осуществляется с помощью 3-x подручных программ.

Что касается бакапа системы, то частенько прибегаю к архивированию данных состояния системы стандартной виндюшной тулзой Пуск>Программы>Стандартные>Служебные>Архивация Данных.

И вообще, дам очень полезный совет, который не раз спасал меня от неминуемой кастрации:

если ты невзначай словил себя на мысли о том, что хорошо бы было сделать резервную копию курсача/проекта/системы, 

остановись ...


отбрось все остальные мысли, отложи все текущие дела на потом ...

представь отчетливо, что будет если ты потеряешь курсач/проект/систему и т.д...

представил?...

теперь с радостным наслаждением о том, что это было лишь твоя фантазия делаешь бэкап курсача/проекта/системы.


Update: Недавно наткнулся на очень хорошую подборку статей от СПЕЦ ХАКЕРа. Выпуск специятельно посвящен вопросам бэкапинга и востановления данных.

Не скучайте.

PS. Всех, C Днем Великой Победы.


6 Comments:

dert88 said...

охрен )))
я только в *.bat разобрался как службы отключать :)
backup-лю только файлы различных записных книжек, кошельков.
Просто создав в nero архив и при новой архивации обновляю файлы архива - функ. refresh, благо все входит на 1 cd

Анонимный said...

Когда я был приходящим администратором в разных конторах, то пришел к выводу, что
1. инкрементальный бэкап делает только идиот.
2. нужно делать раз в месяц слив на ДВД и относить базу данных домой или отдавать директору, чтобы он уносил домой.

Зачем? однажды у клиента украли все! компьютеры, и работа пошла с бэкапа сделанного 3 дня назад и унесенного мной домой.

---

Дома делаю архив и сохраняю его на другом компьютере.

Анонимный said...

Поддерживаю sm100.ru, лучше делать полный бэкап и сливать потом на DVD. А каждый день делать еще копию на другой жесткий диск или флэшку.

samlowry said...

Спасибо за пост, наконец-то прочитал его, готовлюсь к подведению итогов по конкурсу.

antonm said...

Для меня в таком способе есть один минус - файлы види DDMMYYYY неправильно сортируются, если их много. Поэтому предлагаю небольшую поправочку:

set FoldDate=%Date:~-2,2%%Date:~-7,2%%Date:~-10,2%
set ComDate=%Date:~-7,2%-%Date:~-10,2%-%Date:~-2,2%

xcopy d:\work\*.* d:\work%FoldDate%\work\ /s /y /h /d:%ComDate%

Анонимный said...

2 antonm:

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