Копируем открытые файлы при помощи Volume Shadow Copy Service.

Я думаю, все администраторы сталкиваются с задачей резервного копирования файловых серверов.
Если вы не резервируете ваши серверы – срочно подумайте о смене профессии. 🙂
Кто-то использует для этого специализированный софт от Symantec, HP и других производителей, но иногда дополнительный софт либо нет возможности приобрести, либо приобретение нецелесообразно.

Тогда на помощь приходят многочисленные утилиты копирования файлов – robocopy, SyncToy, Rsync, но существует определенное ограничение – они не могут копировать заблокированные и открытые на запись файлы (например, файлы личных папок PST, или файловые базы 1С).

Начиная с Windows XP и Server 2003, в клиентские и серверные ОС входит технология Shadow Copy , позволяющая делать «мгновенный снимок» тома. Эта технология автоматически задействуется когда, например, утилита ntbackup создает архив system state, или создается снимок для общей папки (Volume Shadow Copy for Shared Folders).

Есть возможность создавать снимки вручную при помощи vssadmin.exe, однако содержимое такого снимка можно просмотреть только при помощи клиента для “Volume Shadow Copy for shared folders”.

Для целей резервного копирования гораздо интереснее утилиты командной строки, входящие в пакет Volume Shadow Copy Service SDK, который можно скачать здесь.

Из всего пакета нас в первую очередь интересует утилита vshadow.exe. Она позволяет

– создавать и удалять снимок тома
– просматривать списки созданных снимков
– монтировать снимок
– экспортировать, импортировать снимки и восстанавливать состояние тома

Существует две версии vshadow с различным функционалом.

Для Windows 2003, Windows 2008 и Vista необходимо использовать эту версию:
“C:Program FilesMicrosoftVSSSDK72TestAppsvshadowbinrelease-servervshadow.exe”

Для XP используется
“C:Program FilesMicrosoftVSSSDK72TestAppsvshadowbinrelease-xpvshadow.exe”

Версия для XP, в первую очередь, отличается от «серверной» тем, что не может создавать «хранимые» (persistent) snapshot’ы, то есть по окончанию процесса резервирования snapshot удаляется. Это ограничение накладывает реализация VSS в XP.

Утилиту можно копировать на серверы, не устанавливая SDK.

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

vshadow.exe –p –script=vars.cmd d:
call vars.cmd
xcopy x:some_locked_file.pst c:backup
vshadow –ds=%SHADOW_ID_1%

По шагам:

1. Создаем хранимый snapshot тома

vshadow.exe –p –script=vars.cmd d:

-p хранимый snapshot

-script=vars.cmd командный файл, в который vshadow сохранит название снапшота

vshadow записывает в файл, указанный в параметре -script следующее:
@echo.
@echo [This script is generated by VSHADOW.EXE for the shadow set
@echo {6b228a73-f8bf-4254-90e7-0d58219bc554}]
@echo.
SET SHADOW_SET_ID={6b228a73-f8bf-4254-90e7-0d58219bc554}
SET SHADOW_ID_1={8d14c5fe-87c1-4dac-8459-9a46b2874ef1}
SET SHADOW_DEVICE_1=\?GLOBALROOTDeviceHarddiskVolumeShadowCopy16

D: том, для которого создается snapshot

2. Подключаем snapshot как диск

call vars.cmd
vshadow.exe -el=%SHADOW_ID_1%,X:

call vars.cmd – загружаем переменные окружения с именем снапшота
vshadow.exe -el=%SHADOW_ID_1%, X: – подключаем созданный snapshot как логический диск X:

3. Копируем файлы

xcopy x:some_locked_file.pst c:backup

4. Удаляем snapshot

vshadow –ds=%SHADOW_ID_1%

Это все, господа. 🙂 Ранее блокированый файл успешно скопировался.

Что почитать:

1) Volume Shadow Copy Service SDK. 7.2 Download http://www.microsoft.com/downloads/details.aspx?familyid=0b4f56e4-0ccc-4626-826a-ed2c4c95c871

