Ошибка 0x80042306 при создании VSS снимка

Обновлено 21.12.2023

vss logoДобрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами устранили ошибку 0xc0000098 при установке Windows, там пришлось, конечно, попотеть, но оно того стоило. Идем дальше и сегодня поговорим опять про ошибки, да, да и еще раз, да. Есть в Windows служба Volume Shadow Copy, вот на ряде серверов она просто перестала работать без видимых причин. При попытке сделать VSS снимок выскакивало окно с предупреждением 0x80042306.

Описание проблемы 0x80042306

Давайте я опишу подробнее инфраструктуру. Есть файловый кластер построенный на виртуальных машинах ESXI 8, в качестве гостевых операционных систем на них используется ОС Windows Server 2022. Там настроены роли, которые при необходимости могут перемещаться между нодами кластера, давая 100% время работы файловым шарам. На каждом разделе кластера настроены снимки VSS, для сохранения промежуточной работы пользователей в течении рабочего дня перед основным резервным копированием.

Настроено отслеживание создания снимков в виде PowerShell скрипта, который присылает эти данные на почту. Меня привлекло сообщение, что на некоторых дисках отсутствовали данные, о VSS снимках, хотя я точно знал, что они там были настроены.

Уведомление, о VSS снимках

Я зашел по RDP на те ноды, где отсутствовали VSS снапшоты. Попытался сделать их в ручном режиме, но получил ошибку:

Failed to create a shadows copy of volume E:\. Error 0x80042306: The shadows copy proveder had an error. Check the System and Application event logs for more information.

0x80042306

Изучив логи системы я обнаружил вот такую ошибку:

ID 1: The shadow copy of volume E: could not create shadow copy storage on volume E:.

could not create shadow copy storage on volume

Очень много было предупреждений на NTFS с ID 50.

{Delayed Write Failed} Windows was unable to save all the data for the file . The data has been lost. This error may be caused by a failure of your computer hardware or network connection. Please try to save this file elsewhere.

Windows was unable to save all the data for the file

ID 55:

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".

ID 55 A corruption was found in a file system index structure

ID 7001: VssAdmin: Unable to create a shadow copy: The shadow copy provider had an error. Please see the system and application event logs for more information.
Command-line: '"C:\Windows\system32\vssadmin.exe" Create Shadow /AutoRetry=15 /For=\\?\Volume{EF125256-F743-41E9-5555-B29576E7667A}\'.

VssAdmin Unable to create a shadow copy

ID 8193:

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)

ID 8193

Я отложил дальнейшие действия по устранению ошибки 0x80042306 на вечер и стал спокойно его дожидаться. В какой-то момент мне пришло уведомление на почту от скрипта, который мониторит переезд DFS ролей на другую ноду, я ранее рассказывал, как это делать. И через пол минуты прилетело событие в мониторинге, что данная нода была перезагружена.

После подключения к ней я увидел, что у нее был синий экран смерти, при его диагностике я получил вот такую информацию.

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED: Bug Check Code: 0x1000007e. Виной стал драйвер VeeamVolumeCT.sys.

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

SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

VeeamVolumeCT.sys

Как устранить ошибку VSS 0x80042306 через установку обновлений

Приступив к изучению проблемы я стал вспоминать, что до этого было сделано на сервере. Из последних изменений была установка .Net Framework 4.7 и установка октябрьских обновлений KB5031364 и KB5031361. Framework 4.7  отмел сразу, так как он был раскатан и на других серверах, а вот с обновлением KB5031364 тут все веселее.

Меня привлекли публикации "Виртуальные машины не удалось запустить после установки обновления за октябрь 2023 г. (KB5031364)" - https://community.veeam.com/blogs-and-podcasts-57/virtual-machines-failed-to-start-after-installing-oct-2023-update-kb5031364-5796 или "Обновление KB5031364 для Windows Server 2022 вызывает BSoD на гипервизорах VMware ESXi" - https://habr.com/ru/news/773364/

Я решил проверить эту гипотезу и установил поверх KB5031361, ноябрьские обновления KB5032196. Буквально сразу после перезагрузки все ошибки связанные с VSS и повреждением диска ушли из системы.

KB5032196

Перезапуск службы теневого копирования

В некоторых случаях вы можете попытаться исправить ошибку 0x80042306 через банальный перезапуск службы VSS.

services.msc

  • 3️⃣У вас откроется оснастка со списком служб, найдите там "Volume Shadow Copy". Вызовем у нее контекстное меню, в котором выберите свойства.

Свойства службы VSS

  • 4️⃣В свойствах выберите автоматический старт и запустите службу. Далее проверьте создаются ли снапшоты VSS вручную, если повторяется ошибка 0x80042306, то переходим к следующему методу.

