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

11 комментариев

  • By Vadims Podāns, 04.12.2008 @ 01:44

    В принципе, для Windows Vista и выше это уже малоактуально. Теперь теневые копии доступны из Explorer’а (достаточно вызвать Properties для файла или папки). Так что это полезно разве что для Windows Server 2003.

  • By gotch, 19.12.2008 @ 17:09

    Приветствую, Вадим!
    Да, согласен, открыть можно. Но меня больше заинтересовала возможность резервного копирования из скрипта в назначеном задании именно открытых на запись файлов.

  • By Sinya, 25.03.2009 @ 17:04

    Не понятна фраза:
    “Версия для XP, в первую очередь, отличается от «серверной» тем, что не может создавать «хранимые» (persistent) snapshot’ы, то есть по окончанию процесса резервирования snapshot удаляется.” Это что имеется в виду – что не успееш снапшот подключить как диск X, как он уже испарится? То есть это не работает в XP? Но мне в ней и надо.

  • By gotch, 25.03.2009 @ 18:01

    Sinya, примерно так и есть. После окончания процесса резервирования снэпшот удаляется.

    Посмотрите по этой ссылке что делать с XP – http://blogs.msdn.com/adioltean/archive/2006/09/18/761515.aspx

    Если что-то непонятно, скажите.

  • By aleksey, 07.05.2010 @ 15:54

    Приветствую, gotch!
    Вы не сталкивались с ситуацией, когда пользователь с ограниченными правами должен запускать vshadow.exe на WinXP? Дело в том, что при админских привилегиях все работает безупречно, а вот при попытке запуска с првами пользователя появляеться
    ERROR: COM call “CreateVssBackupComponents(&m_pVssObject)” failed.
    – Returned HRESULT = 0x80070005
    Возможно, Вы знаете, как обойти эту ошибку?
    Есть условия: запускать vshadow.exe должен только пользователь и сторонние средства а-ля Run As не котируються.
    Извините, если не по адресу.

  • By Vadims Podāns, 20.07.2010 @ 11:30

    на счёт последнего комментария, вам нужно изменить права на запуск VSS в Component Services. А так же дать пользователю привилегии SeBackup.

  • By Pavel, 15.10.2010 @ 16:17

    Добрый день!
    А почему на 2008 x64 сервере может возникать ошибка:
    C:Program Files (x86)MicrosoftVSSSDK72TestAppsvshadowbinrelease-server>vs
    hadow.exe -p -script=test.cmd d:

    VSHADOW.EXE 2.2 – Volume Shadow Copy sample client
    Copyright (C) 2005 Microsoft Corporation. All rights reserved.

    (Option: Persistent shadow copy)
    (Option: Generate SETVAR script ‘test.cmd’)
    (Option: Create shadow copy set)

    ERROR: COM call “m_pVssObject->InitializeForBackup()” failed.
    – Returned HRESULT = 0x8000ffff
    – Error text: E_UNEXPECTED
    – Please re-run VSHADOW.EXE with the /tracing option to get more details

  • By gotch, 15.10.2010 @ 16:23

    Статья немного старовата, на Server 2008 лучше воспользоваться штатной утилитой diskshadow.exe

  • By Rockie, 27.10.2010 @ 16:43

    =================
    Добрый день!
    А почему на 2008 x64 сервере может возникать ошибка:
    C:Program Files (x86)MicrosoftVSSSDK72TestAppsvshadowbinrelease-server>vs
    hadow.exe -p -script=test.cmd d:

    VSHADOW.EXE 2.2 – Volume Shadow Copy sample client
    Copyright (C) 2005 Microsoft Corporation. All rights reserved.

    (Option: Persistent shadow copy)
    (Option: Generate SETVAR script ‘test.cmd’)
    (Option: Create shadow copy set)

    ERROR: COM call «m_pVssObject->InitializeForBackup()» failed.
    – Returned HRESULT = 0x8000ffff
    – Error text: E_UNEXPECTED
    – Please re-run VSHADOW.EXE with the /tracing option to get more details
    ===============

    аналогично, та же ошибка на Win 2008 R2 Web Server

  • By gotch, 27.10.2010 @ 16:44

    Воспользуйтесь diskshadow.exe

  • By Alexandr, 25.06.2018 @ 16:35

    у кого ошибка
    ERROR: COM call «m_pVssObject->InitializeForBackup()» failed.
    проверьте разрядность vshadow 32 или 64

Other Links to this Post

RSS feed for comments on this post. TrackBack URI

Leave a comment

WordPress Themes