Ошибка 0x80042306 при создании VSS снимка
- Описание проблемы 0x80042306
- Как устранить ошибку VSS 0x80042306 через установку обновлений
- Перезапуск службы теневого копирования
- Ошибка 0x80042306 возникает при настройке теневых копий на ClusterStorage дисках
- Перерегистрация компонентов VSS
- Пробуем проверить и отремонтировать системные файлы
- Удаление или переименовывание точек восстановления
- Удаление или переустановка других VSS провайдеров
- Нехватка места для VSS копий
- Дополнительно
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами устранили ошибку 0xc0000098 при установке Windows, там пришлось, конечно, попотеть, но оно того стоило. Идем дальше и сегодня поговорим опять про ошибки, да, да и еще раз, да. Есть в Windows служба Volume Shadow Copy, вот на ряде серверов она просто перестала работать без видимых причин. При попытке сделать VSS снимок выскакивало окно с предупреждением 0x80042306.
Описание проблемы 0x80042306
Давайте я опишу подробнее инфраструктуру. Есть файловый кластер построенный на виртуальных машинах ESXI 8, в качестве гостевых операционных систем на них используется ОС Windows Server 2022. Там настроены роли, которые при необходимости могут перемещаться между нодами кластера, давая 100% время работы файловым шарам. На каждом разделе кластера настроены снимки VSS, для сохранения промежуточной работы пользователей в течении рабочего дня перед основным резервным копированием.
Настроено отслеживание создания снимков в виде PowerShell скрипта, который присылает эти данные на почту. Меня привлекло сообщение, что на некоторых дисках отсутствовали данные, о VSS снимках, хотя я точно знал, что они там были настроены.
Я зашел по RDP на те ноды, где отсутствовали VSS снапшоты. Попытался сделать их в ручном режиме, но получил ошибку:
Изучив логи системы я обнаружил вот такую ошибку:
Очень много было предупреждений на NTFS с ID 50.
A corruption was discovered in the file system structure on volume E:. A corruption was found in a file system index structure. The file reference number is 0x2000000a051d1. The name of the file is "\DFS\AppData\Roaming\Microsoft\ Windows\Recent\CustomDestinations". The corrupted index attribute is ":$I30:$INDEX_ALLOCATION".
Command-line: '"C:\Windows\system32\vssadmin.exe" Create Shadow /AutoRetry=15 /For=\\?\Volume{EF125256-F743-41E9-5555-B29576E7667A}\'.
Volume Shadow Copy Service error: Unexpected error calling routine IVssAsrWriterBackup::GetAsrMetadata. hr = 0x8007000d, The data is invalid.
.
Operation:
PrepareForBackup event
Context:
Execution Context: ASR Writer
Execution Context: Writer
Writer Class Id: {be000cbe-11fe-4426-9c58-531aa6355fc4}
Writer Name: ASR Writer
Writer Instance ID: {fa05077f-2728-4478-9597-5816f8679866}
Error-specific details:
ASR Writer: The data is invalid. (0x8007000D)
Я отложил дальнейшие действия по устранению ошибки 0x80042306 на вечер и стал спокойно его дожидаться. В какой-то момент мне пришло уведомление на почту от скрипта, который мониторит переезд DFS ролей на другую ноду, я ранее рассказывал, как это делать. И через пол минуты прилетело событие в мониторинге, что данная нода была перезагружена.
После подключения к ней я увидел, что у нее был синий экран смерти, при его диагностике я получил вот такую информацию.
BUCKET_ID_FUNC_OFFSET: e0e3
FAILURE_BUCKET_ID: AV_VeeamVolumeCT! unknown_function
BUCKET_ID: AV_VeeamVolumeCT! unknown_function
PRIMARY_PROBLEM_CLASS: AV_VeeamVolumeCT!unknown_function
Как устранить ошибку VSS 0x80042306 через установку обновлений
Приступив к изучению проблемы я стал вспоминать, что до этого было сделано на сервере. Из последних изменений была установка .Net Framework 4.7 и установка октябрьских обновлений KB5031364 и KB5031361. Framework 4.7 отмел сразу, так как он был раскатан и на других серверах, а вот с обновлением KB5031364 тут все веселее.
Я решил проверить эту гипотезу и установил поверх KB5031361, ноябрьские обновления KB5032196. Буквально сразу после перезагрузки все ошибки связанные с VSS и повреждением диска ушли из системы.
Перезапуск службы теневого копирования
В некоторых случаях вы можете попытаться исправить ошибку 0x80042306 через банальный перезапуск службы VSS.
- 1️⃣Для этого нажмите сочетание клавиш Win + R, чтобы открыть окно "Выполнить".
- 2️⃣Далее введите services.msc и нажмите "Enter"
- 3️⃣У вас откроется оснастка со списком служб, найдите там "Volume Shadow Copy". Вызовем у нее контекстное меню, в котором выберите свойства.
- 4️⃣В свойствах выберите автоматический старт и запустите службу. Далее проверьте создаются ли снапшоты VSS вручную, если повторяется ошибка 0x80042306, то переходим к следующему методу.
- 5️⃣Так же можно все сделать через PowerShell. Выставить для службы VSS автоматический запуск службы:
Запустить службу VSS:
Вывести статус службы VSS:
Ошибка 0x80042306 возникает при настройке теневых копий на ClusterStorage дисках
При попытке настроить VSS снимки в Windows Server для кластерных дисков, смонтированных как папки на другом томе, может произойти сбой. Кроме того, вы можете получить следующее сообщение об ошибке:
Error 0x80042306: The shadow copy provider had an error.
Чтобы в данном случае попытаться устранить данную ошибку, можно попытаться создать ключ реестра ClusterOfflineTimeout. Ключ реестра ClusterOfflineTimeout определяет время ожидания для перехода кластера в состояние офлайн, если узел кластера не отвечает. Когда кластер обнаруживает, что узел стал недоступным или не отвечает на запросы, он инициирует процесс перехода этого узла в состояние офлайн. Это означает, что кластер перестает использовать данный узел для обработки запросов и перенаправляет их на другие доступные узлы.
Этот ключ реестра позволяет настроить время ожидания в миллисекундах. Значение по умолчанию обычно составляет несколько минут, но его можно изменить в соответствии с требованиями и конфигурацией кластера. Изменение значения ключа ClusterOfflineTimeout может быть полезным в случаях, когда требуется ускорить переход недоступных узлов в состояние офлайн или, наоборот, увеличить время ожидания для более длительного тестирования доступности узлов. Однако следует быть осторожным при изменении этого ключа, так как неправильные настройки могут привести к нежелательным последствиям, таким как неправильное определение доступности узлов или задержки в обработке запросов.
Откроем PowerShell ISe от имени администратора и запросим текущее значение ключа:
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\VSS\Settings"
$regName = "ClusterOfflineTimeout"
$regValue = Get-ItemProperty -Path $regPath -Name $regName | Select-Object -ExpandProperty $regName
Write-Host "Значение ключа ClusterOfflineTimeout: $regValue"
Теперь давайте его заменим:
# Для форсированного пересоздания ключа реестра ClusterOfflineTimeout с десятичным значением 2000000000, выполните следующую команду в PowerShell:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\VSS\Settings" -Name "ClusterOfflineTimeout" -Value 2000000000 -Force
# Для вывода текущего значения ключа ClusterOfflineTimeout, выполните следующую команду в PowerShell:
(Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\VSS\Settings").ClusterOfflineTimeout
Обязательно перезагрузите систему.
Перерегистрация компонентов VSS
Логично предположить, что служба теневого копирования VSS построена на различных компонентах, от работы которых зависит ее стабильность. При повреждении этих компонентов иногда может возникнуть ошибка 0x80042306. Создайте обычный текстовый файл, включите у него отображение расширения, как это делать посмотрите по ссылке. Далее измените txt на bat.
После чего с помощью текстового редактора измените его внеся в него вот такие команды:
net stop vss
net stop swprv
regsvr32 /s ole32.dll
regsvr32 /s oleaut32.dll
regsvr32 /s vss_ps.dll
vssvc /register
regsvr32 /s /i swprv.dll
regsvr32 /s /i eventcls.dll
regsvr32 /s es.dll
regsvr32 /s stdprov.dll
regsvr32 /s vssui.dll
regsvr32 /s msxml.dll
regsvr32 /s msxml3.dll
regsvr32 /s msxml4.dll
vssvc /register
net start swprv
net start vss
Далее в командной строке перейдите через команду cd в нужный каталог и запустите bat файл. Вот так выглядит процесс самой перерегистрации библиотек.
Перезагрузитесь и проверьте работу службы VSS. Если ошибка "Error 0x80042306: The shadow copy provider had an error" сохраняется, то пробуем дальше.
Пробуем проверить и отремонтировать системные файлы
У ОС Windows бывают сложности, что могут повредиться системные файлы, от которых могут зависеть различные службы и компоненты, у нас уже было такое при ошибке 0x8007050a. Для того, чтобы попробовать отремонтировать Volume Shadow Copy, запустите командную строку от имени администратора и выполните вот такую команду:
Как видите в моем примере было обнаружено повреждение системных файлов и утилита их автоматически устранила.
For online repairs, details are included in the CBS log file located at
windir\Logs\CBS\CBS.log. For example C:\Windows\Logs\CBS\CBS.log. For offline
repairs, details are included in the log file provided by the /OFFLOGFILE flag.
Перезагрузите вашу систему и проверьте работу Volume Shadow Copy.
Удаление или переименовывание точек восстановления
В Windows есть механизм, который позволяет делать некое состояние системы до внесения изменений и если, что-то пошло не так откатиться к нему. За это отвечают как раз точки восстановления, когда Windows их создает, она задействует службу Volume Shadow Copy. Вы легко можете получать ошибку 0x80042306 из-за сбойно созданной точки восстановления или поврежденной. Попробуйте переименовать файлы точек восстановления по пути:
Тут будет файл SR без расширения. Выберите его и нажмите F2, после чего дайте название SR.old.
После того, как вы переименуете этот файл, перезагрузите компьютер, чтобы проверить результат.
Удаление или переустановка других VSS провайдеров
Еще одним из методов починить службу Volume Shadow Copy и устранить ошибку 0x80042306, это удаление или обновление сторонних VSS провайдеров, которые есть могут быть у вас в системе. Например у меня в системе для резервного копирования используется Veeam VSS Hardware Provider, если бы я ранее не узнал, что проблема в обновлении Windows, то я 100% бы попробовал его удалить или обновить до самой актуальной версии при ее наличии, что я вам и советую проверить.
Для того, чтобы в Windows посмотреть какие зарегистрированы и имспользуются VSS провайдеры выполните в cmd команду:
У меня список выглядел вот так:
Provider name: 'Microsoft CSV Shadow Copy Helper Provider'
Provider type: Software
Provider Id: {26d02d81-6aac-4275-8504-b9c6edc5261d}
Version: 1.0.0.1
Provider name: 'Microsoft CSV Shadow Copy Provider'
Provider type: Software
Provider Id: {400a2ff4-5eb1-44b0-8a05-1fcac0bcf9ff}
Version: 1.0.0.1
Provider name: 'Microsoft File Share Shadow Copy provider'
Provider type: Fileshare
Provider Id: {89300202-3cec-4981-9171-19f59559e0f2}
Version: 1.0.0.1
Provider name: 'Veeam VSS Hardware Provider'
Provider type: Hardware
Provider Id: {a44cd85f-7213-4031-9584-827ea2bb861d}
Version: 6.0.0.960
Provider name: 'Microsoft Software Shadow Copy provider 1.0'
Provider type: System
Provider Id: {b5946137-7b9f-4925-af80-51abd60b20d5}
Version: 1.0.0.7
Нехватка места для VSS копий
Когда создается VSS снимок, то для этого используется выделенное под это дисковое пространство. Оно задается при включении, например для точек восстановления это делается в оснастке systempropertiesprotection. На вкладке "Защита системы" нажмите внопку "Настроить". Тут вы увидите размер выделенного пространства, попробуйте его увеличить, еще как вариант можно попробовать тут все удалить, это то же может решить ошибку 0x80042306.
Если мы говорим про несистемные диски, то там чаще всего настраивают с помощью оснастки "Управление компьютером". Вам нужно выбрать нужный диск и перейти в его свойства, тут есть пункт "Use limit" в рамках которого вы можете в мегабайтах задать размер.
Либо вы можете посмотреть и через командную строку, для этого есть утилита vssadmin. Выполните команду:
Как видите, тут будет список дисков, текущий размер VSS копий и максимальный.
Если захотите увеличить или изменить максимальный размер, то можн воспользоваться командой:
Замените "e:" на правильный диск. Вы можете использовать больше или меньше 15%.
Если вы любите PowerShell, то так же можно получить эти данные.
# Шаг 1: Получить список всех дисков
$disks = Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property DeviceID
# Шаг 2: Для каждого диска выполнить команду vssadmin List ShadowStorage и сохранить вывод в переменную
$shadowStorageInfo = foreach ($disk in $disks) {
$diskID = $disk.DeviceID
$vssInfo = vssadmin List ShadowStorage /For=$diskID
[PSCustomObject]@{
Disk = $diskID
ShadowCopyStorageVolume = ($vssInfo | Select-String -Pattern "Shadow Copy Storage volume" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
UsedShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Used Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
AllocatedShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Allocated Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
MaximumShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Maximum Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
}
}
# Шаг 3: Вывести таблицу с данными
$shadowStorageInfo | Format-Table -AutoSize
Или для ряда серверов, где их имена мы получаем из файла.
# Шаг 1: Получить список компьютеров из файла
$computers = Get-Content -Path "C:\Temp\servers.txt"
# Шаг 2: Для каждого компьютера выполнить команду vssadmin List ShadowStorage и сохранить вывод в переменную
$shadowStorageInfo = foreach ($computer in $computers) {
$disks = Invoke-Command -ComputerName $computer -ScriptBlock {
Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property DeviceID
}
foreach ($disk in $disks) {
$diskID = $disk.DeviceID
$vssInfo = Invoke-Command -ComputerName $computer -ScriptBlock {
vssadmin List ShadowStorage /For=$using:diskID
}
[PSCustomObject]@{
Computer = $computer
Disk = $diskID
#ShadowCopyStorageVolume = ($vssInfo | Select-String -Pattern "Shadow Copy Storage volume" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
UsedShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Used Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
AllocatedShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Allocated Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
MaximumShadowCopyStorageSpace = ($vssInfo | Select-String -Pattern "Maximum Shadow Copy Storage space" | ForEach-Object { $_.Line -replace ".*: " }).Trim()
}
}
}
# Шаг 3: Вывести таблицу с данными
$shadowStorageInfo | Format-Table -AutoSize
На этом у меня все. Надеюсь, чт овам удалось восстановить работу VSS службы и исправить ошибку 0x80042306. С вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.
Дополнительно
https://forums.veeam.com/veeam-agent-for-windows-f33/creating-vss-snapshot-errorcode-t85191.html
https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/cannot-configure-clustered-mount-points-shadow-copies