关于文件管理器往U盘中复制文件数据容易出错的解释
Tofloor
poster avatar
zccrs
deepin
2018-12-13 21:13
Author
本帖最后由 zhangjide 于 2018-12-14 11:50 编辑

前段时间看到论坛一些同学发帖说文件管理器往U盘中复制文件容易丢失的问题。现象大概有下面几种:
  • 复制了很多文件,结果到windows上查看文件大小都是0B
  • 文件复制完成后,插到windows上找不到这个文件
  • 文件复制完成了,在windows上也能看到文件,但是文件内容不对

随之而来的是大家会觉得文件管理器复制文件的速度太假了,是骗小孩子的。之前,计算文件复制速度时只考虑了已用时间和已写入的数据量,但是,写入文件的数据会被系统先放到内存的buffer中,内存肯定是很快的,所以就导致了文件管理器中显示的速度有点飘。再然后,文件复制完了,文件管理器会关闭已打开的文件,系统在执行关闭动作时会把一部分数据回写到储存设备,这部分所需要的时间不确定,所以会导致大家看到文件管理器进度卡在 99%很久。当文件被正常关闭后,接下来的操作一般是点击侧边栏的三角形图标卸载U盘,然后就拔下U盘到其它设备使用了。在这个步骤中存在一个问题,之前的设计中,三角图标在点击后基本很快就会隐藏,但此时设备还在安全移除中,正确的做法是,等待侧边栏上的设备入口消失后再拔掉U盘。针对这个行为可能会引起的误解,文件管理器中更改了可移动设备卸载时的逻辑,不管是点击三角图标还是在右键菜单中选择卸载,对可移除设备都会执行卸载和弹出动作,且等动作都完成后再隐藏三角图标和设备入口,以免图标的隐藏给我们带来错觉。上述这些改动都是新加的,大家在使用的过程中发现了什么问题请积极反馈,我们肯定会积极寻找原因的。另外,往U盘等设备中复制数据时一定要按标准步骤操作,这样才能最大程度的降低数据-----丢失的风险。我个人总结了下面的几个步骤,可以供大家参考:
  • 等待文件管理器的复制对话框消失
  • 检查复制后的文件是否正常
  • 在文件管理器中卸载设备并等待侧边栏上不再显示这个设备
  • 如果设备上有数据指示灯,一定要等灯熄灭后再拔出设备

* 不建议往U盘中剪切数据,在条件允许的情况下,请尽量使用复制,而不是剪切,这样当发现U盘中的数据有问题时还能挽回。另外一定要确保数据都正常时再删除电脑上旧的数据。


如果以上四个步骤都没有出现问题,但U盘上的数据还是消失或者损坏了,可以尝试使用别的文件管理器或者cp命令,把结果和过程都反馈。

--------------------------------

看到有同学提到文件内容校验的问题,文件管理器在复制文件时默认会使用crc32校验新文件内容。但是这个措施只能保证文件管理器给系统写入的数据是没有问题的,不能表示此时此刻硬件设备上存储的数据和当前读到的是一致的。我会考虑把文件完整性校验放到复制任务结束之后,理论上来讲会比现在的更加实用,不过也会稍微增加文件复制任务所需要的时间

Reply Favorite View the author
All Replies
1 / 2
To page
avatar
justforlxz
deepin
2018-12-13 21:38
#1
作为一个合格的二楼,一定要在前排摆好花生瓜子和板凳。
Reply View the author
avatar
yexiaoqi
deepin
2018-12-13 22:06
#2
复制完用sync命令,执行完就好了
Reply View the author
avatar
justforlxz
deepin
2018-12-13 22:29
#3
https://bbs.deepin.org/post/172344
复制完用sync命令,执行完就好了

主要是有的人一看复制完了,就立马拔掉设备了,但是又不能一直让你停留在100%的进度。

这个取舍不好做。
Reply View the author
avatar
liao231
deepin
2018-12-13 23:46
#4
个人认为文件放到内存缓存应该不计完成百分比,从内存往U盘拷才开始计算完成百分比,如果能实现的话。读入缓存都算进度条的话只能算完成50%
Reply View the author
avatar
abc
deepin
2018-12-14 00:42
#5
https://bbs.deepin.org/post/172344
主要是有的人一看复制完了,就立马拔掉设备了,但是又不能一直让你停留在100%的进度。

这个取舍不好做。 ...

在拷贝完成后增加个sha值验证,一样后拷贝窗口再关闭
Reply View the author
avatar
186******51
deepin
2018-12-14 01:38
#6
文管在对移动设备进行操作时应该强制同步写入,并禁用写入缓存,即使慢,那也是实际读写速度,这样才靠谱。
Reply View the author
avatar
186******51
deepin
2018-12-14 01:39
#7
cg281312960 发表于 2018-12-13 16:42
在拷贝完成后增加个sha值验证,一样后拷贝窗口再关闭

写一遍又读一遍,拷贝大文件用户要砸电脑了
Reply View the author
avatar
justforlxz
deepin
2018-12-14 05:49
#8
https://bbs.deepin.org/post/172344
文管在对移动设备进行操作时应该强制同步写入,并禁用写入缓存,即使慢,那也是实际读写速度,这样才靠谱。 ...

