Архив

Архив раздела ‘Автоматизация’

Резервное копирование

12 августа 2009

Гром не грянет — мужик не перекрестится (© народная мудрость).

Нет ничего дешевле профилактики (© врачебная мудрость).

Резервное копирование — это та рутина, о которой люди вспоминают (а если не знали, то начинают задумываться) только тогда, когда вдруг теряется важная информация, восстановить которую невозможно или очень трудно. Чаще всего в качестве такой информации выступают различного рода базы данных (например, 1С), папки с документами, с данными по какому-либо проекту, исходники разрабатываемых программ. Причиной утраты информации как правило являются отказы оборудования и человеческие ошибки. Хотя и отказы, и ошибки иногда бывают поправимыми, все же довольно часто случается и так, что исправить ничего не удается и данные безвозвратно теряются. И сколько бы ни говорилось о необходимости резервного копирования, периодически невосполнимые утраты информации случаются даже у матерых компьютерщиков, не говоря уже об организациях, в которых системного администратора нет вовсе либо сисадмин просто плохо делает свою работу.

Вчера мне довелось в очередной раз столкнуться с ситуацией утраты важных данных. Речь шла о файловых базах 1С одного магазина, физически расположенных на весьма пожилом жестком диске такого же пожилого компьютера. Сложилось так, что однажды Windows XP на этом компьютере просто вылетела в синий экран и больше не загрузилась. «Компьютер перестал работать», как говорят не слишком сведущие в компьютерных вопросах пользователи. При ближайшем рассмотрении выяснилось, что причиной неработоспособности компьютера стал отказ механики жесткого диска.

Если бы где-то на другом носителе существовала мало-мальски актуальная резервная копия баз 1С, то проблема была бы решена в течение часа покупкой нового жесткого диска и установкой на него новой операционной системы. Но резервной копии не было. Хотя все возможности заранее организовать периодическое резервирование по сети на другой компьютер — были. В результате день был потрачен на бесплодные попытки подручными средствами таки добыть нужную информацию с пребывающего в коме старого жесткого диска. Поскольку сделать это оказалось невозможно, владелец магазина оказался перед довольно неприятным выбором: потратить несколько сотен долларов и несколько дней времени на восстановление информации в какой-нибудь специализированной конторе, либо просто начать работать заново, потеряв данные о пяти месяцах работы.

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

Для начала несколько слов об основах резервного копирования.
1. Наиболее эффективно резервное копирование в случаях, когда нуждающиеся в резервировании данные хранятся централизованно: то есть содержатся в одной или нескольких папках, а не разбросаны непонятно как «по всему компьютеру». А значит, если вы работаете над каким-либо проектом, то лучше держите все данные по проекту внутри одной папки (внутри которой создайте удобную для вас структуру файлов и папок). Например, 1С каждую из своих баз и так складывает внутри одной папки.
2. Создаваемые резервные копии лучше всего располагать на другом носителе по отношению к тому, где располагаются сами резервируемые данные. Например, в описанном мной случае с базами 1С резервные копии лучше всего было бы хранить на другом компьютере в сети. Другим носителем может выступать также любой съемный накопитель (флешка, внешний жесткий диск, болванка CD-R или DVD±R) или любое хранилище файлов в интернете — кому как проще или удобнее. Главное, чтобы это был ДРУГОЙ носитель, и чтобы он обеспечивал приемлемую надежность и безопасность хранения данных. Другой носитель нужен как раз для того, чтобы уберечься от отказов оборудования. Например, в описанном мной случае практически ничем бы не помогли резервные копии баз, расположенные на том же самом неисправном жестком диске — прочитать эти резервные копии все равно бы не получилось.
3. Резервное копирование должно осуществляться регулярно, и по возможности не должно зависеть от забывчивости (без)ответственных сотрудников.
4. Ну и, конечно, с целью экономии занимаемого места на носителях, резервные копии лучше упаковывать в архивы. Благодаря возможностям современных архиваторов, упаковка в архив кроме всего прочего даст возможность легко контролировать целостность данных: если архив открывается и распаковывается без ошибок, значит данные внутри архива не повреждены. Опять-таки, работать с единственным файлом архива порой намного проще, чем с тысячами мелких исходных файлов. Например, копирование на флешку и с флешки единого архива резервной копии происходит намного быстрее, чем нескольких десятков (а тем более — сотен или тысяч) исходных файлов, даже если суммарный размер этих файлов и размер архива примерно одинаковы.

