1
xupefei 2020-01-15 19:34:32 +08:00
真能省时间吗。
复制文件需要写入 500G。MD5 需要读取硬盘 500GB。 在复制文件的时候 HDD 占用是 100%,这时进行读取必定牺牲写入速度。换句话说,复制文件时间会变长。 具体会变多长呢?当然是 170 分钟。 |
2
winterbells 2020-01-15 19:36:30 +08:00 via Android
@xupefei 他是想说在内存里算 md5 吧,省一次读取
|
3
xupefei 2020-01-15 19:38:38 +08:00
@winterbells 但是在内存里 md5 只能保证读取没错,不能保证写入没错……
单单保证读取没错又没啥意义,毕竟读取时底层已经校验过了。 |
4
autoxbc OP |
5
Sylv 2020-01-15 20:08:17 +08:00 via iPhone
现成软件估计是没有,需求太小众了,自己写个 Python 脚本啥的不是太难。
|
6
xupefei 2020-01-15 20:19:30 +08:00 1
@autoxbc dcfldd 可以,但是只有 linux 版。
穿透缓存可以用系统提供的 API, 例如 Win32 的 CreateFile 有个 FILE_FLAG_NO_BUFFERING 选项可以关闭系统缓存。 |
7
eason1874 2020-01-15 20:21:23 +08:00
MD5 是分块计算的,一边复制一边计算是可能的,但我搜了一圈没搜到现成软件,不知道是不是搜索词不对。
刚看到一个叫 TeraCopy 的软件,有 Windows 版,支持 10 种哈希算法校验,看几个讨论都说 xxHash 比 md5 快,你可以试试。 |
8
autoxbc OP @Sylv 想过用 node 写,不过一旦有隐性 bug 就是灾难性的。希望是成熟一点的方案,至少被很多人用过的
|
9
lostpg 2020-01-15 20:28:48 +08:00 via Android
有个软件能够在复制以后自动帮你做一遍校验,很方便,但是我现在在卫生间,等我出来了就报上软件名
|
11
SoloCompany 2020-01-15 20:56:06 +08:00 1
cat file1 | tee file2 | md5sum > file2.md5 ?
|
12
ipwx 2020-01-15 20:58:17 +08:00
一开始看 1L 的评论觉得他在无理取闹,按照楼主的字面需求,只要生成 MD5 就行了,根本没有 1L 说的问题。
细细一品,卧槽,我怎么觉得楼主的需求很奇葩。。。 不把文件完整地存进第二张盘,然后清空缓存,再读出来,然后再算 MD5,就根本起不到校验拷贝操作的正确性吧。。 |
13
eason1874 2020-01-15 21:23:07 +08:00
@ipwx #12 楼主这个需求确实很可能是不合理的。
我刚才搜索相关软件的时候看了下那些专门做复制功能的商业软件,他们哈希校验都是 after copy,免费版付费版都没有边复制边校验,说明这个做法很可能有致命缺陷,只是我们不熟悉不知道。 |
14
ipwx 2020-01-15 22:51:28 +08:00
@eason1874 因为边复制边校验,要么总时间更长(写入一块到目标盘、清空缓存、从目标盘读出一块;这肯定比不上先全部写入,清空缓存,然后全部读出计算 MD5 来得快),要么根本只能校验源盘而不能校验目标盘。
|
15
msg7086 2020-01-16 02:32:02 +08:00 1
@xupefei @eason1874 @ipwx
楼主的需求是复制时生成 MD5 而不是复制后校验写入完整。 换句话说楼主对文件写入是否完整并没有需求,或者说校验写入完整和生成 MD5 本来就是分开的两个需求。 生成 MD5 的目的是等几个月、几年以后,磁盘老化了产生 Bitflips 的时候,去检验备份是否完整。 而你们提的校验写入完整,目的是检查当前的磁盘写入是否正确。 假设楼主的冷备盘是新品品质,电脑也有 ECC,那么磁盘写入是否正确其实是不需要检查的。 楼主的要求,换句话说,其实是生成一个 MD5 文件,然后把源文件和 MD5 文件一起复制到新硬盘里。 ========== 至于复制时计算 MD5,其实只要空余内存大点,复制的时候源数据都会缓存的,直接在旁边跑一个有暂停功能的校验软件就行了。让校验软件的速度和复制进度一样,两个软件会共享读取的数据的。 如果不想手动操作,那就还是老老实实自己写代码实现功能吧。 |
16
0TSH60F7J2rVkg8t 2020-01-16 08:22:27 +08:00 via iPhone
自己写代码分分钟的问题,都是现成的库
|