问题标签 [volume-shadow-service]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
294 浏览

c# - 备份大量文件而不枚举

.NET 中是否有办法备份包含多个子目录的目录,每个子目录可能包含 10,000 个或更多大小约为 100kb-500kb 的文件而无需枚举?这里的用例是将文件增量备份到 USB 存储和 NAS,但由于文件数量的原因,这可能需要很长时间。我熟悉 VSS 并使用它创建了一些自定义备份应用程序,但我想知道是否有办法对包含这些文件的卷进行快照并仅保存快照,而不必将快照公开为已安装的映像并复制每个文件。结束游戏是为了缩短复制操作所需的时间。

0 投票
1 回答
66 浏览

windows - VSS 备份导致自定义 Windows 服务失败

我在 vb.net 中构建了自定义 Windows 服务,这些服务在计时器上运行并在远程目录中查找要处理的文件。在一些服务器上,它们在同一时间(大约晚上 10 点 04 分 VSS 服务失败时)失败而没有任何错误。服务错误如下所示:

“该进程无法访问文件 filename.txt,因为它正被另一个进程使用。”

有时没有错误但服务挂起。我假设这是 VSS 服务。无论如何,CPU 会出现高达 100% 的巨大峰值并回落。我有日志(即上面无法写入的文件)将所有活动传递给我,并且每个进程都包含在 try..catch 中,它还会为我报告日志异常。没有任何结果。进程在代码的随机部分失败,通常在轮询计时器中,有时在处理过程中没有警告。该服务挂起,但说它仍在 services.msc 中运行。

有没有人遇到过这个问题或知道解决方法?我正在考虑使服务成为多线程的,以便可以检查另一个线程以防一个线程挂起,但不确定这是否能解决问题。我们尝试为服务器提供更多资源,这似乎有所帮助,但并没有完全解决问题。有时会超载,有时则不会。使用 windows server 2008 x64。

提前感谢您的帮助!

0 投票
0 回答
67 浏览

c++ - ExposeLocally 因 COM 错误而失败

我正在按照这篇文章使用 Windows VSS 服务创建快照,并通过安装它进一步向前迈进了一步。

搜索后,我找到了一个方法ExposeSnapshot(),我将所需参数传递给如下

result = pBackup->ExposeSnapshot(snapshotProp.m_SnapshotId, NULL, VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY, L"C:\\Mount\\", &pwszExposed);

此外,我将上下文设置为,result = pBackup->SetContext(VSS_CTX_APP_ROLLBACK | VSS_CTX_BACKUP);因为只能在本地安装持久性卷影副本,但仍具有相同HRESULT = 0x80070057的内容,如下所示One or more arguments are invalid

这里可能的错误是什么?

PS:我也用过L"C:\\Mount\\L"C:\Mount\\但似乎都不起作用

0 投票
1 回答
443 浏览

c# - 如何使用 C# 删除卷影副本?

我需要删除 Windows Server 2003 中的一个或所有卷影副本。如何使用 C# 来完成?例如,我可以在 cmd 中写“vssadmin delete shadows /all”,一切都会好的,但我需要自动执行。

0 投票
0 回答
1192 浏览

c# - 系统驱动器到磁盘克隆

我正在尝试找到一种方法将活动的 Windows 系统磁盘克隆到另一个磁盘,而不会像 Clonezilla 要求的那样强制用户使磁盘脱机。

我正在考虑 Microsoft 卷影复制服务 (VSS) 至少部分答案。(我完全愿意接受更好的想法/解决方案。)

在继续代码示例之前,我对 VSS(.Net 接口使用可通过 NuGet 包管理器获得的 AlphaVSS)有点犹豫,因为两个使用 VSS(Shadow Copy 和另一个工具)的实用程序没有正确复制驱动器. 并非所有文件都被复制,尤其是根目录中的 sys 文件正确,并且也没有复制完整权限。一个简单的 Araxis 磁盘比较显示了副本的不准确性。此外,我无法启动克隆的驱动器。我得到一个屏幕说驱动器无法启动并且必须修复。

该示例有点难以理解。我期待看到包含开关(子目录与非子目录,权限等,等等,等等)

我确实看过dotNetDiskImager,但那是USB到图像文件和图像文件到USB磁盘。修改代码,让一个人开车去潜水是完全失败的。不能只是愚蠢地复制扇区。必须知道您正在复制什么并进行修改。仅仅复制扇区并不是一项简单的任务,因此回到 VSS。

有更好的想法吗?

这是一个更新的 AlphaVSS 代码,它修复了由于 AlphaVSS 同步而不是异步导致的编译器错误。我还将代码从 VB 翻译成 C#。

简而言之,我想取一个通常具有“系统保留”、“主”和恢复分区的实时系统磁盘,并在系统中的另一个磁盘上进行实时克隆。