Для решения задач резервного копирования мне удобно использовать сценарий командной строки. Скачать сам сценарий вместе с примерами папок и файлов, участвующих в резервном копировании, можно здесь: backup.rar.

Предлагаемый сценарий выполняет упаковку в архивы баз из двух папок. Созданные резервные копии складываются в папку Backup. Каждый архив резервной копии в имени файла содержит название базы, дату резервирования, а также порядковый номер копии в пределах одной даты (для случая, если резервирование планируется выполнять чаще, чем один раз в сутки). В этой же папке располагается файл COMMON.LOG с логом резервирования за все время (он не переписывается при каждом запуске сценария, а дополняется). Кроме того, резервные копии копируются по сети на другой компьютер. Все названия папок, пути, имена файлов прописаны в переменных сценария. Сценарий снабжен комментариями, чтобы разобраться в нем можно было даже без соответствующих знаний и опыта. Если вопросы все-таки будут возникать — пишите, будем разбираться :)

Хотелось бы обратить внимание на следующее. Архивация выполняется посредством вызова консольной версии архиватора WinRar — файла rar.exe (взять его можно, например, из папки с установленным WinRar). Чтобы сценарий работал, необходимо в папку со сценарием положить также файл rar.exe (или позаботиться о том, чтобы этот файл находился по любому пути, прописанному в переменной окружения PATH; например, можно просто скопировать rar.exe в папку C:\WINDOWS или добавить в переменную PATH путь к папке с архиватором). Кроме файла rar.exe в последних версиях архиватора понадобится также файл RarLng.dll. Еще можно положить и ваш файл ключа rarreg.key (работать будет и без файла ключа, просто не будут записываться в лог-файл ошибки упаковки).

При запуске rar.exe используются следующие ключи (параметры):
m5 — использовать метод сжатия 5 — максимальный;
md4096 — использовать размер словаря в 4096 Кб (максимальный);
s — создать непрерывный архив (для лучшей степени сжатия);
r — выполнять упаковку рекурсивно, с подкаталогами;
dh — открывать совместно используемые файлы (нужно для того, чтобы можно было выполнять резервирование, например, баз 1С, не заставляя всех пользователей выходить из программы);
ri1 — задать приоритет 1 — минимальный (чтобы не допустить «тормозов» на компьютере во время выполнения резервирования);
ilog%LOGFILE% — записывать протокол ошибок в файл, путь к которому содержится в переменной LOGFILE (работает только в зарегистрированной версии, то есть нужен файл ключа).

Вообще в свое время свой сценарий я делал на основе другого, найденного в интернете, служащего приблизительно для тех же целей. Но во-первых, автора его я не помню (выходит, сослаться не на кого), а во-вторых, свой сценарий я несколько раз переписывал, так что от исходного варианта мало что осталось. Принципиальные изменения следующие: добавлены возможности резервирования файлов из нескольких папок, добавлено копирование резервных копий по сети на другой компьютер, добавлены свои ключи для запуска rar.exe, добавлена возможность создания нескольких резервных копий в течение суток с разными именами (отличающимися цифровым индексом).

Сценарий легко приспособить под ваши нужды, просто исправив «под себя» значения переменных с именами файлов, папок и путями. Может потребоваться убрать лишние строки или добавить новые в зависимости от количества папок с файлами, подлежащих резервированию (прилагаемый сценарий рассчитан на две такие папки). Рекомендую запуск приспособленного под ваши нужды сценария прописать в планировщик (Панель управления — Назначенные задания), чтобы резервирование выполнялось по расписанию и не зависело от вашей забывчивости или от ответственности других людей :)

