Я разрабатывал vss-writer на основе этот образец Microsoft.
Вначале я использовал BETest.exe протестировать мое приложение
> betest.exe /B /S backup.xml /D C:\BackupDestination /X BetestSample.xml
> betest.exe /R /S backup.xml /D C:\BackupDestination /X BetestSample.xml
Работало нормально. Я мог:
Но как только я попытался сделать резервную копию / восстановить файл размером 10 ГБ, BETest вылетел из строя при операции восстановления. Каждый раз. Посмотрел другие инструменты:
С VShadow я набрал:
> vshadow -p -t=c:\bc.xml c:
Я видел, как печатает мой Writer:
enter: DepWriter::Initialize
enter: DepWriter::OnIdentify
enter: DepWriter::OnPrepareBackup
enter: DepWriter::OnPrepareSnapshot
enter: DepWriter::OnFreeze
enter: DepWriter::OnThaw
enter: DepWriter::OnPostSnapshot
enter: DepWriter::OnIdentify
enter: DepWriter::OnBackupComplete
enter: DepWriter::OnBackupShutdown
Мне удалось с помощью MKLink связать теневую копию и просмотреть ее:
> mklink /D c:\snapshots \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6\
Я мог видеть файлы, которые хотел сделать резервную копию.
Затем я набрал:
> vshadow -r=c:\bc.xml
вывод содержал (среди прочего):
Sending the PreRestore event ...
(Waiting for the asynchronous operation to finish...)
Set restore status for all components components for restore...
* Writer 'DFS Replication service writer':
- Select component \SYSVOL\3E53186A-7D53-4667-A3D1-D278B3564CDC-DF424FA9-3080-403E-B7CE-2A81A03A79FA
* Writer 'MSDNSampleWriter':
- Select component \TestFiles
Sending the PostRestore event ...
Restore done.
И у меня есть писатель, печатающий:
enter: DepWriter::OnIdentify
enter: DepWriter::OnPreRestore
enter: DepWriter::OnPostRestore
Но моих файлов не было ни в c: \ testPath, ни в c: \ testPath2. Они не были восстановлены.
My VSS Writer - это прямая модификация образца Writer из MSDN, и он отлично работал с небольшим файлом с помощью betest.
Почему VShadow не может восстановить мои файлы и сообщает об этом? Я использую его на Windows Server 2008 R2 64Bits
Я нашел путь...
Нужно использовать переключатель exec = {command}.
в моем случае команда проста:
vshadow -p -t=c:\bc.xml -exec="robocopy pathA pathB"
Я полагаю, что нормальный запросчик сделал бы что-нибудь умнее этого. Скорее всего, он сам найдет альтернативные места, у него будет политика на случай неудачи ... Но я пока не могу придумать лучшего инструмента, чем vshadow.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384575%28v=vs.85%29.aspx