.NET 中是否有办法备份包含多个子目录的目录,每个子目录可能包含 10,000 个或更多大小约为 100kb-500kb 的文件而无需枚举?这里的用例是将文件增量备份到 USB 存储和 NAS,但由于文件数量的原因,这可能需要很长时间。我熟悉 VSS 并使用它创建了一些自定义备份应用程序,但我想知道是否有办法对包含这些文件的卷进行快照并仅保存快照,而不必将快照公开为已安装的映像并复制每个文件。结束游戏是为了缩短复制操作所需的时间。
问问题
294 次
3 回答
1
一个 MFT(主文件表)记录的大小只有1K 或 1,024 字节,因此与移动文件数据本身所需的读取相比,检索名称、属性等只需要一点点 I/O。因此,枚举文件目录记录不是问题,可以这么说,消除这部分处理不会导致速度计上的微小闪烁。
我想您可以尝试使用克隆软件对磁盘数据本身进行低级 BIOS“克隆”(而不是副本)。这可能会快一点,因为磁盘头不必曲折。另一方面,如果您的硬盘是固态硬盘,则此选项几乎没有效果,因为随机访问将与顺序访问一样快。
另一种选择是仅备份已更改的文件,方法是检查每个文件的最后修改日期时间戳。一个简单的方法是使用带有开关的XCOPY命令/D
(不带参数),它将上次备份的日期/时间与当前文件进行比较,并且仅当硬盘上的文件比当前文件更新时才执行复制外部驱动器上的文件。
于 2017-04-21T20:57:11.357 回答
1
您可以从 .Net 调用不同的进程并使用 RoboCopy 移动文件。它有很多参数,例如指定要使用的线程数,或时间戳检查等。
public static void Main()
{
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\\Windows\\System32\\robocopy.exe Source Destination";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
于 2017-04-21T20:59:20.480 回答
1
Windows Server 备份功能可能是自定义构建解决方案的一个很好的替代方案。如果您运行的是 Windows Server 2016,您可能会发现这篇解释新功能的文章也很有趣。
于 2017-04-21T21:11:29.293 回答