使用XCOPY备份数据,却提示“内存不足”的原因?【使用robocopy才是正解】
刚才我远程登录到公司的谢谢你的文件共享服务器,手工测试一下,定期备份到西数NAS(3T)上的数据是否正确。主机:DELL 2950 服务器,双至强CPU 8内核,8G内存, windows 2008 R2 64位版。
NAS:IP 192.168.0.129, 去年京东自营999元买的西数 NAS 3T, 已升级到最新的v04.04.03-113固件。
在DELL 服务器上运行以下我自行编写的批处理(10年前我就向大家推荐这段我编写的备份批处理了)。
@echo off
echo 直接执行 backup-共享-129....
echo start copy 共享 ....%date% %time%
xcopy d:\共享\*.* \\192.168.0.129\share_129\共享 /d /e /i /y
echo xcopy 共享 success! (by arm共享/amobbs.com) ...%date% %time%
pause
经过近半小时的运行, 批处理运行完成。没有文件拷贝,表示自动的备份是成功的。(只有漏掉的,这段批处理,只有新版本的文件才会被拷贝)。
但奇怪的是,中间竟然提示“内存不足”。
查了一下NAS, 只用了230G, 还有2.7T空闲的啊!
有人知道原因或解决方法? 提示的内存不足,并不是存储不足。难道8GB内存用光了? 以前用DOS操作系统命令的时候,因为寻址能力有限,只能管理1M的内存空间,其中又只有640KB是留给应用程序的所谓基本内存。
所以以前用WIN95的时候,用系统自带的DOS执行copy命令的时候,明显会比WIN95下拷贝要慢。
不知道会不会是这个原因导致提示内存不足的?
毕竟现在系统里的DOS命令是怎么运行机制完全不了解。 是不是并发数量太多了? 猜测 xcopy 复制文件时是把源文件整个读到内存中,再写入目标文件,所以,检查一下源目录中是不是有单个大文件超出了内存容量? 远古的问题。。。依稀记得是路径太长或者文件数过多
据说目前用robocopy取代xcopy了,不妨一试 本帖最后由 dellric 于 2016-8-2 10:14 编辑
xcopy为DOS命令,这个命令比较方便,可以拷贝多层文件夹内部的文件,但文件夹深度过高会引起内存不足的问题,早期的DOS4.2以前不支持扩展内存,在6.22后得到了改善,需要配置HIMEM.SYS,在7版本后集成到了WINDOWS但任然为16位程序,使用了WINDOWS的虚拟模式,内存不再另外配置。
建议使用WINDOWS的系统的robocopy,即Windows 的可靠文件复制。 应该是文件数量太多了,递归形成的文件列表占用内存太多的缘故吧 看来使用 robocopy 才是正道。
但如何替换 robocopy d:\共享\*.* \\192.168.0.129\share_129\共享 /d /e /i /y 后面的/d /e /i /y
/D 只复制那些源时间比目标时间新的文件。
/E 复制目录和子目录,包括空目录。与 /S /E 相同。可以用来修改 /T。
/I 如果目标不存在,且要复制多个文件,则假定目标必须是目录。
/Y 取消提示以确认要覆盖现有目标文件。
将 robocopy 的帮助贴到这里,看看如何对应这些参数:
-------------------------------------------------------------------------------
ROBOCOPY :: Windows 的可靠文件复制
-------------------------------------------------------------------------------
开始时间: Tue Aug 02 10:33:12 2016
用法 :: ROBOCOPY source destination ...]
源 :: 源目录(驱动器:\路径或\\服务器\共享\路径)。
目标 :: 目标目录(驱动器:\路径或\\服务器\共享\路径)。
文件 :: 要复制的文件(名称/通配符: 默认为 "*.*")。
::
:: 复制选项:
::
/S :: 复制子目录,但不复制空的子目录。
/E :: 复制子目录,包括空的子目录。 ----- 这个可替换xcopy 的 /e 参数
/LEV:n :: 仅复制源目录树的前 n 层。
/Z :: 在可重新启动模式下复制文件。
/B :: 在备份模式下复制文件。
/ZB :: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
/EFSRAW :: 在 EFS RAW 模式下复制所有加密的文件。
/COPY:复制标记:: 要复制的文件内容(默认为 /COPY:DAT)。
(复制标记: D=数据,A=属性,T=时间戳)。
(S=安全=NTFS ACL,O=所有者信息,U=审核信息)。
/DCOPY:T :: 复制目录时间戳。
/SEC :: 复制具有安全性的文件(等同于 /COPY:DATS)。
/COPYALL :: 复制所有文件信息(等同于 /COPY:DATSOU)。
/NOCOPY :: 不复制任何文件信息(与 /PURGE 一起使用生效)。
/SECFIX :: 修复所有文件的文件安全性,即使是跳过的文件。
/TIMFIX :: 修复所有文件的文件时间,即使是跳过的文件。
/PURGE :: 删除源中不再存在的目标文件/目录。
/MIR :: 镜像目录树(等同于 /E 和 /PURGE)。
/MOV :: 移动文件(复制后从源中删除)。
/MOVE :: 移动文件和目录(复制后从源中删除)。
/A+: :: 将给定的属性添加到复制文件。
/A-: :: 从复制文件中删除给定的属性。
/CREATE :: 仅创建目录树和长度为零的文件。
/FAT :: 仅使用 8.3 FAT 文件名创建目标文件。
/256 :: 关闭超长路径(> 256 字符)支持。
/MON:n :: 监视源;发现多于 n 个更改时再次运行。
/MOT:m :: 监视源;如果更改,在 m 分钟时间内再次运行。
/RH:hhmm-hhmm :: 运行小时数 - 可以启动新副本的时间。
/PF :: 以每个文件(而不是每个步骤)为基础检查运行小时数。
/IPG:n :: 程序包间的间距(ms),以释放低速线路上的带宽。
/SL :: 对照目标复制符号链接。
/MT[:n] :: 使用 n 个线程进行多线程复制(默认值为 8)。
n 必须至少为 1,但不得大于 128。
该选项与 /IPG 和 /EFSRAW 选项不兼容。
使用 /LOG 选项重定向输出以便获得最佳性能。
::
:: 文件选择选项:
::
/A :: 仅复制具有存档属性集的文件。
/M :: 仅复制具有存档属性的文件并重置存档属性。
/IA: :: 仅包含具有任意给定属性集的文件。
/XA: :: 排除具有任意给定属性集的文件。
/XF 文件[文件]... :: 排除与给定名称/路径/通配符匹配的文件。
/XD 目录[目录]... :: 排除与给定名称/路径匹配的目录。
/XC :: 排除已更改的文件。
/XN :: 排除较新的文件。
/XO :: 排除较旧的文件。 ----- 这个是否可替换xcopy 的 /d 如文件已存在复制时间更新的文件?
/XX :: 排除多余的文件和目录。
/XL :: 排除孤立的文件和目录。
/IS :: 包含相同文件。
/IT :: 包含已调整的文件。
/MAX:n :: 最大的文件大小 - 排除大于 n 字节的文件。
/MIN:n :: 最小的文件大小 - 排除小于 n 字节的文件。
/MAXAGE:n :: 最长的文件存在时间 - 排除早于 n 天/日期的文件。
/MINAGE:n :: 最短的文件存在时间 - 排除晚于 n 天/日期的文件。
/MAXLAD:n :: 最大的最后访问日期 - 排除自 n 以来未使用的文件。
/MINLAD:n :: 最小的最后访问日期 - 排除自 n 以来使用的文件。
(If n < 1900 then n = n days, else n = YYYYMMDD date)。
/XJ :: 排除接合点。(默认情况下通常包括)。
/FFT :: 假设 FAT 文件时间(2 秒粒度)。
/DST :: 弥补 1 小时的 DST 时间差。
/XJD :: 排除目录的接合点。
/XJF :: 排除文件的接合点。
::
:: 重试选项:
::
/R:n :: 失败副本的重试次数: 默认为 1 百万。
/W:n :: 两次重试间的等待时间: 默认为 30 秒。
/REG :: 将注册表中的 /R:n 和 /W:n 保存为默认设置。
/TBD :: 等待定义共享名称(重试错误 67)。
::
:: 日志记录选项:
::
/L :: 仅列出 - 不复制、添加时间戳或删除任何文件。
/X :: 报告所有多余的文件,而不只是选中的文件。
/V :: 生成详细输出,同时显示跳过的文件。
/TS :: 在输出中包含源文件的时间戳。
/FP :: 在输出中包含文件的完整路径名称。
/BYTES :: 以字节打印大小。
/NS :: 无大小 - 不记录文件大小。
/NC :: 无类别 - 不记录文件类别。
/NFL :: 无文件列表 - 不记录文件名。
/NDL :: 无目录列表 - 不记录目录名称。
/NP :: 无进度 - 不显示已复制的百分比。
/ETA :: 显示复制文件的预期到达时间。
/LOG:文件 :: 将状态输出到日志文件(覆盖现有日志)。
/LOG+:文件 :: 将状态输出到日志文件(附加到现有日志中)。
/UNILOG:文件 :: 以 UNICODE 方式将状态输出到日志文件(覆盖现有日志)。
/UNILOG+:文件 :: 以 UNICODE 方式将状态输出到日志文件(附加到现有日志中)。
/TEE :: 输出到控制台窗口和日志文件。
/NJH :: 没有作业标头。
/NJS :: 没有作业摘要。
/UNICODE :: 以 UNICODE 方式输出状态。
::
:: 作业选项 :
::
/JOB:作业名称 :: 从命名的作业文件中提取参数。
/SAVE:作业名称 :: 将参数保存到命名的作业文件
/QUIT :: 处理命令行后退出(以查看参数)。
/NOSD :: 未指定源目录。
/NODD :: 未指定目标目录。
/IF :: 包含以下文件。
armok 发表于 2016-8-2 10:39
看来使用 robocopy 才是正道。
但如何替换 robocopy d:\共享\*.* \\192.168.0.129\share_129\共享 /d /e / ...
robocopy "d:\共享" "\\192.168.0.129\share_129\共享" /e /xo 建立了一个新的目录结构, 使用 robocopy 的 /e 与 /xo 测试了一下,第一次成功。
我修改了其中一个文件,让它的时间一些,再运行一次, 新的日期文件没有备份到。 看来 /xo 参数不适合。
到底哪一个参数才适合?
/XC :: 排除已更改的文件。
/XN :: 排除较新的文件。
/XO :: 排除较旧的文件。 ----- 这个是否可替换xcopy 的 /d 如文件已存在复制时间更新的文件?
/XX :: 排除多余的文件和目录。
/XL :: 排除孤立的文件和目录。
/IS :: 包含相同文件。
/IT :: 包含已调整的文件。
使用 /xn 参数。
刚才更新的文件备份到了。
但是,新建一个空目录没有备份到,除非目录里还有其它文件。
好了。 测试成功了。
使用 robocopy源目录目标目录 /e/xc
/E :: 复制子目录,包括空的子目录。
/XC :: 排除已更改的文件。 --------- 有人可能解释,为何使用这个参数?
我做了如下的测试,均成功了:
1. 新建一个测试目录结构,里面有空的子目录,有文件的目录等。
运行 robocopy成功全部复制。
2. 新增一个空目录。
运行 robocopy成功复制了该空目录,其它没有复制。
3. 修改了一个文件。
运行 robocopy成功复制了该较新的文件,其它没有复制。
armok 发表于 2016-8-2 11:02
好了。 测试成功了。
使用 robocopy源目录目标目录 /e/xc
增加一个参数:
使用 robocopy源目录目标目录 /e/xc/NDL
不再显示目录信息。
之前没有这个参数,目录信息显示得很烦人。
armok 发表于 2016-8-2 11:59
增加一个参数:
使用 robocopy源目录目标目录 /e/xc/NDL
在目标目录修改一个文件, /xc 会覆盖成源文件,就是说不是最新文件,/xo 没问题
armok 发表于 2016-8-2 10:47
建立了一个新的目录结构, 使用 robocopy 的 /e 与 /xo 测试了一下,第一次成功。
我修改了其中一个文件 ...
我这xo没这个问题,是不是当前时间跟服务器时间不同步
jimlovecat 发表于 2016-8-2 12:10
在目标目录修改一个文件, /xc 会覆盖成源文件,就是说不是最新文件,/xo 没问题
...
我不会在目标目录修改东西。备份就是备份,不会拿来使用。 支持老大的批处理,我纯粹小白,坐等围观了 mark filegee不知道你们用过没有免费版本就好呢不错了。对于备份文件非常合适 ,
最主要的支持云盘!
我用了几个月,感觉不错 knight_avr 发表于 2016-8-14 21:53
filegee不知道你们用过没有免费版本就好呢不错了。对于备份文件非常合适 ,
最主要的支持云盘!
云盘这种东西你都相信?
只有自己的硬盘才放心。 批处理文件现在还有用处,长知识。 本帖最后由 knight_avr 于 2016-8-14 22:50 编辑
armok 发表于 2016-8-14 22:03
云盘这种东西你都相信?
只有自己的硬盘才放心。
可以把资料备份到云盘
然后可以从云盘恢复到自家的电脑里(大家知道这是干什么用的,就不多说了)
可以只备份修改、新增、删除的文件
可以加密传输
可以加密打包压缩
非常好的工具 学习了。 knight_avr 发表于 2016-8-14 21:53
filegee不知道你们用过没有免费版本就好呢不错了。对于备份文件非常合适 ,
最主要的支持云盘!
偶尔也用filegee,不过扯淡的是新建一个任务的源文件只能是某个文件夹而不能是多个,这点比不上批处理啊,批处理用好了简直太方便了,双击就成 armok 发表于 2016-8-2 11:59
增加一个参数:
使用 robocopy源目录目标目录 /e/xc/NDL
robocopy源目录目标目录 /e/xc/NDL收藏了。
我有时会用微软的synctoy来同步。
可选3种同步模式。
Divingbear 发表于 2016-8-2 09:51
以前用DOS操作系统命令的时候,因为寻址能力有限,只能管理1M的内存空间,其中又只有640KB是留给应用程序的 ...
64bit系统早没ntvdm模拟8086了。xcopy有路径过长的bug而已 收藏了差异备份 收藏了,经常用到备份。 knight_avr 发表于 2016-8-14 21:53
filegee不知道你们用过没有免费版本就好呢不错了。对于备份文件非常合适 ,
最主要的支持云盘!
是支持所有的云盘还是只支持某家, 我想用三星手机带的云, 有10T, 但是没有pc客户端,感觉这个也勉强算商业的, 比免费的要靠谱些. liwey 发表于 2016-9-12 09:17
是支持所有的云盘还是只支持某家, 我想用三星手机带的云, 有10T, 但是没有pc客户端,感觉这个也勉强算商业 ...
没有用过其他的 只在百度云上试过 是可以的
其他的 你可以试试,反正免费的 下载下来 试试就知道了 帖子移动通知:
原分论坛:☆阿莫百科
目标分论坛:电脑综合
移动时间:0小时之后
页:
[1]