Копируем открытые файлы при помощи Volume Shadow Copy Service. |
![]() |
27.12.12 14:55 |
Копируем открытые файлы при помощи Volume Shadow Copy Service.Я думаю, все администраторы сталкиваются с задачей резервного копирования файловых серверов. Тогда на помощь приходят многочисленные утилиты копирования файлов – 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 необходимо использовать эту версию: Для XP используется Версия для 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=\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy16 D: том, для которого создается snapshot 2. Подключаем snapshot как диск call vars.cmd vshadow.exe -el=%SHADOW_ID_1%,X: call vars.cmd – загружаем переменные окружения с именем снапшота 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 {jcomments on} |