0

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

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

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

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

wmic shadowcopy call create Volume='C:\'

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

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

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

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

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

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

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

4

2 回答 2

0

所以我做了更多的测试,实际上Shadow Volume是在块级别而不是文件级别制作的。这意味着通过使用带有路径的createfile, \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1它的工作方式与使用带有路径的createfile类似\\.\C:

所以是的,您可以访问卷影副本文件系统,它有自己的引导扇区、mft 等。

于 2019-03-07T09:31:59.933 回答
0

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

硬件或软件卷影副本提供程序使用以下方法之一创建卷影副本:(由msdn doc回答)

完整副本此方法在给定时间点对原始卷进行完整副本(称为“完整副本”或“克隆”)。此副本是只读的。

Copy-on-write此方法不复制原始卷。相反,它通过复制在给定时间点之后对卷所做的所有更改(完成的写入 I/O 请求)来制作差异副本。

Redirect-on-write此方法不会复制原始卷,并且在给定时间点之后不会对原始卷进行任何更改。相反,它通过将所有更改重定向到不同的卷来制作差异副本。

当我读取磁盘时,我会得到一致的数据(包括 ntfs 元数据文件)吗?

即使应用程序没有以独占模式打开其文件,由于打开、备份和关闭文件所需的时间有限,复制到存储介质的文件可能并不都反映相同的应用程序状态。

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

请求者访问影子复制数据

影子复制卷上的路径是通过将原始路径的根替换为设备对象来获得的。例如,给定原始卷上的路径“C:\DATABASE*.mdb”和 snapProp 的 VSS_SNAPSHOT_PROP 实例,您可以通过连接 snapProp.m_pwszSnapshotDeviceObject、“\”和“\数据库*.mdb”。

于 2019-01-31T09:56:45.720 回答