Volume Shadow Copy

  • 5️⃣Так же можно все сделать через PowerShell. Выставить для службы VSS автоматический запуск службы:

Set-Service -Name VSS -StartupType Automatic

Запустить службу VSS:

Start-Service -Name VSS

Вывести статус службы VSS:

Get-Service -Name VSS | Select-Object Status

Ошибка 0x80042306 возникает при настройке теневых копий на ClusterStorage дисках

При попытке настроить VSS снимки в Windows Server для кластерных дисков, смонтированных как папки на другом томе, может произойти сбой. Кроме того, вы можете получить следующее сообщение об ошибке:

ClusterStorage

Failed to create the storage area association.
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 через PowerShell

Теперь давайте его заменим:

# Для форсированного пересоздания ключа реестра 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

Создание ключа ClusterOfflineTimeout

Обязательно перезагрузите систему.

Перерегистрация компонентов VSS

Логично предположить, что служба теневого копирования VSS построена на различных компонентах, от работы которых зависит ее стабильность. При повреждении этих компонентов иногда может возникнуть ошибка 0x80042306. Создайте обычный текстовый файл, включите у него отображение расширения, как это делать посмотрите по ссылке. Далее измените txt на bat.

Редактирование bat

После чего с помощью текстового редактора измените его внеся в него вот такие команды:

cd /d %windir%\system32
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

Перерегистрация VSS компонентов

Далее в командной строке перейдите через команду cd в нужный каталог и запустите bat файл. Вот так выглядит процесс самой перерегистрации библиотек.

Перерегистрация VSS компонентов cmd

Перезагрузитесь и проверьте работу службы VSS. Если ошибка "Error 0x80042306: The shadow copy provider had an error" сохраняется, то пробуем дальше.

Пробуем проверить и отремонтировать системные файлы

У ОС Windows бывают сложности, что могут повредиться системные файлы, от которых могут зависеть различные службы и компоненты, у нас уже было такое при ошибке 0x8007050a. Для того, чтобы попробовать отремонтировать Volume Shadow Copy, запустите командную строку от имени администратора и выполните вот такую команду:

sfc /scannow & DISM /Online /Cleanup-Image /ScanHealth & DISM /Online /Cleanup-Image /CheckHealth & DISM /Online /Cleanup-Image /RestoreHealth

Как видите в моем примере было обнаружено повреждение системных файлов и утилита их автоматически устранила.

Windows Resource Protection found corrupt files and successfully repaired them.
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 из-за сбойно созданной точки восстановления или поврежденной. Попробуйте переименовать файлы точек восстановления по пути:

%windir%\System32\Tasks\Microsoft\Windows\SystemRestore

Тут будет файл SR без расширения. Выберите его и нажмите F2, после чего дайте название SR.old.

Файл SR

После того, как вы переименуете этот файл, перезагрузите компьютер, чтобы проверить результат.

Удаление или переустановка других VSS провайдеров

Еще одним из методов починить службу Volume Shadow Copy и устранить ошибку 0x80042306, это удаление или обновление сторонних VSS провайдеров, которые есть могут быть у вас в системе. Например у меня в системе для резервного копирования используется Veeam VSS Hardware Provider, если бы я ранее не узнал, что проблема в обновлении Windows, то я 100% бы попробовал его удалить или обновить до самой актуальной версии при ее наличии, что я вам и советую проверить.

Veeam VSS Hardware Provider

Для того, чтобы в Windows посмотреть какие зарегистрированы и имспользуются VSS провайдеры выполните в cmd команду:

vssadmin list providers

vssadmin list providers

У меня список выглядел вот так:

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.

Размер VSS для точек восстановления системы

Если мы говорим про несистемные диски, то там чаще всего настраивают с помощью оснастки "Управление компьютером". Вам нужно выбрать нужный диск и перейти в его свойства, тут есть пункт "Use limit" в рамках которого вы можете в мегабайтах задать размер.

Настройка VSS на диске

Либо вы можете посмотреть и через командную строку, для этого есть утилита vssadmin. Выполните команду:

vssadmin List ShadowStorage

Как видите, тут будет список дисков, текущий размер VSS копий и максимальный.

vssadmin List ShadowStorage

Если захотите увеличить или изменить максимальный размер, то можн воспользоваться командой:

vssadmin Resize ShadowStorage /For=e: /On=c: /Maxsize=15%

Замените "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

Получение VSS через PowerShell

Или для ряда серверов, где их имена мы получаем из файла.

# Шаг 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 для списка серверов через PowerShell

На этом у меня все. Надеюсь, чт овам удалось восстановить работу 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

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *