返回列表 发帖

[原创代码] [Perl]硬盘对拷文件后批量校验MD5

本帖最后由 523066680 于 2025-3-6 23:54 编辑

robocopy 是坠吼的,从来没用过这么好的工具,学习了!
[url=][/url]

本帖最后由 aloha20200628 于 2025-3-6 16:32 编辑

回复 1# 523066680

试过系统内置的 robocopy 吗? 自称 ‘Windows的可靠文件复制 ’(自行校验)其默认设置是同启8个线程并行开工...
用如下一行流代码,让 robocopy 完工后在当前目录下生成结果报告 F2G.log 以便检查核实...
robocopy "F:\from\" "G:\to\" /s /log:"F2G.log" /v /fp /tsCOPY

TOP

回复 2# aloha20200628


    ?  听说robocopy并没有做MD5校验,而是时间戳和文件大小
[url=][/url]

TOP

本帖最后由 aloha20200628 于 2025-3-6 20:26 编辑

回复 3# 523066680

看其 log 文件中的 ‘相同’ 与否以及 ‘失败’、‘不匹配’ 等报告项还不足以检查核实 robocopy 的复制结果吗

TOP

本帖最后由 523066680 于 2025-3-6 20:46 编辑

回复 4# aloha20200628


    它的  ‘相同’ 与否以及 ‘失败’、‘不匹配’   是以什么为依据呢?
我是遇到过使用robocopy复制的zip文件到移动硬盘,读取里面的csv数据(用的某个csv解析库),出现数据为空的情况。
但是我手动从本地重新复制到移动盘,这个数据为空的问题解决了。

robocopy 这个工具我在过去几乎每天用的,
D:\Local\LData\202502>dir /b
2025-02-21.zip
2025-02-24.zip
2025-02-25.zip
2025-02-26.zip
2025-02-27.zip
2025-02-28.zip
同步到移动盘.batCOPY
同步到移动盘.bat
@echo off & setlocal enabledelayedexpansion
call :func %cd% yymm
echo dirname : %yymm%
mkdir L:\LData\!yymm! 2>nul
robocopy /MIR D:\Local\LData\!yymm! L:\LData\!yymm!COPY
[url=][/url]

TOP

回复 5# 523066680

历史上还未见ms自称那款产品是 ‘windows的可靠...’,但给 robocopy 赐了一顶 ...

TOP

回复 6# aloha20200628


    ?这样就可靠吗
[url=][/url]

TOP

本帖最后由 523066680 于 2025-3-7 08:01 编辑
回复  523066680

历史上还未见ms自称那款产品是 ‘windows的可靠...’,但给 robocopy 赐了一顶 ...
...
aloha20200628 发表于 2025-3-6 20:56
use Modern::Perl;
use File::Slurp;
STDOUT->autoflush(1);
my $src = ".\\robo_test";
my $dst = "D:\\Temp\\robo_test";
my $fname = "fluid-soundfont.tar.gz";
my $target = "$dst\\$fname";
# 这里模拟磁盘故障,导致部分节点写入数据为 NULL 的情况
my $rawdata = read_file( "$src\\$fname", {binmode => ":raw"} );
substr( $rawdata, 10240, 4, "\x00\x00\x00\x00" );
write_file( $target, {binmode => ":raw"}, $rawdata );
# 把源文件和目标文件赋予相同的 创建时间和修改时间
system(qq(nircmd setfiletime "$src\\$fname" "06-06-2008 12:00:01" "06-06-2008 12:00:01" ));
system(qq(nircmd setfiletime "$target" "06-06-2008 12:00:01" "06-06-2008 12:00:01" ));
# “可靠” 的文件复制,基于硬盘是否可靠
system(qq(robocopy /MIR "$src" "$dst" ));COPY
# 结果
#                总数        复制        跳过       不匹配        失败        其他
#     目录:         1         0         1         0         0         0
#     文件:         1         0         1         0         0         0
#     字节:  124.25 m         0  124.25 m         0         0         0
#     时间:   0:00:00   0:00:00                       0:00:00   0:00:00COPY
问题复现,模拟硬盘部分区域写入为空的情况:
手动复制并创建目标文件,将内容的某一位置4个字节改为 \x00\x00\x00\x00,再将文件的创建时间和修改时间 设为一致,再次执行Robocopy,结果显示跳过该文件的复制。
[url=][/url]

