如何在不增加文件缓存的情况下将大文件复制到Windows中的网络共享/从网络共享中复制? PowerShell或.NET,理想情况下

时间:2012-03-01 20:10:41

标签: c# windows powershell

我正在使用专用的Windows 2008 R2和2003 SQL Server;白天和晚上,我需要将大型文件从机器上复制到网络共享以进行备份和日志传送。

有一个记录在案的问题,操作系统会为文件缓存分配大量内存来处理这些副本,并且可能会从其他功能中抢夺内存。 (最终在Win2k8 R2上,任务管理器报告可用内存= 0作为此行为的结果。)但是这些特定文件在复制后从不读取,并且"以防万一&#34 ;缓存文件数据对此功能没有意义。

是否有一种简单的.NET或PowerShell方式来复制文件,而不是让这个文件缓存增长?我要处理的最大文件是300多GB。

我们目前在2008 R2上使用RoboCopy,在2003年使用xcopy,以及SQL Server自己的日志传送文件复制作业用于此功能。

我在win2k8R2中听说过XCOPY中的a / J开关,有些人认为Exchange中的特殊DLL有助于解决这个问题,但是有一个非常干净简单的解决方案会很好。

另见http://blogs.msdn.com/b/ntdebugging/archive/2007/11/27/too-much-cache.aspx

1 个答案:

答案 0 :(得分:0)

当我复制大量数据时,我使用Robocopy是因为我遇到了其他选项的问题,例如XCOPY,复制项等

我的Robocopy脚本:

#Source folder
$src = "" 

#Destination folder
$dest = "" 

<#Robocopy options: 
E = Copy subdirectories, including empty directories.
V = Verbose output
ZB = Restartable & backup mode (to handle network connectivity issues & disruptions)
COPY DAT = Copy Data, Attributes, and Timestamps. Add 'S' to include ACL/permissions.
XJ = Exclude junction points.
#>
$options = @("/E","/V","/ZB", "/COPY:DAT", "/XJ")

#Store src, dest, and other previously defined options in an array.
$cmdArgs = @($src, $dest, $options)

#Execute!
robocopy @cmdArgs