Polymorph Автоматизация, Командная строка , , ,

Автоматическое создание подключения на беспарольный интернет

2 апреля 2009

В Беларуси у Белтелекома есть услуга «Беспарольный доступ» в интернет, позволяющая выходить в интернет с любого телефона через коммутируемое модемное соединение по телефонной линии. Ввиду своей простоты для потребителя услуга все еще остается весьма популярной. А это значит, что на каждом компьютере после установки системы требуется настроить беспарольный интернет. То есть нужно создать новое подключение через обычный модем, прописать название и номер телефона для дозвонки. Ничего сложного, но если делать постоянно — жутко надоедает. Кроме того, иногда оказывает влияние так называемый «человеческий фактор»: ну ошибается человек, например, при вводе этого самого номера. В результате соединение не работает.

Чтобы избавить себя и сервисных инженеров от лишней рутины и исключить влияние человеческого фактора, где-то в году 2006-м был написан довольно простой AutoIt-скрипт: besparolnik.rar.

В архиве — исходник au3 для AutoIt и скомпилированный скрипт.

Используется при автоматической установке Windows XP. Автоматически создает подключение на беспарольный интернет.

Polymorph Автоматизация ,

Автонастройка разделов жесткого диска

2 апреля 2009

Необходимость настройки разделов жесткого диска возникает каждый раз после установки новой системы (или переустановки). Такая настройка позволяет привести буквенные обозначения разделов и накопителей в более удобный вид. Это довольно-таки рутинная операция, но тем не менее ошибки при ее выполнении могут приводить к потере данных. Эти обстоятельства и послужили причиной автоматизации процедуры настройки разделов жесткого диска.

Оговорка 1. В данном случае будем говорить о Windows XP, хотя все сказанное, как правило, будет применимо и к Windows 2000, и к Windows Vista.

Оговорка 2. В случае затруднений с пониманием используемых далее терминов я бы рекомендовал почитать здесь: oszone.net.

Оговорка 3. При разбиении жесткого диска на разделы придерживаемся следующих соображений:
а) под систему создаем один раздел (основной) в начале диска;
б) размеры системного раздела задаем либо по желанию заказчика, либо устанавливаем сами — индивидуально, исходя из ситуации;
в) для данных пользователя создаем еще один логический диск в дополнительном разделе, и используем под это все оставшееся свободное место;
г) файловая система всех разделов — NTFS;
д) папку пользователя «Мои документы» переносим на диск D (D:\Мои документы): так и сохраннее в случае краха системы, и проще до нее добираться (даже если на компьютере работает несколько пользователей, такой подход оправдан, просто в этом случае папки документов на диске D понадобится создать отдельно для каждого пользователя).

С этими соображениями можно спорить, но на практике они подтверждали свою состоятельность в течение нескольких лет продаж и сервисной работы. Особенно хотелось бы подчеркнуть пункт (в). Дело в том, что использовать для данных пользователя дополнительный раздел, строго говоря, вовсе не обязательно. С таким же успехом можно было бы создать под логический диск с данными еще один основной раздел. Однако практика показала, что при наличии более чем одного основного раздела на жестком диске в некоторых случаях при переустановке системы буквы разделов путаются (первый раздел, системный, оказывается с буквой D; второй, с данными — C). Чтобы избежать таких ситуаций и связанных с этим потерь времени и нужен пункт (в).

Оговорка 4. С учетом оговорки 3 делаем допущение, что в процессе установки системы на жестком диске создавался только один раздел, в который и ставилась система. Таким образом, будем иметь основной раздел с системой в начале жесткого диска, и все остальное — неразмеченная область.

Итак, после установки операционной системы с оптического диска (CD или DVD) на чистый жесткий диск (новый или предварительно очищенный) обычно наблюдается следующая картина: системному разделу соответствует буква С, оптическому приводу — буква D, флоппи-дисководу — буква A (если есть другие накопители или логические диски, то букв будет больше).