2) http://blogs.msdn.com/adioltean/archive/2004/12/30/344476.aspx
http://blogs.msdn.com/adioltean/archive/2005/01/05/346793.aspx
http://blogs.msdn.com/adioltean/archive/2005/01/20/357836.aspx
http://blogs.msdn.com/adioltean/archive/2006/09/18/761515.aspx

Exchange 2003 и AUTH Login

В продолжение предыдущей темы.

Недавно мне довелось перенастраивать почтовый сервер Exchange 2003 (в составе Small Business Server). Проблема заключалась в том, что интернет провайдер решил больше не предоставлять своим клиентам SMTP Relay для отправки почты.

Не велика проблема, подумал я, перенастроим на SMTP-сервер хостера интернет-домена, с авторизацией. Не тут-то было. Первый хостер не разрешал отправку почты от имени, не совпадающем с авторизованным пользователем. Второму хостеру было все равно, что указано в “mail from” после успешной SMTP авторизации, однако именно с ним и произошла «загадка».

Итак, хостер поддерживает отправку почты с авторизацией plain text. Настроить Exchange для отправки почты с авторизацией не сложно – на соответствующем коннекторе (и/или виртуальном сервере SMTP) необходимо указать smart host, а в Outboud security установить авторизацию plain text. Перезапускаем Virtual Mail Server (или из командной строки делаем iisreset – надежнееJ )

И.. не работает. Смотрим журнал – ничего интересного, журнал в точности как при диалоге  с первым хостером, только при авторизации возвращается ошибка Invalid command:

Журнал в формате NCSA

217.112.42.215 – OutboundConnectionResponse [27/Nov/2008:16:31:37 +0300] “- -?220 mx7.valuehost.ru ESMTP ready SMTP” 0 32
217.112.42.215 – OutboundConnectionCommand [27/Nov/2008:16:31:37 +0300] “EHLO -?y.dyndns.org SMTP” 0 4
217.112.42.215 – OutboundConnectionResponse [27/Nov/2008:16:31:38 +0300] “- -?250-mx7.valuehost.ru SMTP” 0 20
217.112.42.215 – OutboundConnectionCommand [27/Nov/2008:16:31:38 +0300] “AUTH – SMTP” 0 4
217.112.42.215 – OutboundConnectionResponse [27/Nov/2008:16:31:38 +0300] “- -?500 5.5.1 Invalid command SMTP” 0 25

Из Windows Mail отправка работает, проверено. Из командной строки – работает.
Exchange не отправляет.

Я установил Microsoft Network Monitor и увидел гораздо больше, нежели пишет в лог Exchange.

 

 