我会确保新磁盘有足够的空间,已经分区并格式化为 3 个 NTFS 分区。

0 投票
1 回答
875 浏览

powershell - 在通过 GUI [powershell] 访问之前无法访问卷影复制

我正在编写一个简单的 powershell 脚本,它将自动从 Windows 文件服务器到另一个远程 Windows 服务器的异地备份。文件可能正在使用中,因此为了让 Robocopy 成功复制它们,我需要从该特定驱动器的最后一个可用卷影副本中复制文件。

我可以用 Powershell 找到最后一个 Shadow Copy 就好了;问题是我实际上无法“引用”它(挂载它)以访问卷影副本上的文件。

但是,如果我首先通过 Windows 资源管理器 GUI访问 Shadow Copy 的内容,这种“神奇”的变化

然后突然之间,我可以很好地访问卷影副本并将内容复制到远程备份服务器。

这是有问题的代码:

如果我在不通过 GUI 访问最后一个卷影副本的情况下运行脚本的这一部分,我会收到以下错误:

同样,当我通过 Windows 资源管理器打开卷影副本时(显然?)Windows 正确引用了它,我就不会收到此类错误。卷影复制安装没有任何问题,我可以访问文件和文件夹。

我不是 Powershell 专家,也不是很热衷于它。我被这个问题困扰了好几天了。有谁知道如何解决这个问题和/或知道解决方法?

0 投票
1 回答
236 浏览

c++ - 在程序中访问卷影复制服务快照文件有哪些选项?

我正在使用 C++ 和 VSS API 在程序中创建 VSS 快照。根据此处,您可以使用 FindFirstFile/FindNextFile 函数或创建指向卷的符号链接并通过链接访问 VSS 快照中的文件。还有其他方法吗?谢谢。

0 投票
2 回答
402 浏览

winapi - 物理磁盘读取如何与 ntfs 的卷影一起工作?

我的目标是让备份程序读取物理磁盘(带有 NTFS 分区),同时使用 VSS 来实现数据一致性。

我使用 windows api 的函数 CreateFile 和 '\.\PhysicalDriveN' 如此处所述(基本上,它允许我将磁盘作为大文件访问)

https://support.microsoft.com/en-us/help/100027/info-direct-drive-access-under-win32

对于测试,我使用此命令创建体积阴影

这是一个临时解决方案,我计划通过程序本身使用 VSS

我的问题是: 如何存储卷影?它是存储自卷影以来已修改的数据,还是存储自上次卷影以来所做的修改?

在第一种情况下: 当我读取磁盘时,我会得到一致的数据(包括 ntfs 元数据文件)吗?

在另一种情况下: 我可以像访问磁盘/分区一样访问卷影吗?(为了读取隐藏的元数据文件等)

-我目前正在使用 Windows 7,但计划在不同版本的 Windows 服务器上使用它

-我已经阅读了很多关于 VSS 的微软文档,但它的工作原理对我来说似乎真的不清楚(如果你回答了一个,请解释一下它的含义)

-我知道卷影作为文件存储在“系统卷信息”文件夹中,名称类似于 {3808876b-c176-4e48-b7ae-04046e6cc752}

0 投票
1 回答
64 浏览

visual-c++ - IVssExamineWriterMetadata 的 C++ 和 COM 接口有什么区别?

根据https://docs.microsoft.com/en-us/windows/desktop/api/vsbackup/nl-vsbackup-ivssexaminewritermetadata

IVssExamineWriterMetadata 接口是一个C++(不是 COM)接口,允许请求者检查特定写入器实例的元数据。此元数据可能来自当前正在执行的(实时)编写器,或者它可能已存储为 XML 文档。

我看到的所有代码都将其视为 COM 接口。

这个定义对我来说就像 COM。

https://github.com/candera/hobocopy/blob/master/inc/winxp/vsbackup.h#L91

这里有什么区别?它是否以某种记录方式违反了 COM 接口设计规则?

0 投票
0 回答
111 浏览

c++ - VssExpressWriter 无法将文件夹添加到还原点

我正在尝试使用 VSS Express Writer 在执行还原点时将我的一个文件夹包含在还原点中。虽然代码似乎运行没有任何错误,但我没有得到预期的结果,当我返回还原点时,该文件夹也没有保留。

为了验证我的代码功能,我可以在 vssadmin list writers 中跟踪我的 writer。

我正在执行以下流程:

  1. 使用以下代码注册(见下文)。
  2. 创建系统还原点。
  3. 删除我的文件夹。
  4. 重新开始
  5. 恢复我的系统。

不幸的是,我没有找回我的文件夹..

procmon 记录是在系统还原点期间设置的,当时没有找到包含 myFolder 路径的事件...是否有可能在向 vsswriter 注册期间而不是在创建还原点期间添加了文件?

也许任何人都可以帮我找到我在这里缺少的东西?

谢谢