Достаем файлы «предыдущих версий» с помощью vssadmin

Иногда возникают ситуации, когда предыдущие версии файлов, по какой-либо причине могут быть недоступны. Хороший пример возник не так давно и у меня: мы пытались ввести старые машины в домен и одновременно примапить пути старого профиля к новой доменной учетке. В результате вышло, что доменный профиль использовал пути старой учетки, но данные старой учетки пропали.

Первое, что пришло в голову — восстановить данные из «предыдущих версий» файлов. Версии, как я выяснил, создавались, но ввиду попыток изменения маппинга учеток и разнообразных сопутствующих модификаций реестра, дальше списка версий зайти не удавалось, т. к. вываливалась ошибка.

Быстро решить ошибку не удалось, а посему пришлось вспомнить немного теории. По сути «предыдущие версии» файлов есть обычные теневые копии. А как мы знаем теневые копии создаются с помощью VSS, соответственно и администрировать их можно инструментами для работы с VSS. Для решения моей задачи был использован vssadmin.

Собственно, для поиска утерянных файлов, мне требовалось найти подходящую теневую копию и залезть в нее без использования GUI. Перво-наперво я просмотрел список всех теневых копий тома (для статьи я сам создал другой пример, т. к. тогда было некогда скриншотить) командой:

vssadmin list shadows /for=[нужный мне том]:

VSS
Из этого вывода мне требовалось два параметра: первый — дата теневой копии (где я выбрал последнюю) и второе — путь, где теневая копия хранится (shadow copy volume), в данном случае это «\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1». Путь этот ведет в папочку «System Volume Information», куда путь простым смертным закрыт. Поскольку я также отношусь к простым смертным, мне пришлось пойти обходным путем и сделать на другом диске ссылку на конкретный путь, где лежала нужная мне копия. Для этого была использована команда

mklink /d c:\temp_copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\

которая создала символическую ссылку в виде папки c:\temp_copy на теневую копию. Обращаю внимание на два факта: во-первых папка c:\temp_copy не должна существовать при выполнении команды, а во-вторых слеш в конце пути к теневой копии обязателен, иначе потом вы не сможете зайти в созданную вами папку.

После всех этих манипуляций, я смог наконец, зайдя по пути c:\temp_copy попасть в теневую копию и вытащить оттуда все файлы, на необходимую мне дату. Ну вот собственно и все. 🙂

Оставить комментарий