Оказывается, при авторизации AUTH LOGIN, Exchange в соответствии с RFC 4954 (http://tools.ietf.org/html/rfc4954)  использует опциональный параметр initial response, и передает имя пользователя в одной строке с командой AUTH LOGIN. Не смотря на то, что такое взаимодействие предусмотрено стандартом, сервер хостера его не поддерживал.

Если вы попробуете авторизоваться на вашем Exchange, то можете убедиться в том, что сам сервер подерживает оба способа передачи имени пользователя. Но передается почта только с использованием initial response.

Я нашел одно полезное сообщение про эту проблему http://www.tech-archive.net/Archive/Exchange/microsoft.public.exchange2000.protocols/2004-04/0010.html , где сотрудник Microsoft подтверждает наличие проблемы, и даже возможность существования патча от PSS, изменяющего поведение Exchange, однако, поскольку проблема не в Exchange, предлагает решать ее с владельцем не совместимого с RFC сервера.

Что же, именно так и следует поступить.

Как работает авторизация SMTP типа AUTH LOGIN

В этой заметке я хотел бы рассказать, как отправлять почту из командной строки по SMTP с авторизацией открытым текстом (clear text). Это может оказаться полезным, если необходимо диагностировать ошибки при отправке почты в Outlook или Exchange Server.

Именно так я выяснил один интересный факт об Exchange 2003, связанный с особенностью реализации в нем SMTP авторизации, о котором я расскажу позже.

Диалог включения SMTP Auth login для отправки писем в Exchange

Диалог включения SMTP Auth login для отправки писем в Outlook

Расширение диалога SMTP командой AUTH описывается в RFC4954.

Общий синтаксис прост:

Клиент отправляет серверу команду

AUTH механизм [опциональный первоначальный ответ]

И если сервер принимает механизм авторизации, диалог продолжается с отправкой имени пользователя и пароля в кодировке BASE64.

Для работы нам понадобится утилита кодирования/декодирования в BASE64. Я использовал онлайн-утилиту
http://www.motobit.com/util/base64-decoder-encoder.asp

1. Подключаемся к SMTP серверу

telnet mx.valuehost.ru 25

сервер отвечает нам приветствием

220 mx7.valuehost.ru ESMTP ready

2. Отправляем приветствие

EHLO servername

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

Из ответа сервера следует, что он поддерживает авторизацию PLAIN, LOGIN,
CRAM-MD5

3. Выбираем тип авторизации

AUTH LOGIN

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6

Декодируем «VXNlcm5hbWU6» из BASE64, ответ сервера – «334 Username:»

4. Передаем имя пользователя, закодированное в BASE64

dGVzdHVzZXI=

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6

Ответ сервера – «334 Password:»

5. Передаем пароль, закодированный в BASE64

cGFzc3dvcmQ=

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6
08:C cGFzc3dvcmQ=
09:S 235 2.0.0 OK

В случае успешной авторизации возвращается строка «235 2.0.0 OK».

Далее можно работать как в обычной SMTP сессии.

01:S 220 mx7.valuehost.ru ESMTP ready
02:C EHLO servername
03:S 250-mx7.valuehost.ru250-PIPELINING

250-8BITMIME

250 AUTH PLAIN LOGIN CRAM-MD5

 

04:C AUTH LOGIN
05:S 334 VXNlcm5hbWU6
06:C dGVzdHVzZXI=
07:S 334 UGFzc3dvcmQ6
08:C cGFzc3dvcmQ=
09:S 235 2.0.0 OK
10:C mail from:<testuser@testserver.com>
11:S 250 2.1.0 Ok
12:C rcpt to:<testuser@testserver.com >
13:S 250 2.1.5 Ok
14:C data
15:S 354 End data with <CR><LF>.<CR><LF>
16:C test.

 

17:S 250 2.0.0 Ok: queued as 6F1482E0CE
18:C quit
19:S 221 2.0.0 Bye
   

Настройка списка компьютеров в Remote Assistance

Диалог предложения помощи выглядит довольно аскетично – поле для ввода имени ПК и кнопка “Подключить”. Хорошая новость – это легко изменить.

Диалог подключения хранится в файле “%windir%pchealthhelpctrVendorsCN=Microsoft Corporation,L=Redmond,S=Washington,C=USRemote AssistanceEscalationUnsolicitedUnSolicitedRCUI.htm”

За ввод имени станции отвечает <INPUT> с ID=idComputerNameunsolicitedrcui1.png

Что сделал я – добавил к стандартному <INPUT> элемент <SELECT> с id=idComputerName1

unsolicitedrcui2.png

и добавил проверку – если не заполнен <INPUT> – взять значение из <SELECT>

unsolicitedrcui3.png

В результате получаем более дружественный диалог:
unsolicitedrcui4.png

Для того, чтобы не модифицировать файл вручную, был написан очень простой скрипт. Скрипт берет список компьютеров из указанного домена, и если на компьтере установлена Windows XP Prof и компьютер имеет dns имя, то он добавляется в список.

Сохраните скрипт в отдельный каталог, туда же поместите оригинальный UnSolicitedRCUI.htm. Измените <LDAP://dc=domain,dc=local> на имя вашего домена.

Скрипт в .pdf можно взять здесь
Скрипт в .zip – здесь

Запуск Remote Assistance

Не все находят удобным запуск RA стандартным способом – Пуск, Справка и поддержка, Использование служебных программ, Предложение удаленной помощи.

Есть более простой способ – Пуск, выполнить, hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/unsolicited/unsolicitedrcui.htm
Можно даже создать командный файл RA.cmd вида

iexplore.exe hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/unsolicited/unsolicitedrcui.htm

Но есть более простой и изящный способ. Создайте в блокноте текстовый файл RA.url следующего содержания:

[InternetShortcut]
URL=hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/unsolicited/unsolicitedrcui.htm

Удобно поместить созданный файл в меню быстрого запуска.

Remote Assistance (Удаленный помощник)- отключаем подтверждения

При подключении к станции с использованием Remote Assistance (удаленного помощника), пользователь должен дать согласие на

  • – подключение для просмотра
  • – управление компьютером

Это может быть неудобным, если вы всегда подключаетесь для управления компьютером.

Кто первый нашел это решение неизвестно, суть в следующем.

Для отключения разрешения на подключение модифицируем файл
%windir%pchealthHelpCtrSystemRemote Assistancehelpeeaccept.htm

было стало
btnAccept.disabled = false;
btnDecline.disabled = false;
btnDecline.focus();
btnAccept.disabled = false;
btnDecline.disabled = false;
btnDecline.focus();
DoAccept();

Для отключения запроса на управление, изменим файл
%windir%pchealthHelpCtrSystemRemoteAssistanceInteraction
ServerTakeControlMsgs.htm

было стало
idExpert1.innerText = vArgs[0];
idExpert2.innerText = vArgs[0];
idExpert3.innerText = vArgs[0];
idExpert1.innerText = vArgs[0];
idExpert2.innerText = vArgs[0];
idExpert3.innerText = vArgs[0];
onClickHandler(0);

или меняем

<BODY id=”idBody” class=”sys-inlineform-bgcolor1″ onload=InitiateMsg();> на
<BODY id=”idBody” class=”sys-inlineform-bgcolor1″ onload=InitiateMsg();onClickHandler(0);>

Если вы подготовили набор модифицированных файлов для распространения в вашей сети, внимательно отнеситесь к языковой версии и уровню service pack машин, на которые вы будете  копировать файлы. Настоятельно рекомендую для каждой пары “язык-service pack” использовать отдельные версии модифицированных файлов.

Ссылки по теме:

Auto Accept and Take Control for Remote Assistance
Offer Remote Assistance in Windows XP Professional
Unsolicited Remote Assistance

Remote Assistance – отключаем ESC.

Первое, с чем сталкивается администратор, помогая пользователям через Remote Assistance, это отключение управления по нажатию ‘ESC’. Хорошо, если вы никогда в работе не используете эту кнопку. В ином случае, ваша сессия будет прерываться при каждом случайном нажатии.

Избавиться от этого просто. Найдите в каталоге клиента %windir%pchealth файл RAServer.htm и удалите строчку g_objPanic.SetPanicHook(Stop_Control);

Удаленное управление через Remote Assistance

Начиная с Windows XP администраторам доступны новые средства удаленого управления рабочими станциями пользователей -Remote Desktop и Remote Assistance (RA). В отличие от Remote Desktop, RA позволяет администратору подключаться к текущей рабочей сессии пользователя так, что станция не блокируется, и пользователь видит происходящее на экране.
ra.png
В  домене удаленная сессия может быть инициирована как пользователем (“Запрос к удаленному помощнику”), так и администратором (“Предложение удаленной помощи”).

Многие администраторы, к сожалению, не знают о самом факте существования RA, его возможностях, и по прежнему используют в корпоративной среде такие средства удаленного управления как VNC, Radmin, etc.

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

  • – Средство встроенно в ОС, то есть бесплатно и не требует установки
  • – Для работы используется быстрый протокол RDP

В нескольких следующих постах я хочу рассказать о тех дополнительных возможностях RA, которые мы используем повседневно.

Дополнительная информация о RA:
Обзор функции удаленного помощника в Windows XP
Описание процесса подключения службы Удаленный помощник
Использование параметра политики “Предложение удаленной помощи”
Администрирование Удаленного помощника
Remote Assistance FAQ for Technical Users

WordPress Themes