Копируем открытые файлы при помощи 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
   

WordPress Themes