然后就有人报“为什么深度文件管理器复制文件这么慢,windows都xxx就复制完了”等言论,不是没有过这样的情况发生,复制文件这个功能都改了最起码三次了。
Reply View the author
avatar
yexiaoqi
deepin
2018-12-14 06:38
#9
https://bbs.deepin.org/post/172344
主要是有的人一看复制完了,就立马拔掉设备了,但是又不能一直让你停留在100%的进度。

这个取舍不好做。 ...

绝对是向U盘中复制文件时的场景,哈哈
Reply View the author
avatar
zccrs
deepin
2018-12-14 19:29
#10
https://bbs.deepin.org/post/172344
写一遍又读一遍,拷贝大文件用户要砸电脑了

没什么,读取很快的
Reply View the author
avatar
zccrs
deepin
2018-12-14 19:30
#11
https://bbs.deepin.org/post/172344
复制完用sync命令,执行完就好了

U盘弹出时会和sync有通用的处理的
Reply View the author
avatar
zccrs
deepin
2018-12-14 19:30
#12
https://bbs.deepin.org/post/172344
个人认为文件放到内存缓存应该不计完成百分比,从内存往U盘拷才开始计算完成百分比,如果能实现的话。读入 ...

现在就是这样实现的呀
Reply View the author
avatar
zccrs
deepin
2018-12-14 19:33
#13
https://bbs.deepin.org/post/172344
在拷贝完成后增加个sha值验证,一样后拷贝窗口再关闭

现在有crc32校验,不过这样只能保证数据在系统接口下是正常的(不代表硬件本身存储的数据在此时没有问题)
Reply View the author
avatar
186******51
deepin
2018-12-14 20:37
#14
kirigaya 发表于 2018-12-13 21:49
然后就有人报“为什么深度文件管理器复制文件这么慢,windows都xxx就复制完了”等言论,不是没有过这样的 ...

额,Windows下可移动存储设备都是禁用写入缓存的呀,往U盘里拷贝数据速度就是实际读写速度,怎么可能会比Windows慢呢,只有内置硬盘才会启用写入缓存,这个肯定要分设备区别对待的
Reply View the author
avatar
186******51
deepin
2018-12-14 20:43
#15
zhangjide 发表于 2018-12-14 11:29
没什么,读取很快的

并不快,不是所有的U盘读取速度都很高的,一些速度比较一般的盘基本要花两倍时间才能完成一次拷贝任务了,特别是拷贝镜像文件、碎文件的时候,往U盘里拷完数据马上回读感觉速度很快只是因为是从缓存里读的,真正从U盘里读校验带来的延时会带来更差的体验。
Reply View the author
avatar
jyxlfd
deepin
2018-12-14 21:09
#16
出现下图这种保存失败的问题,权限的问题吗?如何解决??
Reply View the author
avatar
186******51
deepin
2018-12-14 21:47
#17
jyxlfd 发表于 2018-12-14 13:09
出现下图这种保存失败的问题,权限的问题吗?如何解决??

是不是没有关闭Windows的快速启动?开启Windows的快速启动功能会导致Linux下NTFS分区的文件不可写,也就是不能保存,你可以重启关闭Windows快速启动功能再回来看看,应该就可以保存文件了。
Reply View the author
avatar
justforlxz
deepin
2018-12-14 22:50
#18
https://bbs.deepin.org/post/172344
额,Windows下可移动存储设备都是禁用写入缓存的呀,往U盘里拷贝数据速度就是实际读写速度,怎么可能会比 ...

我没关心过这个… 我的u盘在deepin下也是100M的速度,,,
Reply View the author
avatar
186******51
deepin
2018-12-14 23:14
#19
本帖最后由 redchenjs 于 2018-12-14 15:36 编辑
kirigaya 发表于 2018-12-14 14:50
我没关心过这个… 我的u盘在deepin下也是100M的速度,,,

大多数普通U盘没这么高的速度诶,读取还好点,写入50M都不一定有,不过Windows下往U盘拷数据确实是同步写入的,附图是Windows设备管理器里U盘和硬盘的驱动属性,U盘默认就是直接写入的,所以拷完文件不弹出直接拔也不丢数据,而硬盘是默认启用写入缓存用以提升性能,deepin下应该全部使用的带写入缓存的模式,显示文件复制得很快,结果是数据还在后台继续写入。deepin可以参考一下微软的这个设计,在对U盘、移动硬盘之类的拷数据的时候应该全部前台处理,因为大多数用户已经习惯Windows下的操作方式了,这种后台写入的方式在实际情境中也确实不利于U盘数据的快速交换。
Reply View the author
avatar
liao231
deepin
2018-12-15 00:59
#20
https://bbs.deepin.org/post/172344
现在就是这样实现的呀

哦,这是改好了吗,我原来拷文件都是一下子就99%了,然后等蛮久才拷完。试了一下,好像确实不会一下子就99%了,那这样就可以了啊,最后弹个框“复制完成”或者那个圈100%了显示完成就更好了(最怕突然就消失,小白有时候需要一个提示),还有U盘卸载了应该搞个提示比如“U盘安全拔出”什么的(现在是没了就没了),我记得360U盘助手那个就挺好的啊,插个U盘在桌面有个小图标,有个安全弹出,有个杀毒(这个杀毒深度应该还没有)。
Reply View the author
1 / 2
To page