Дальнейшие задачи состоят в том, чтобы:
а) сменить букву оптическому приводу на X (или, к примеру, Z — кому как нравится; главное, использовать букву постарше, чтобы при появлении в системе новых логических дисков (например, при подключении флешки или еще одного жесткого диска) оптический привод не мешался среди них, а оставался последним в буквенном ряду — так удобнее);
б) создать дополнительный раздел на жестком диске, а в этом разделе — логический диск, которому назначить букву D и отформатировать в NTFS;
в) перенести папку «Мои документы» из «C:\Documents and Settings\имя_пользователя\» на диск D.

Эти задачи и решает мой автоматический настройщик разделов жесткого диска. Файл представляет собой самораспаковывающийся архив, который при запуске распакуется во временную папку и запустит на исполнение сценарий командной строки DiskTune.cmd, реализующий требуемый функционал. Помимо этого также задаются метки тома для логических дисков C и D — для удобства. При настройке разделов используются возможности консольной утилиты DISKPART, входящей в состав Windows. Для переназначения папки документов используется самодостаточный самораспаковывающийся архив MyDocMove.exe, который можно использовать и отдельно.

Файл delay.exe в архиве — это скомпилированная в Virtual Pascal’е утилитка для реализации задержки (ну не люблю я способ релизации задержки в командной строке при помощи ping). Сопутствующие файлы — ее исходник и файлы компилятора. Вообще команда задержки в сценарии закомментирована. В свое время она была нужна, чтобы дать системе время на закрытие всех файлов на оптическом приводе.

Файлы withd.txt и withoutd.txt являют собой команды утилиты DISKPART и передаются ей в качестве параметров в зависимости от ситуации.

Перед выполнением деструктивных операций настройщик проверяет количество имеющихся в системе разделов жестких дисков, количество сменных накопителей и количество оптических приводов. Если разделов жесткого диска и/или сменных накопителей больше, чем по одному, выполняется только смена буквы для оптического накопителя (никакого создания разделов и форматирования в этом случае сценарий не делает). Это позволяет предотвратить потерю данных, если разделы на жестком диске уже созданы, а также исключает некорректное поведение при наличии в системе картридера (добавляющего «лишние» сменные накопители). В последнем случае настраивать разделы лучше вручную.

Для успешной работы настройщику требуется, чтобы на оптическом приводе не было открытых файлов. Иначе сменить его букву не получится, и все остальные операции потеряют смысл.

В случае, если по каким-либо причинам логический диск D не был создан, перенос папки документов будет выполнен в корень логического диска C.

ЗЫ. Поскольку операции с разделами — штука потенциально опасная, все описанное и выложенное здесь используйте с умом, осторожностью и на свой страх и риск.

Polymorph Автоматизация, Командная строка , , ,

Копирование нескольких копий файла на дискету (CopyFlop)

1 апреля 2009

«Давным-давно, когда винчестеры были маленькими, а дискеты большими…»

Попался мне на глаза сегодня любопытный файлик…

Была когда-то такая проблема: записанные на дискеты файлы не читались. Чтобы с этим бороться, один и тот же файл переносили одновременно на нескольких дискетах или делали несколько его копий на одной. Более предпочтительным считался второй вариант.

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

Так вот, любопытный файлик представляет собой консольную программу, которая избавляет пользователя от рутинных действий при создании нескольких копий файла на дискете. Запускать нужно с двумя параметрами. Первый параметр — имя файла, который нужно копировать; второй параметр — требуемое количество копий на дискете. Если указать количество копий 0 (ноль), программа использует под копии все имеющееся на дискете свободное место.

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

Сейчас бы я точно не мутил воду ни с каким языком программирования. Для описанной задачи выше крыши хватило бы возможностей простой командной строки.

Если хочется взглянуть на это чудо поближе, качать здесь: copyflop.