TOP

本帖最后由 523066680 于 2025-3-7 08:00 编辑
回复  523066680

试过系统内置的 robocopy 吗? 自称 ‘Windows的可靠文件复制 ’(自行校验)其默认设 ...
aloha20200628 发表于 2025-3-6 16:19



    另外,对于向一个移动硬盘的文件对拷,机械硬盘,8个线程开工 有什么意义吗
[url=][/url]

TOP

本帖最后由 523066680 于 2025-3-7 07:59 编辑

每天用robocopy同步压缩包,去年的11月左右出现这种问题,robocopy 每天同步一次,没有任何错误提示和终止。
直到有一次程序从移动盘加载当月某一个压缩包的数据显示空白,反复对比,发现手动拷贝过去后就正常了。

想着很久没来过了,发个贴吧,有人问我 Robocopy 用过没有,我说用过了,天天用。他又说 robocopy 很可靠,
我说就是用的robocopy,硬盘有问题,写入空白它没发现,他强调:官方认证的那种可靠 ……

怕了怕了,一定是我出了问题,你是对的。
[url=][/url]

TOP

本帖最后由 aloha20200628 于 2025-3-7 11:04 编辑


这么多年无奈在 ms 的靶场上打靶,连枪和子弹也是他造的,怎么顺手合适,最终不过是个人经验和习惯
回帖本想给个提示,仅供参考,如此而已 ...

TOP

回复 10# 523066680


    干嘛把主题帖的代码给删了啊?不是确定robocopy不带正文校验了吗?
天的白色影子

TOP

本帖最后由 qzwqzw 于 2025-3-7 15:23 编辑

之前只用过一次robocopy
后来用beyondcompare
再后来用duplicati
反正是没有再折腾命令行了
它的发布初衷是对标类Unix平台同时期发布的的rsync
但是后来好像活的不太好

印象中robocopy最早没有内置
是微软的某个资源包工具集里带的
相当于是“编外”工具
看那个命令行帮助的风格就很个性
只是后期被微软的Windows主家收编了
不仅给了正式编制
还叠上了卷影、多线程、SMB压缩等系统级buf
还自卖自夸的加上了“Windows 的可靠”标签
也不看看是谁在背书
好像Windows就多可靠一样

这种工具支持正文校验不是不行
只是别忘了它最初所强调的是性能、效率而不是可靠
而所有的校验算法包括CRC和HASH都需要牺牲性能
这种情况下该如何权衡其实是不难理解的
一般情况下我们会考虑增加一个校验的开关
然后默认关掉它

但微软可能觉得没有必要这么做
也许在他们认知的robocopy的绝大多数使用场景下
仅靠时间、大小、属性就可以判断文件的更新状态
再加上正文校验码纯属画蛇添足
也得亏是这样
其它同步软件才有了生存的空间
你的perl代码也才有了发布的由头
1

评分人数

天的白色影子

TOP

本帖最后由 523066680 于 2025-3-7 16:25 编辑

回复 12# qzwqzw


    其实就是很久没登陆了,拿个库存货发一下。具体原因已经忘得差不多了。
然后就有人推荐robocopy,花了很长时间去回忆当时为啥写这个,还要花时间去复现、验证,着实费时间。到后面反思一下:还不如把帖子删了清净。

对于新的硬盘,我从来不做校验。
对于一个出过问题,修复后还能用的硬盘,用来存一些旧归档文件,它依然有可能在(未来写入的)某个位置开始出现问题,所以刚拷贝进去的文件不校验肯定是不放心的。
[url=][/url]

TOP

回复 14# 523066680


    怪不得还要黑体加粗
天的白色影子

TOP

返回列表