Часть третья
(Окончание. Начало в №11)
Сегодня мы с вами завершим совершенствование нашей рабоче-домашней системы резервного копирования важных файлов. Она ведь уже почти совсем готова - осталось разобраться только с несколькими небольшими вопросами.
Немного размышлений
Но вначале немного размышлений. На форуме нашей газеты один человек под ником udly (админ) написал, что копирование - дело системных администраторов, а не пользователей. В целом, утверждение правильное - действительно, системный администратор и деньги за такие вещи получает, и уж наверняка лучше пользователя знает, как правильно организовать резервное копирование. И хороший системный администратор не будет пользоваться такими кустарными методами, какие я расписывал в первой и второй частях.
Это всё красиво звучит в теории, но зачастую довольно трудно реализуемо на практике. В мелких фирмах нет смысла нанимать отдельно системного администратора, который будет следить за порядком в не таком уж и большом компьютерном хозяйстве. То же касается и дома - ведь там тоже надо копировать важную информацию, не так ли? Уж домой-то приглашать специально нанятого системного администратора точно никто не станет.
Так что повторю то, что уже говорил в самом начале этой мини-серии по резервному копированию: эти методы замечательно применимы дома и пользователем на собственном рабочем компьютере. Даже если в конторе предусмотрено резервное копирование, всё может произойти, и существование лишней копии важной информации не помешает в ограниченном числе довольно нетривиальных случаев, верно?
Многоархивный вариант
Чтобы резервная копия не занимала слишком много места и можно было защитить её паролем от посторонних глаз, мы использовали архивирование. Но при этом, если архив повреждался, была высока вероятность потери всей информации, которая содержалась в нём. Конечно, использование записи для восстановления повреждённого архива помогает решить эту проблему, но здесь можно пойти ещё дальше, а именно - упаковывать каждый файл, который должен войти в резервную копию, в свой собственный архив. Конечно, таким образом мы несколько увеличим объём резервной копии, зато увеличим и шансы на то, что если один файл повредится, то остальные всё равно останутся.
В принципе, вы бы и сами могли написать скрипт для сохранения каждого файла в собственном архиве, немного переделав те скрипты, которые предлагались в первой и второй статьях серии, но, думаю, будет лучше привести текст этого скрипта, поскольку в нём встречается одна конструкция, которую мы с вами раньше не использовали.
cd c:\backup mkdir %DATE% cd c:\Work for %%A in (*.*) do "d:\Program Files\WinRar\rar.exe" a -rr5%% -s -t c:\Backup\%DATE%\%%A.rar %%A
Первые три строчки, я так полагаю, вполне понятны всем, кто читал предыдущие части. А вот последняя вызывает недоумение. Но на самом деле всё просто - эта команда указывает считывать последовательно имя каждого файла, хранимого в переменной %%A из списка имён файлов в данной директории, соответствующих маске *.* (а ей, как мы помним, соответствуют все файлы) и выполнять после каждого считывания команду, стояющую после слова do. А там у нас стоит обыкновенная архивация с помощью Rar'а, которой мы с вами уже вполне успешно занимались во второй части. Хочу обратить ваше внимание, что символы %% применяются не просто так - в команде for, если она используется из BAT-файла, переменные необходимо записывать именно таким образом, иначе могут возникнуть ошибки.
Протоколирование
На случай возникновения ошибок полезно вести протоколирование - чтобы просто потом можно было разобраться, что именно не так пошло в процессе резервного копирования информации. Rar позволяет осуществить это без особых затруднений: достаточно воспользоваться ключом -ilog[имя], например, -ilogc:\Backup\backuplog.txt.
Удаление старой резервной копии
Резервные копии имеют обыкновение накапливаться и устаревать, поэтому имеет смысл автоматически удалять совсем уж старые копии одновременно с созданием новых. Честно говоря, метод, который я здесь хочу предложить, придуман не мной, а взят у товарища Solander'а с форума windowsfaq.ru. Дело в том, что он, в отличие от меня, не поленился сделать скрипт для удаления копии недельной, а не месячной давности - и скрипт этот, как видите, получился немаленьким:
cd c:\backup mkdir %DATE% cd c:\Helps "g:\Program Files\WinRar\rar.exe" a -rr5%% -s c:\Backup\%DATE%\backup.rar c:\helps\*.* if not exist c:\backup\%DATE%\backup.rar goto error goto welldone :error echo Не удалось создать резервную копию > c:\Backup\error!.txt exit :welldone set T_Date=%DATE% IF %T_DATE:~0,1%==0 ( SET /A T_DAY=%T_DATE:~1,1%) else ( SET /A T_DAY=%T_DATE:~0,2%) IF %T_DATE:~3,1%==0 ( SET /A T_MONTH=%T_DATE:~4,1%) else ( SET /A T_MONTH=%T_DATE:~3,2%) SET /A T_YEAR=%T_DATE:~6,4% SET /A T_DAY=%T_DAY%-7 IF %T_DAY% LEQ 0 SET /A T_MONTH=%T_MONTH%-1 IF %T_MONTH%== 0 SET /A T_YEAR=%T_YEAR%-1 IF %T_MONTH%== 0 SET /A T_MONTH=12 if %T_MONTH%==1 Set /A DIM=31 if %T_MONTH%==2 Set /A DIM=28 if %T_MONTH%==3 Set /A DIM=31 if %T_MONTH%==4 Set /A DIM=30 if %T_MONTH%==5 Set /A DIM=31 if %T_MONTH%==6 Set /A DIM=30 if %T_MONTH%==7 Set /A DIM=31 if %T_MONTH%==8 Set /A DIM=31 if %T_MONTH%==9 Set /A DIM=30 if %T_MONTH%==10 Set /A DIM=31 if %T_MONTH%==11 Set /A DIM=30 if %T_MONTH%==12 Set /A DIM=31 IF %T_DAY% LEQ 0 SET /A T_DAY=%T_DAY%+%DIM% IF %T_DAY% LSS 10 SET T_DAY=0%T_DAY% IF %T_MONTH% LSS 10 SET T_MONTH=0%T_MONTH% rmdir c:\Backup\%T_DAY%.%T_MONTH%.%T_YEAR% /s /q del c:\Backup\error!.txt
Кратко поясню, чем занимается этот скрипт. Мы архивируем файлы и проверяем, существует ли архив. Если его не существует, то мы записываем в файл error!.txt сообщение об ошибке и прекращаем работу. Если же всё в порядке, то мы вычисляем дату, которая была за неделю до сегодняшнего числа, и удаляем папку с копией за тот день, попутно удаляя и файл с сообщением об ошибке. Самая большая часть скрипта занимается вычислением даты с учётом числа дней в каждом месяце, и подробно я на ней останавливаться не буду.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Комментарии
Ведь есть довольно качестваенные проги для этого
Более того, никто не мешает самому скомпилить из преведенного скрипта исполняемый файл, немного модифицировав немного для ввода.
Более того - это только раздолбай одмин не оперирует батниками, или, о боже, ВХС или ВМИ - вы хоть то знаете такие слова? Оличная, статья - можно найти некоторые решения и идеи.