В архиве кроме готовой программы и исходника еще есть два reg-файла: для добавления команды копирования на дискету в главное меню Far Manager (CopyFlopFar.reg — для обычных версий Far, CopyFlopFar2.reg — для юникодовых Far2).

Polymorph Автоматизация , ,

Автоматическая очистка папки для временных файлов

Почти в каждом компьютере, с которым приходится заниматься, наблюдается свалка «мусора» в папке для временных файлов. Обычно для Windows XP все это добро лежит в папке «C:\Documents and Settings\Имя пользователя\Local Settings\Temp» (в соответствии со значением переменных среды TMP и TEMP). Иногда временную папку «переназначают» (задавая соответствующие значения переменным среды) например в «C:\TEMP», но количество мусора от этого меньше обычно не становится.

Существует масса программ для очистки системы от мусора. Кроме временных папок они обычно еще умеют чистить реестр, кэш браузера, и другие «грязные места» системы. Однако по сравнению со сценариями командной строки они несравнимо более громоздки, некоторые из них стоят денег, и их код в большинстве случаев нельзя исправить «под себя»,  или же это слишком сложно.

Вашему вниманию — маленький и простой сценарий командной строки для очистки папки временных файлов от скапливающегося мусора: cleartmp.cmd. Поскольку переменные среды TMP и TEMP обычно совпадают, сценарий использует только одну переменную (TMP). Легко может быть приспособлен для очистки любой папки (достаточно изменить 4-ю строку «set clearfolder=%tmp%») вместо переменной среды %tmp% подставить другую переменную или путь к папке).

Если неохота заморачиваться с командной строкой, можно скачать установочный файл СleaningTemp.exe. При запуске этого файла происходит распаковка описанного сценария в %ProgramFiles% и создание ярлыка в папке «Автозагрузка». Таким образом, очистка будет выполняться при каждом входе пользователя в систему. Запуск сценария выполняется скрыто, без появления «черного окна» командной строки.

То есть этот или подобный сценарий — пожалуй, самое простое решение проблемы скапливания мусора во временной папке (а как известно, чем проще, тем надежнее). Работает по принципу «установил и забыл». Работает в любой Windows XP или Vista, включая 64-разрядные редакции, и будет работать в будущих версиях (Windows 7 и последующих).

Polymorph Автоматизация, Командная строка , , , , ,

Обновление Far Manager

5 марта 2009

Если вы относите себя к ценителям Far Manager, то наверняка вам известен этот адрес: http://www.farmanager.com/nightly.php.
Это страничка ночных сборок Far вместе с основными плагинами. Сейчас обновляется практически каждый день.

Что вы делаете, если хотите обновить свой фар до очередного найтли-билда? Выкачиваете *дцать архивов, потом распаковываете их и раскладываете по папкам, чтобы плагины оказались в папке Plugins рядом с exe-шником Far? Не обращали внимание, сколько времени требуют эти манипуляции?

Я для себя слегка автоматизировал этот процесс — при помощи командной строки и пары известных консольных утилит (wget + 7-Zip). Просто скачайте архив, распакуйте его в любую папку и запустите сценарий «CreateFar.cmd». После его выполнения в папках «Far» и «Far2» получите готовые сборки текущих найтли-билдов Far 1.75 и Far 2.0 соответственно.

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

ЗЫ.
1. При скачивании файлов установлено ограничение в 5 кБ/с. Чтобы его убрать, нужно в 4-й строке сценария удалить ключ «–limit-rate=5k» (или изменить его по своему усмотрению).
2. Сценарий снабжен комментариями, чтобы упростить его понимание и переделку для тех, кому это нужно.
3. Уже выкачанные архивы повторно не выкачиваются (например, при повторном запуске — чтобы напрасно трафик не переводить). В результате при появлении в сети более нового билда он будет выкачан в папку к старым билдам, что приведет к свалке и путанице. Чтобы этого избежать, необходимо перед обновлением вручную удалять папку «www.farmanager.com», в которую складываются выкачанные ранее архивы.

Polymorph Far Manager, Автоматизация, Командная строка , , , ,