mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
阅读:2295回复:8

文件防写坏的一些看法

楼主#
更多 发布于:2010-04-02 13:51
文件过滤加密不可避免的会产生一些坏文件,写坏文件有时候不是因为自身处理逻辑的问题 而是可能在处理某些写入内容的瞬间 掉电之类的。
如何避免外因 或者内因引起的 坏文件的产生应该是必须考虑的事情。
不知道 这个议题值不值的讨论 能不能讨论 呵呵
我先说两个关于如何避免坏文件 。我的想法。
1写前备份,这是最简单的事情了,在写的时候 备份 可以保证不会损失全部文件内容。至少可以恢复到修改前的部分。弱点就是效率会很低下。对于经常操作的文件 增加备份间隔 记录上次记录时间。
2 针对大文件,在磁盘上生成文件镜像,将某些写操作映射到磁盘别的位置,做成类似于还原系统的东西。并在空闲时刻进行文档整理。

浅显的想法,欢迎大家互相讨论。呵呵

ander5115
驱动牛犊
驱动牛犊
  • 注册日期2009-12-23
  • 最后登录2012-08-17
  • 粉丝6
  • 关注3
  • 积分76分
  • 威望681点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-04-02 17:09
驱动过多的操作文件和生成新文件会被某些杀毒软件误认为病毒,不利于兼容。
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-04-03 13:56
你这2个方法也没用,写前备份,如果多次保存操作,某次坏了,照样全坏;镜像也是一样;而且这些方法只会让系统变的很慢,最终客户也无法接受

如果代码本身都会导致文件出问题,那么你做再多的补救措施也没用


所以:必须保证你自己的代码不出问题,把逻辑吃透,不要奢望可以补救

这个工作是漫长的,在自己一台电脑前折腾几个月就指望能出产品是不可能的,这里很多人都磨了好几年了,需要极大的耐性啊
提问归提问,还是只能靠自己
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
地板#
发布于:2010-04-03 15:02
没有终极方式。

如果一定要找方法,参考数据库使用的方法,那是目前来说相对比较好的。但是至于实现....

走走看看开源好 Solaris vs Linux
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地下室#
发布于:2010-04-03 16:30
现在还不急着考虑这样的问题,
“驱动过多的操作文件和生成新文件会被某些杀毒软件误认为病毒,不利于兼容。 ”这点应该不是问题。
“必须保证你自己的代码不出问题,把逻辑吃透,不要奢望可以补救”即便逻辑吃透写的再好,理论上也是可能会产生坏文件的。
“如果代码本身都会导致文件出问题,那么你做再多的补救措施也没用”这点很是同意。

“如果一定要找方法,参考数据库使用的方法,那是目前来说相对比较好的。但是至于实现....” 关于这个问题 我也想到过设计为可以“回滚”之类的,但是从效率上看 好像有点得不偿失。

我想现在的关键可能是 代价和利益的取舍,其实可能和looksail说的 代码逻辑处理好 必须保证自己代码不出问题 。当这点达到以后产生坏文件的可能已经基本等同于 或者说略大于 不安装过滤驱动时候的坏文件产生率了 ,在这里再考虑避免坏文件的时候 可能在现有框架上做能取得的不会是最好的效果。

缓存的引入本身就增加了突然断电等突发事件时候数据丢失的可能。对付这些可能从外部去限制更好(比方强制客户增加ups?呵呵)。
多次备份 回滚 好像对于一般的数据没有多大的意义。
高标准 高安全 肯定是软硬结合的效果,可能单一的从所谓的文件系统去考虑解决不了这样的问题。可能是自己思路狭隘了。

呵呵,感谢ander5115 looksail cyliu的讨论。
欢迎大家各抒己见。

也许我们能在文件系统过滤中能过的最好程序就是 和没有安装我们以前达到同样的坏文件产生率,但是即便这样也会有用户责怪你,所以有必要做一个能降低坏文件出现率的东西。只是一些想法,能不能做 怎么做 我还没有想到,会不会去做我也不知道。
qianjunhua
驱动小牛
驱动小牛
  • 注册日期2003-12-08
  • 最后登录2013-02-27
  • 粉丝11
  • 关注0
  • 积分712分
  • 威望1052点
  • 贡献值1点
  • 好评度57点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-04-10 11:40
恩理论上应该可以做到文件的数据最小破坏
1:驱动里面的逻辑没有任何问题
2:对这次写的文件里面的数据 要对数据校验
3:这次写的文件不能是原始文件,写完后 在程序退出或者定时的rename成原始文件。
貌似OSR 那帮人写的东西 对着里面的逻辑实现了。
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
6楼#
发布于:2010-04-13 15:05
回 5楼(qianjunhua) 的帖子
感谢qi 呵呵
mz_zhang
驱动牛犊
驱动牛犊
  • 注册日期2008-03-04
  • 最后登录2012-11-19
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望142点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-04-17 16:11
没有人能保证绝对不写坏文件的 或者说即便是操作系统或者ntfs也不可能保证绝对没有数据损坏。
数据损坏是各个层面的 ,好的文件系统降低了磁盘引起坏文件的概率,好的文件过滤或许能降低文件系统出现坏文件的概率 但是现在来看 这样的产品不多。期待所谓的layer fsd吧。
任何事情都有回报率这样一个问题 ,所以考虑得失 更多的是没有人去做这样的事情 做的仅仅是最大限度的保证自己不出错!
looksai-“所以:必须保证你自己的代码不出问题,把逻辑吃透,不要奢望可以补救”

--浅见
mz_suya
驱动小牛
驱动小牛
  • 注册日期2008-06-13
  • 最后登录2010-08-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望648点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分1分
8楼#
发布于:2010-04-23 17:01
回 7楼(mz_zhang) 的帖子
呵呵 谢谢  各尽本分就好
游客

返回顶部